2012-05-01 38 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聲明

相關問題