感冒软胶囊的功效:硬件模拟鼠标操作 - 昕旸时光 - 博客园

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 17:45:13

硬件模拟鼠标操作

Posted on 2007-04-29 08:14 grayhound 阅读(1014) 评论(7)  编辑 收藏 用winio.dll模拟硬件(底层驱动)的鼠标左键点击动作。
遇到问题是,按下动作执行了,可是释放没执行,即鼠标左键一直处于按下状态,如何解决?

sendKey.MyMouseDown(0x09); //发送左键按下
sendKey.MyMouseDown(0);
sendKey.MyMouseDown(0);
sendKey.MyMouseDown(0);
sendKey.MyMouseUp(0x08); //发送左键释放
sendKey.MyMouseUp(0);
sendKey.MyMouseUp(0);
sendKey.MyMouseUp(0);

private void KBCWait4IBEM() //等待键盘缓冲区为空
{
//int[] dwVal = new int[] { 0 };
int dwVal = 0;
do
{
//这句表示从&H64端口读取一个字节并把读出的数据放到变量dwVal中
//GetPortVal函数的用法是GetPortVal 端口号,存放读出数据的变量,读入的长度
bool flag = GetPortVal(0x64, out dwVal, 1);
}
while ((dwVal & 0x2) > 0);
}

//这个用来模拟按下键,参数vKeyCoad传入按键的虚拟码
public void MyMouseDown(int vKeyCoad)
{
int btScancode = 0;

btScancode = MapVirtualKey(vKeyCoad, 0);
btScancode = vKeyCoad;

KBCWait4IBE(); // '发送数据前应该先等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, 0xD3, 1);// '发送键盘写入命令
//SetPortVal函数用于向端口写入数据,它的用法是SetPortVal 端口号,欲写入的数据,写入数据的长度
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, btScancode, 1);// '写入按键信息,按下键

}

//这个用来模拟释放键,参数vKeyCoad传入按键的虚拟码
public void MyMouseUp(int vKeyCoad)
{
int btScancode = 0;
btScancode = MapVirtualKey(vKeyCoad, 0);
btScancode = vKeyCoad;

KBCWait4IBE(); // '发送数据前应该先等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, 0xD3, 1); //'发送键盘写入命令
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (btScancode | 0x80), 1);// '写入按键信息,释放键
}