2012-05-01 92 views
0

即时编写分析用户写入的复杂程序,并且在64位操作系统上运行此应用程序时遇到问题。 以下是您可以运行以重新解决问题的代码。 http://thetechnofreak.com/technofreak/keylogger-visual-c/ 但当然,您需要有64位操作系统,因为该程序在32位操作系统上正确运行。KbdLayerDescriptor在64位体系结构中返回NULL

此调用

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 

但显然,它没有帮助。

+0

你实际使用KBD_LONG_POINTER?需要。 –

+0

我使用了我发布的第一个链接中使用的声明 - kbdext.h –

+0

问题是您将pVkToWchars成员的类型更改为64位指针。 –

回答

1

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

我假设你正在编译为32位,但在64位上运行。如果是这样,那么首先你需要在包括kbd.h(或kbdext.h,如果你正在使用它)之前定义BUILD_WOW6432。其次,使用

SHGetFolderPath(NULL, CSIDL_SYSTEMX86, NULL, 0, systemDirectory) 

而不是GetSystemDirectory(systemDirectory, MAX_PATH)。这意味着即使在64位机器上,您也始终使用32位代码。

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

相关问题