gpt4 book ai didi

c++ - getAsyncKeyState 无法识别键输入

转载 作者:行者123 更新时间:2023-11-28 01:03:37 30 4
gpt4 key购买 nike

所以我决定今晚要写一个小键盘记录器,只是为了了解 getAsyncKeyState。我试图让我的日志写入一个文件,但文件的内容要么显示为空白,要么向我抛出一个随机内存地址(之前为 0x28fef0)。我听说 getAsyncKeyState 在 Windows 7 x64 上运行不佳,是这样吗?

这太令人恼火了,我本来希望今晚能够让它运行起来。

    while(1)
{
Sleep(20);
for(DWORD_PTR key = 8; key <= 190; key++)
{
if (GetAsyncKeyState(key) == HC_ACTION)
checkKey(key);
}
}

函数定义

void checkKey(DWORD_PTR key)
{
ofstream out;
out.open("log.txt");

if (key==8)
out << "[del]";
if (key==13)
out << "n";
if (key==32)
out << " ";
if (key==VK_CAPITAL)
out << "[CAPS]";
if (key==VK_TAB)
out << "[TAB]";
if (key==VK_SHIFT)
out << "[SHIFT]";
if (key==VK_CONTROL)
out << "[CTRL]";
if (key==VK_PAUSE)
out << "[PAUSE]";
if (key==VK_ESCAPE)
out << "[ESC]";
if (key==VK_END)
out << "[END]";
if (key==VK_HOME)
out << "[HOME]";
if (key==VK_LEFT)
out << "[LEFT]";
if (key==VK_UP)
out << "[UP]";
if (key==VK_RIGHT)
out << "[RIGHT]";
if (key==VK_DOWN)
out << "[DOWN]";
if (key==VK_SNAPSHOT)
out << "[PRINT]";
if (key==VK_NUMLOCK)
out << "[NUM LOCK]";
if (key==190 || key==110)
out << ".";
if (key >=96 && key <= 105)
{
key -= 48;
out << &key; // had ampersand
}
if (key >=48 && key <= 59)
out << &key; // amp'd
if (key !=VK_LBUTTON || key !=VK_RBUTTON)
{
if (key >=65 && key <=90)
{
if (GetKeyState(VK_CAPITAL))
out << &key; // amp;d
else
{
key = key +32;
out << &key; // amp'd
}
}
}
}

我被这个问题严重困扰了,非常感谢任何帮助。为什么像这样的函数在 64 位系统上会有所不同?考虑到它是我唯一的盒子,我无法在 32 位上运行它来检查它是否是一个孤立的问题。因为我假设它与 getAsyncKeyState 而不是我的代码(编译并创建一个空白日志文件)有关,所以我只包含了这两个代码片段。

最佳答案

首先,如果您正在编写键盘记录器,您不想使用 GetAsyncKeyState; GetAsyncKeyState 在您调用该函数的那一刻立即获取键的状态。您需要监听 Windows 消息,例如 WM_KEYDOWN、WM_KEYUP 或取决于记录器 WM_CHAR、WM_UNICHAR 等的目的...

关于c++ - getAsyncKeyState 无法识别键输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7524548/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com