2 回答

TA貢獻1817條經驗 獲得超14個贊
不用sleep()函數, 4句 simulate_key() 執行太快,等于連續按了兩次??床灰姛舻牧翜纭?br/>你可以試用 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做一些事情。
添加回答
舉報