调用WinIO遇到的一个问题

dcrr64 2009-09-18 04:28:10
下面这段代码模拟按键的
MyKeyDown(65); //按A键
MyKeyUp(65); //释放A键
这样调用没问题但按“SHIFT”键就出问题了像下面这样调用就会键盘鼠标都动不了
MyKeyDown(65); //按A键
sleep(20);
MyKeyDown(16); //按SHIFT键
sleep(20);
MyKeyUp(16); //释放SHIFT --这里卡死了
sleep(20);
MyKeyUp(65); //释放A键


const
KBC_KEY_CMD = $64;
KBC_KEY_DATA = $60;
procedure KBCWait4IBE; //等待键盘缓冲区为空
var
dwVal:DWord;
begin
repeat
GetPortVal($64,@dwVal,1);
until (dwVal and $2)=0;
end;

//键盘==========================================
procedure MyKeyDown(vKeyCoad:Integer);
var
btScancode:DWord;
begin
btScancode:=MapVirtualKey(vKeyCoad, 0);
KBCWait4IBE;
SetPortVal($64, $D2, 1);
KBCWait4IBE;
SetPortVal($60, btScancode, 1);
end;

procedure MyKeyUp(vKeyCoad:Integer);
var
btScancode:DWord;
begin
btScancode:=MapVirtualKey(vKeyCoad, 0);
KBCWait4IBE;
SetPortVal($64, $D2, 1);
KBCWait4IBE;
SetPortVal($64, (btScancode or $80), 1);
end;
...全文
63 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2009-09-19
  • 打赏
  • 举报
回复
我有VB的例子,感觉使用起来很好用啊。
gyk120 2009-09-19
  • 打赏
  • 举报
回复
bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize)
这个代码以前看过,兼容性的确不是很好,经常卡死,不知道怎么回事
dcrr64 2009-09-19
  • 打赏
  • 举报
回复
GetPortVal 是DLL里面的一个函数,看不了
贝隆 2009-09-18
  • 打赏
  • 举报
回复
关注
dahai9825 2009-09-18
  • 打赏
  • 举报
回复
你的GetPortVal函数有问题 贴出来看看
haitao 2009-09-18
  • 打赏
  • 举报
回复
repeat
GetPortVal($64,@dwVal,1);
until (dwVal and $2)=0;
这里有个循环。。。。。。。。。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧