DLL注入之消息钩子:编写程序,运用消息钩子技术,阻上记事本程序 (Notepad.exe)接受键盘输入
时间: 2024-05-06 12:16:36 浏览: 14
以下是使用消息钩子技术阻止记事本程序接受键盘输入的示例代码:
```c++
#include <Windows.h>
// 定义全局变量,存储钩子句柄
HHOOK g_hHook = NULL;
// 定义钩子回调函数
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION && wParam == WM_KEYDOWN)
{
return 1; // 返回非零值,阻止按键消息传递给目标窗口
}
// 如果没有处理消息,则调用下一个钩子
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
int main()
{
// 获取记事本窗口句柄
HWND hWnd = FindWindow(NULL, TEXT("记事本"));
// 如果找到了记事本窗口
if (hWnd != NULL)
{
// 获取当前进程的模块句柄
HMODULE hInstance = GetModuleHandle(NULL);
// 安装钩子
g_hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0);
// 如果钩子安装成功
if (g_hHook != NULL)
{
// 消息循环,等待钩子消息
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 卸载钩子
UnhookWindowsHookEx(g_hHook);
}
}
return 0;
}
```
上述代码中,我们定义了一个名为 `KeyboardProc` 的钩子回调函数,用于处理键盘消息。在 `KeyboardProc` 函数中,如果接收到键盘按键消息,则返回非零值,阻止消息传递给目标窗口。最后,在主函数中,我们获取记事本窗口句柄,并安装钩子,等待钩子消息。当接收到退出消息时,卸载钩子。