可以控制键盘鼠标(相对和绝对)多媒体键盘 触摸等等
这个不是调用的系统的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以上系统网上说已屏蔽了触摸接口。
部分功能特性可能在某些系统不起作用,这些与系统有关,硬件都已实现了这些协议。