天天看點

代碼實作全局消息鈎子SetWindowsHookExA監視按鍵記錄

簡單的使用Windows提供的Hook API SetWindowsHookExA,實作彈窗提示每次按下的按鍵

步驟:

1.編寫一個Dll調用SetWindowsHookExA,實作彈窗

2.編寫一個exe調用LoadLibrary加載生成的Dll

代碼實作全局消息鈎子SetWindowsHookExA監視按鍵記錄

dll代碼如下

#include<stdio.h>
#include<windows.h>
HHOOK shook;
LRESULT WINAPI keyboard(int nCode,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY DllMain( HINSTANCE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved )
{
	switch(ul_reason_for_call)
    {
		case DLL_PROCESS_ATTACH:
		{
			shook = SetWindowsHookExA(WH_KEYBOARD,keyboard,hModule,0);
		}
     case DLL_THREAD_ATTACH:
     case DLL_THREAD_DETACH:
     case DLL_PROCESS_DETACH:
		 break;
    }
    return TRUE;
}	
LRESULT __stdcall keyboard(int nCode,WPARAM wParam,LPARAM lParam)
{
	if(nCode >=0)
	{
		if(!(lParam & 0x80000000))
		{
			char tcKey[MAX_PATH] = {0};
			GetKeyNameTextA(lParam,tcKey,MAX_PATH);
			MessageBoxA(NULL,tcKey,tcKey,MB_OK);
			return CallNextHookEx(shook,nCode,wParam,lParam);
		}
	}
	else
		return CallNextHookEx(shook,nCode,wParam,lParam);
}
           

exe代碼如下

#include<stdio.h>
#include<windows.h>
void main()
{
	LoadLibraryA("sethook.dll");
	getchar();
}
           

繼續閱讀