可以控制键盘鼠标(相对和绝对)多媒体键盘 触摸等等
这个不是调用的系统的key_event send_input 等软件API模拟的,软件模拟会被检测基本淘汰了。
这里使用的是物理芯片硬件方案,有单头(HID007) 双头 WIFI 版本,可以更好的防检测。
python通过调用DLL的接口实现各种操作,操作命令表见文章末尾。
欢迎技术讨论:Q445672671
import ctypes
from ctypes import *
import time
import platform
print(platform.architecture())
dll = cdll.LoadLibrary('hiddll.dll')
#print("dll调用测试")
#dll.test( )
time.sleep( 1 )
#USB版本硬件
usbopen=dll.open_hiddev_default()
if (usbopen < 0):
print("USB硬件未连接")
cmd=ctypes.create_string_buffer(b'consumer:mute')#多媒体静音
dll.hid007_cmd(cmd)
time.sleep(2)
x=100
y=100
cmdstr = 'mouse:absmove,%d,%d' % (x,y) #移动到WINDOWS指定坐标
print(cmdstr)
cmd=ctypes.create_string_buffer(cmdstr.encode('UTF-8'))
dll.hid007_cmd(cmd)
time.sleep( 1 )
'''
s=('中国ABC')
s=s.encode('gbk')
sbuf=create_string_buffer(s, len(s))
dll.key_unicodestring(sbuf)
abc1234
#网络版硬件WIFIHID要和运行本脚本的电脑在同一局域网 USB版硬件要注释掉这两行
IP=ctypes.create_string_buffer(b'192.168.64.255')
dll.netcfg(IP,9000) # IP(可用广播地址) 端口
#串口版
comport=ctypes.create_string_buffer(b'//./com14')#根据自己的串口号修改
serialopen = dll.serialcfg(comport,38400)
if (serialopen == 0):
print("串口打开失败")
#使用字符串命令接口更简单
#https://note.youdao.com/s/Gyrcngxs
cmd=ctypes.create_string_buffer(b'key:press,a') #键盘按键A
#dll.hid007_cmd(cmd)
cmd=ctypes.create_string_buffer(b'key:string,ABc1234') #键盘按键A
dll.hid007_cmd(cmd)
#dll.absmove(50,50)
cmd=ctypes.create_string_buffer(b'mouse:absmove,100,100') #鼠标右键
dll.hid007_cmd(cmd)
time.sleep( 1 )
# '''
"""
#直接调用函数
print("多媒体测试")
dll.vol_down(); #音量减
time.sleep( 1 )
print("鼠标移动测试")
dll.absmove(50,50)
time.sleep( 1 )
print("键盘测试")
keyname=ctypes.create_string_buffer(b'a')
dll.key(keyname,0,1)
time.sleep( 1 )
keyname=ctypes.create_string_buffer(b'b')
dll.key(keyname,0,1)
time.sleep( 1 )
keyname=ctypes.create_string_buffer(b'enter')
dll.key(keyname,0,1)
"""
#USB版本硬件
if(usbopen):
dll.close_hiddev()
HID命令格式:命令名称:动作,参数 (动作参数前后不要加空格)
|
类型 |
命令 |
动作 |
功能 |
参数说明 |
示例 |
|
键盘 |
key |
press |
点击键盘按键 |
按键名称 |
key:press,a |
|
up |
松开按键 |
按键名称,如不带参数则释放所有按键 |
key:up,a | ||
|
down |
按下按键。 |
超过一定时间没发发送up 抬起动作则主机会认为是长按键盘 |
key:down,a | ||
|
hid |
发送HID键盘码 |
HID使用HEX十六进制字符串表示 HID全0表示释放所有按键 |
key:hid,0000020000000000 | ||
|
string |
发送字符串 |
key:string,abcde | |||
|
鼠标 |
mouse |
leftclick |
左键单击 | ||
|
leftdown |
左键按下 | ||||
|
leftup |
左键抬起 | ||||
|
rightclick |
右键单击 | ||||
|
rightdown |
右键按下 | ||||
|
rightup |
右键抬起 | ||||
|
wheel |
滚轮 |
参数: 滚动数值 |
mouse:whell,120 | ||
|
move |
相对移动 |
参数1:横坐标偏移值 参数2:纵坐标偏移值 |
mouse:move,10,10 | ||
|
absmove |
绝对坐标移动 (仅WINDOWS支持。如想安卓也能支持绝对坐标请用触摸功能实现) |
参数1:横坐标 参数2:纵坐标 |
mouse:absmove,100,100 | ||
|
多媒体 |
consumer (有些键对有些操作系统可能没实现) |
androidhome |
安卓HOME键 |
无参数 |
consumer:androidhome |
|
androidback |
安卓返回键 |
无参数 |
consumer:androidback | ||
|
volup |
音量加 |
无参数 |
consumer:volup | ||
|
voldown |
音量减 |
无参数。相机状态下一般为拍照键 |
consumer:voldown | ||
|
mute |
静音 |
静音/非静音切换 |
consumer:mute | ||
|
next |
下一首 |
onsumer:next | |||
|
pre |
上一首 |
onsumer:pre | |||
|
play |
播放/暂停 |
播放/暂停切换 |
consumer:play | ||
|
stop |
停止播放 |
consumer:stop | |||
|
value |
自定义多媒体键 |
如果参数用0x开头则为十六进制,否则为十进制 |
consumer:value,0x00ea | ||
|
触摸 |
touch |
click |
点击屏幕某个点 |
参数1:横坐标x 参数1:纵坐标y |
touch:click,200,300 |
|
dbclick |
双击屏幕某个点 |
参数1:横坐标x 参数1:纵坐标y |
ouch:dbclick,200,300 | ||
|
longclick |
长按屏幕某个点 |
参数1:横坐标x 参数1:纵坐标y |
ouch:longclick,200,300 | ||
|
down |
按住屏幕某个点不抬起 |
单指触摸: 参数1:横坐标x 参数2:纵坐标y 多指触摸: 参数1: 参数1:横坐标x 参数2:纵坐标y 参数3:手指编号(0到n) |
touch:down,200,300 touch:down,200,300,1 | ||
|
up |
单指触摸: 无参数:松开手指 多指触摸 参数1:松开第几个手指 |
touch:up touch:up,1 | |||
|
slide |
滑动 |
参数1:起始点横坐标x1 参数2:起始点纵坐标y1 参数3:终点横坐标x2 参数4:终点纵坐标y2 |
touch:slide,200,200,800,800 | ||
|
slideleft |
左滑 |
无参数 |
touch:slideleft | ||
|
slideright |
右滑 |
无参数 |
touch:slideright | ||
|
slideup |
上滑 |
无参数 |
touch:slideup | ||
|
slidedown |
下滑 |
无参数 |
touch:slidedown | ||
|
set |
设置目标设备分辨率。首次使用必须先设置 |
参数1:宽 参数:高 |
touch:set,1080,2408 | ||
|
游戏手柄 |
joy |
按键 |
参数1:按键号 |
joy:1 | |
|
参数1:按键 参数2:X轴 参数3:Y轴 参数4:Z轴 |
joy:0,10,10,0 |
此命令集必须通过DLL调用转化为底层二进制报文发给硬件
想实现点击某个位置,windows系统支持绝对鼠标,其他系统如安卓必须用触摸才能实现。IOS13.3以上系统网上说已屏蔽了触摸接口。
部分功能特性可能在某些系统不起作用,这些与系统有关,硬件都已实现了这些协议。

923

被折叠的 条评论
为什么被折叠?



