-
-
[旧帖] [求助]WINIO进行硬件接口的键盘鼠标操作 0.00雪花
-
发表于: 2013-2-25 10:26 1403
-

我的代码中需调用其它程序进行操作,而用一般的POSTMESSAGE SENDINPUT被屏蔽了
因此使用WINIO进行一些稍微底层的硬件接口操作
现在只能进行键盘操作 鼠标不行
测试环境是2003server虚拟机 没办法ps/2接口的机器不多
以下试了几种方式的代码 鼠标均没反映
键盘部分:(可用)
//--KBCWait4IBE函数等待状态寄存器------------------------------------------- void KBCWait4IBE() { DWORD dwRegVal=0; do { GetPortVal(0x64,&dwRegVal,1); } while(dwRegVal & 0x2); } void KEY_DOWN(int vk_in) { Sleep(1000); KBCWait4IBE(); SetPortVal( 0X64, 0xD2, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal(0X60, 0xE2, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD2, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, MapVirtualKey(vk_in, 0), 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD2, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal(0X60, 0xE0, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD2, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal(0X60, (MapVirtualKey(vk_in, 0) | 0x80), 1); } void _stdcall SetByte( BYTE chPort, BYTE chScanCode ) { __asm { push eax; push edx; //等待状态寄存器标志位OBF置0 wait_obf: in al, 0x64; and al, 01b; jnz wait_obf; // 写入数据 mov al, chScanCode; mov dl, chPort; mov dh, 0; out dx, al; pop edx; pop eax; } } void SetKey(char SCanCode) { //无论向0x60,还是0x64写东西前都要等状态寄存器OBF变0 _asm{ Loop1: in al, 0x64 and al, 10b jnz Loop1 //向$64端口写命令 // mov al, 0xD2//写键盘输出缓存命令 mov al, 0xD3//写鼠标输出缓存命令 out 0x64, al //无论向0x60,还是0x64写东西前都要等状态寄存器OBF变0 Loop2: in al, 0x64 and al, 10b jnz Loop2 //向$60端口写参数 mov al, SCanCode out 0x60, al } }
鼠标部分:(不可用)
void Mouse_Down() { // Sub MyMouseKey(MouseFun As Long, MyMouseX As Long, MyMouseY As Long, MyMouseZ As Long) // ' 左键按下(MouseFun=9)。MyMouseX、MyMouseY、MyMouseZ 为0 // ' 右键按下(MouseFun=10)。MyMouseX、MyMouseY、MyMouseZ 为0 // ' 中键按下(MouseFun=12)。MyMouseX、MyMouseY、MyMouseZ 为0 // ' 任意键放开(MouseFun=8)。MyMouseX、MyMouseY、MyMouseZ 为0 // ' ------------------------------------ // ' 鼠标上移(MouseFun=8)。MyMouseY为移动距离,最大为255,最小为1。MyMouseX、MyMouseZ 为0 // ' 鼠标下移(MouseFun=40)。MyMouseY为移动距离,最大为1,最小为255。MyMouseX、MyMouseZ 为0 // ' 鼠标左移(MouseFun=24)。MyMouseX为移动距离,最大为1,最小为255。MyMouseY、MyMouseZ 为0 // ' 鼠标右移(MouseFun=8)。MyMouseX为移动距离,最大为255,最小为1。MyMouseY、MyMouseZ 为0 // ' ------------------------------------ Sleep(1000); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 9, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 0, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 0, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 0, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 8, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 0, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 0, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X64, 0xD3, 1 ); Sleep(10); KBCWait4IBE(); SetPortVal( 0X60, 0, 1 ); // KBCWait4IBE '等待缓冲区为空 // SetPortVal 100, 211, 1 '发送鼠标写入命令 // KBCWait4IBE '等待缓冲区为空 // SetPortVal 96, MouseFun, 1 '发送鼠标动作命令 // '------------------------------------- // KBCWait4IBE '等待缓冲区为空 // SetPortVal 100, 211, 1 '发送鼠标写入命令 // KBCWait4IBE '等待缓冲区为空 // SetPortVal 96, MyMouseX, 1 '发送鼠标动作命令 // '------------------------------------- // KBCWait4IBE '等待缓冲区为空 // SetPortVal 100, 211, 1 '发送鼠标写入命令 // KBCWait4IBE '等待缓冲区为空 // SetPortVal 96, MyMouseY, 1 '发送鼠标动作命令 // '------------------------------------- // KBCWait4IBE '等待缓冲区为空 // SetPortVal 100, 211, 1 '发送鼠标写入命令 // KBCWait4IBE '等待缓冲区为空 // SetPortVal 96, MyMouseZ, 1 '发送鼠标动作命令 // End Sub } //-------------------------------------------------------------- void SetMouse(char byCode) { //无论向0x60,还是0x64写东西前都要等状态寄存器OBF变0 _asm { Loop1: in al, 0x64 and al, 10b jnz Loop1 //向$64端口写命令 mov al, 0xD3//写鼠标输出缓存命令 out 0x64,al Loop2: in al, 0x64 and al, 10b jnz Loop2 //向$60端口写参数 mov al, byCode out 0x60,al } }
大家了解的就指导一下吧~
赞赏
他的文章
- [求助]关于Android4.2邮箱密码 4661
- [求助]安卓 微信 sqlcipher 解密 26998
- [求助]安卓 QQ 聊天内容 解密 15296
- [讨论]为甚么我的在线时间一直不涨啊 1415
- [求助]WINIO进行硬件接口的键盘鼠标操作 1404
赞赏
雪币:
留言: