本人不喜vc++的界面~, 所以直接拿了vc的cl.exe 和 link.exe 来编译
dll文件网上搜来的:
// Hook.cpp
#include <windows.h>
HHOOK g_hMouse = NULL;
HHOOK g_hKeyboard = NULL;
// 为Hook.DLL创建一个新的节,将全局变量g_hWnd放入其中
#pragma data_seg("MySec")
HWND g_hWnd = NULL;
#pragma data_seg()
// 设置刚创建的节为共享的节
#pragma comment(linker, "/section:MySec,RWS")
// 鼠标钩子过程
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1; // 屏蔽所有鼠标消息
}
// 键盘钩子过程
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
// 后门按键用于结束该进程
if (VK_F2 == wParam)
{
::SendMessage(g_hWnd, WM_CLOSE, 0, 0);
UnhookWindowsHookEx(g_hKeyboard);
UnhookWindowsHookEx(g_hMouse);
return 1;
}
else
{
return 1; // 屏蔽所有键盘消息
}
}
// 安装鼠标钩子过程的函数
HHOOK SetHook(HWND hwnd) // 参数是为了让dll获得调用进程的主窗口的句柄
{
g_hWnd = hwnd;
// hook所有进程的鼠标、键盘消息
g_hMouse = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, GetModuleHandle("Hook.dll"), 0);
g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle("Hook.dll"), 0);
return g_hMouse;
}
然后自己写了一个简单调用程序:
返回的tmp是有值的, 可是仍然能够输入a的值, 也就是键盘没有被锁定