用c语言编写全局键盘钩子

KeyHook.c:用于生成DLL文件

#include <Windows.h>
#include <stdio.h>

static HHOOK hkb=NULL;
static HINSTANCE hins;
LRESULT RetVal;


// 使用__declspec(dllexport)声明导出函数
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam);
__declspec(dllexport)  BOOL InstallHook();
__declspec(dllexport) BOOL UnstallHook();
__declspec(dllexport) DWORD SaveDataToFile(
					 LPSTR szFilePath,
					 LPVOID lpData,
					 DWORD dwDataSize);
/*************************************
* DllMain
**************************************/
BOOL WINAPI DllMain(
	HINSTANCE hinstDLL,  // DLL模块的句柄
	DWORD fdwReason,     // 调用的情况
	LPVOID lpReserved )  // reserved
{
	// 在不同的情况下都会调用DllMain函数,分别处理
	switch( fdwReason ) 
	{ 
		// 加载Dll
	case DLL_PROCESS_ATTACH:
		{
			hins = hinstDLL;
			printf("The dll loaded!\n");
			break;
		}
		// 新建线程
	case DLL_THREAD_ATTACH:
		break;
		// 线程退出
	case DLL_THREAD_DETACH:
		break
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
编写系统钩子函数需要使用Windows API来实现,以下是一个简单的示例代码,用于监控键盘输入事件: ``` #include <windows.h> // 声明钩子函数 LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); // 全局变量,保存钩子句柄 HHOOK g_hHook = NULL; int main() { // 创建键盘钩子 g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0); // 消息循环,等待钩子事件 MSG msg; while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } // 卸载钩子 UnhookWindowsHookEx(g_hHook); return 0; } // 钩子函数 LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode >= 0 && wParam == WM_KEYDOWN) { KBDLLHOOKSTRUCT* pKeyboard = (KBDLLHOOKSTRUCT*)lParam; printf("Key %d pressed\n", pKeyboard->vkCode); } // 将事件传递给下一个钩子 return CallNextHookEx(g_hHook, nCode, wParam, lParam); } ``` 在上面的代码中,我们通过调用`SetWindowsHookEx`函数创建了一个键盘钩子,指定了钩子的类型为`WH_KEYBOARD_LL`,并且指定了钩子函数`KeyboardProc`。在钩子函数中,我们判断键盘事件是否为按键按下事件,并且输出按下的键的虚拟码。最后,我们通过调用`CallNextHookEx`函数将事件传递给下一个钩子。 需要注意的是,在使用钩子函数时需要特别小心,因为钩子函数可能会影响系统的性能和稳定性,如果使用不当可能会导致系统崩溃。因此,在编写钩子函数时需要仔细考虑其实现方式,遵循安全和稳定性的原则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值