WinIo.vxd 驱动在机器上是安装成功了,但是模拟按键非常不稳定,跪求驱动高手解围,非常紧急

dyy8317 2010-03-07 04:56:33
大家好,我是熊猫媛元,这个问题拖了一个星期了,实在迫不得已上了论坛,希望有高手解围.非常感谢..
我在程序项目工程和Debug里都装了Winio.vxd,WinIo.dll,WinIo.sys,WinIo.lib,WinIo.h

然后我写了一个类
CKeyboard::~CKeyboard(void)
{
}
void CKeyboard::KBCWait4IBE()
{
DWORD dwVal=0;
do
{
GetPortVal(KBC_CMD,&dwVal,1);
}
while((&dwVal)&&(0x2)==0);
}
void CKeyboard::KEY_DOWN(int vk_in)
{
int myscancode;
myscancode=MapVirtualKey(byte(vk_in),0);
KBCWait4IBE();
//SetPortVal(KBC_CMD,0xD2,1);
//KBCWait4IBE();
//SetPortVal(KBC_DATA,0xE2,1);
//KBCWait4IBE();
SetPortVal(KBC_CMD,0xD2,1);
KBCWait4IBE();
SetPortVal(KBC_DATA,myscancode,1);
}

void CKeyboard::KEY_UP(int vk_in)
{
int myscancode;
myscancode=MapVirtualKey(byte(vk_in),0);
KBCWait4IBE();
//SetPortVal(KBC_CMD,0xD2,1);
//KBCWait4IBE();
//SetPortVal(KBC_DATA,0xE0,1);
//KBCWait4IBE();
SetPortVal(KBC_CMD,0xD2,1);
KBCWait4IBE();
SetPortVal(KBC_DATA,(myscancode|0x80),1);

}
void CKeyboard::KeyboardInit()
{
bool br1;
br1=InstallWinIoDriver("WinIo.sys");
if(br1==false)
{
MessageBox(NULL,"安装IO_device失败,程序自动关闭,请您不用担心~","XD友情提示2",MB_OK);
RemoveWinIoDriver();
ShutdownWinIo();
exit(0);
}
else
{
MessageBox(NULL,"安装IO_device成功","XD友情提示1",MB_OK);
}
br1=InitializeWinIo();
if(br1==true)
{
MessageBox(NULL,"InitializeWinIo成功~","XD友情提示2",MB_OK);
}
else
{
MessageBox(NULL,"InitializeWinIo不成功~","XD友情提示2",MB_OK);
}

}
//移除驱动
void CKeyboard::KeyboardRemoveWinIo()
{
RemoveWinIoDriver();
ShutdownWinIo();
}

................................................
................................................
//调用这个类,每隔1秒,打印字符a键
void main()
{

CKeyboard keyboard

keyboard.KeyboardInit();

while(true)
{
Sleep(1000);
Keyboard.KEYDOWN(65)
Sleep(150);
Keyboard.EY_UP(65);
Sleep(500);
}

}

虽然驱动安装没有问题,字符可以在记事本上打印
但是问题在于在我的机器上打印非常非常的不稳定,不是隔一秒打印一个a,秒甚至等了很长的时间才打印1个a..
而在另一个同事的机器上打印非常顺畅和连续.
我非常的困惑,在网上也搜了资料,WinIo.vxd是有些接触底层的,跟硬件有些关系,希望能够集思广义,能有人能说明一下具体的原由,还请高手们提出一些具体的解决方案.

还有我想再问一个问题,是不是按键精灵用了WinIo.vxd

麻烦大伙了,再次谢谢

...全文
404 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongbin104 2010-03-10
  • 打赏
  • 举报
回复
按键精灵用的是winio。。不过它应该是对winio库做了处理。。至于怎么个处理。。不知。
zhongbin104 2010-03-10
  • 打赏
  • 举报
回复
我也碰到同样的问题了---模拟键盘鼠标硬件操作。。也是在网上下载了个winIo 的库。但是真的不稳定。而且还出现了奇怪的现象-----我的程序加载winio都是失败的(加载失败没处理,出来就没后面的现象了),可是还能输出想要的东西。。也就是winio驱动加载失败还有模拟输出。

LZ的驱动安装都是好的。还出现输出混乱的情况,那可能是和驱动有关吧。 等高手求解。。随便也帮我看看我的问题。。谢谢拉。。。
zgl7903 2010-03-10
  • 打赏
  • 举报
回复
模拟键盘可以使用 SendInput keybd_event等 不必要安装驱动的
dyy8317 2010-03-10
  • 打赏
  • 举报
回复
哥们,等我有了好答案,再结贴行不,我一顶给你分的..
Eleven 2010-03-10
  • 打赏
  • 举报
回复
最近也开始学写驱动程序,与lz共勉。。。。。。。。
dyy8317 2010-03-10
  • 打赏
  • 举报
回复
恩..恩..
我结帖..
bilaopao 2010-03-09
  • 打赏
  • 举报
回复

哥们,你要养成结贴的好习惯。
引用 8 楼 dyy8317 的回复:
按键精灵用了WinIo.vxd 吗?
按键精灵的按键实现是用了具体的什么API?
bilaopao 2010-03-08
  • 打赏
  • 举报
回复
汗死,笔误

PS:CPU跳回到Sleep的线程后到底是重新Sleep1秒还是接着之前已经Sleep的时间这个我确定。我感觉是接着的。
coffeefish 2010-03-08
  • 打赏
  • 举报
回复
4楼说的正确,要想十分准确建议用硬件中断,不过牵涉到驱动程序编写。windows下如果要求不是很高,大约1秒钟即可,用timer也可以,如果要求较高,你可以试一下多媒体定时器。
dyy8317 2010-03-08
  • 打赏
  • 举报
回复
按键精灵用了WinIo.vxd 吗?
按键精灵的按键实现是用了具体的什么API?
dyy8317 2010-03-08
  • 打赏
  • 举报
回复
不同的操作系统 是不是要WinIo.vxd 操作的端口不一样.
WinIo.vxd 驱动是不是跟CPU 的速率有关系..
如果是 SLEEP的问题的话 ,问题出在哪里
bilaopao 2010-03-07
  • 打赏
  • 举报
回复
这个跟内核有关,其实不管你的环境如何,都不会非常准的。

比如你Sleep 1秒。

刚开始sleep的时候cpu会去找其他的高优先级的线程去执行,然后运行一个时间片再跳到别的线程。

假如说现在跳回到sleep所在的线程了,cpu一看,这还没sleep完呢。 然后他又跳到别的线程。

最后经过N个时间片跳了回来,看到已经执行了1秒了。就继续执行。

显然这个时间不可能十分准。

PS:CPU跳回到Sleep的线程后到底是重新Sleep1秒还是接着之前已经Sleep的时间这个我确定。我感觉是接着的。
dyy8317 2010-03-07
  • 打赏
  • 举报
回复
能具体说说不..什么样的运行环境..
bilaopao 2010-03-07
  • 打赏
  • 举报
回复
跟运行环境有关。
bilaopao 2010-03-07
  • 打赏
  • 举报
回复
sleep和定时器函数都是不准确的。 它只能指定一个时间标示,但是系统并不会非常准确的按照这个时间来操作。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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