【问题标题】:KbdLayerDescriptor returns NULL at 64bit architectureKbdLayerDescriptor 在 64 位架构下返回 NULL
【发布时间】:2012-05-11 00:02:55
【问题描述】:

我正在编写一个分析用户写作的复杂程序,但在 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

但显然,它没有帮助。

【问题讨论】:

  • 你真的在 VK_TO_WCHAR_TABLE 声明中使用了 KBD_LONG_POINTER 吗?必需。
  • 我使用了我发布的第一个链接中使用的声明 - kbdext.h
  • 重点是把pVkToWchars成员的类型改成64位指针。
  • 对不起,我不明白这对我有什么帮助:(

标签: winapi keyboard


【解决方案1】:

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

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

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

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

这解决了我的问题,希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 1970-01-01
    • 2015-08-27
    • 2017-02-05
    • 1970-01-01
    • 2019-11-12
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多