在我学习SetWindowsHookEx函数时,发生了以下问题:
这是一个DLL文件:
#include "pch.h"
#include <iostream>
#include <fstream>
_declspec(selectany) HHOOK hook = nullptr;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//开启钩子
Listener();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
//释放钩子
UnhookWindowsHookEx(hook);
break;
}
return TRUE;
}
LRESULT CALLBACK ListenProc1(_In_ int code, _In_ WPARAM wp, _In_ LPARAM lp) {
static std::wofstream os("ABC.txt");
std::cout << "ok\n" << std::endl;
//获得按键显示
TCHAR keyty[32];
GetKeyNameText(lp, keyty, 32);
TCHAR chars[1000];
//存入文件
wsprintf(chars,L"%ws ,%ws\n", keyty,
(((lp >> 30) & 0x001) == WM_KEYDOWN || wp == WM_SYSKEYDOWN ? L"Down" : L"Up") );
os << chars;
return CallNextHookEx(hook, code, wp, lp);
}
void Listener() {
using namespace std;
//设置钩子
hook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)ListenProc1,
GetModuleHandle(L"Hook.dll"),0);
cout << GetLastError();
}
但是控制台并没有输出ok,GetLastError返回值是0,也没有输出文件ABC.txt,说明没有调用函数ListenProc1。
这个问题如何解决?