-2

今天我正在构建简单的键盘记录应用程序(不不不 - 不是你的想法......)。我正在使用 GetAsyncKeyState (我知道我应该使用 SetWindowsHookEx,但是没有很多好的教程 - 而且我在 WinApi 中很烂),并且在自动启动时启动我的程序有问题。我将它添加到正确的注册表中,一切正常(程序在启动时启动),但 GetAsyncKeyState 无法读取任何密钥(如果我手动启动它就可以工作)。缩短代码:

HWND Stealth;
if(!AllocConsole()){
    Sleep(1000*5); 
}
while((Stealth = FindWindowA("ConsoleWindowClass", NULL))==NULL){
    Sleep(1000*5);
}
//ShowWindow(Stealth,0);
char i;
while (keylogger->working){
    for(i = 8; i <= 190; i++){
        if (GetAsyncKeyState(i) == -32767){
                         cout << i << endl; // No output here

}}}

为什么会存在这种行为,如何避免?它是否与在 windows 启动的早期阶段分配控制台有关?

4

1 回答 1

2

GetAsyncKeyState() 仅适用于调用进程的键盘状态。如果您的意图是捕获其他进程中的击键,则需要使用 SetWindowsHookEx() 代替,并且您的挂钩必须作为 DLL 实现,以便可以将其注入其他进程。

于 2013-11-02T17:01:25.897 回答