2 回答
TA贡献1817条经验 获得超14个赞
不用sleep()函数, 4句 simulate_key() 执行太快,等于连续按了两次。看不见灯的亮灭。
你可以试用 for for 循环 来休息一会,不用 sleep().
windows 系统,用 sleep() 程序 能达预期效果:
#include <Windows.h>
#include <Winuser.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment (lib, "User32.lib")
main(int argc, char * argv[])
{
keybd_event(VK_NUMLOCK,1,0,0);
keybd_event(VK_NUMLOCK,1,KEYEVENTF_KEYUP,0);
Sleep(2000);
keybd_event(VK_NUMLOCK,1,0,0);
keybd_event(VK_NUMLOCK,1,KEYEVENTF_KEYUP,0);
}
TA贡献1864条经验 获得超6个赞
貌似是缓冲区问题,你的虚拟按键指令都会到达键盘的缓冲区,随便敲个键,会造成键盘去处理缓冲区中的指令。之所以没能及时清空缓冲区,我猜可能还与设备的唤醒状态有关系,int fd_kbd = open(path, O_RDWR);设备处于清醒状态,随时清空缓冲区,执行sleep之后cpu不再等待keyboard去处理缓冲区了,忙别的去了,除非再次受到刺激(手动按键),cpu才会和keyboard重新建立联系,等待keyboard做一些事情。
添加回答
举报