今天我正在构建简单的键盘记录程序应用程序(不能不 - 不是因为你在想什么......)。我正在使用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启动的早期阶段与分配控制台有关?
答案 0 :(得分:2)
GetAsyncKeyState()仅适用于调用进程的键盘状态。如果您的目的是捕获其他进程中的击键,则需要使用SetWindowsHookEx(),并且必须将钩子实现为DLL,以便将其注入其他进程。