KbdLayerDescriptor在64位体系结构中返回NULL

时间:2012-05-01 13:08:56

标签: winapi keyboard

我正在编写一个分析用户编写的复杂程序,在64位操作系统上运行此应用程序时遇到问题。 以下是您可以运行以重新解决问题的代码。 http://thetechnofreak.com/technofreak/keylogger-visual-c/ 但是,当然,你需要64位操作系统,因为程序在32位操作系统上运行正确。

之后

pKbd = pKbdLayerDescriptor();

此指针等于NULL

pKbd->pVkToWcharTable

我试图首先谷歌解决方案,我发现了这一点 http://www.codeproject.com/Questions/211107/RegQueryValueEx-programcrash-on-64-Bit 它与我的问题完全相同,但似乎没有解决方案。 所以你有什么想法可能是错的吗?

程序中有这段代码,似乎它会处理32位和64位架构上指针之间的大小差异

#if defined(BUILD_WOW6432)
#define KBD_LONG_POINTER __ptr64
#else
#define KBD_LONG_POINTER
#endif

但显然,它没有帮助。

1 个答案:

答案 0 :(得分:1)

我刚刚遇到与该段代码完全相同的问题。

我假设您正在编译为32位,但正如我一样在64位上运行。如果是,那么首先您需要在包含BUILD_WOW6432之前定义kbd.h(如果您正在使用kbdext.h,则需要定义SHGetFolderPath(NULL, CSIDL_SYSTEMX86, NULL, 0, systemDirectory) )。其次,使用

GetSystemDirectory(systemDirectory, MAX_PATH)

而不是{{1}}。这意味着您始终使用32位代码,即使在64位计算机上也是如此。

这解决了我的问题,希望它可以帮助你:)