C++ Console+Hook 监听win32消息

处理window消息

头文件

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

回调函数

BOOL WINAPI ConsoleHandler(DWORD CEvent)
{

	switch(CEvent)
	{
		case CTRL_C_EVENT:
			MessageBox(NULL,"CTRL+C received!","CEvent",MB_OK);
			break;
		case CTRL_BREAK_EVENT:
			MessageBox(NULL,"CTRL+BREAK received!","CEvent",MB_OK);
			break;
		case CTRL_CLOSE_EVENT:
			MessageBox(NULL,"Program being closed!","CEvent",MB_OK);
			break;
		case CTRL_LOGOFF_EVENT:
			MessageBox(NULL,"User is logging off!","CEvent",MB_OK);
			break;
		case CTRL_SHUTDOWN_EVENT:
			MessageBox(NULL,"User is logging off!","CEvent",MB_OK);
			break;
	}
	return TRUE;
}

入口

int main()
{

下钩子

   if(SetConsoleCtrlHandler(
   (PHANDLER_ROUTINE)ConsoleHander,TRUE) ==0)
 {
	printf("无法安装处理程序");
	return -1;
 }

加入消息循环

MSG msg;
while(GetMessage(&msg,0,0,0))
{
	   TranslateMessage(&msg);
       DispatchMessage(&msg);
}

 return 0;
}

控制台处理按键消息

头文件

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

定义

#define WH_KEYBOARD_LL 13
HHOOK g_Hook;

回调


LRESULT CALLBACK KeyboardProc(int code,WPARAM w,LPARAM l)
{
	if(w == WM_KEYDOWN)
        printf("按下按键\n");
    else if(w == WM_KEYUP)
        printf("释放按键\n");
	return CallNextHookEx(g_Hook,code,w,l);
}

下钩子
SetWindowsHookEx设置键盘钩子;一般第一个参数是WH_KEYBOARD;
但是这里控制台要用WH_KEYBOARD_LL,不然没反应;
WH_KEYBOARD_LL在windows.h里没定义;自己加上#define;

WH_KEYBOARD和WH_KEYBOARD_LL,这两个都是键盘钩子,
MSDN上面说的是WH_KEYBOARD会在应用程序调用GetMessage 或者 PeekMessage函数并且有键盘消息(按下或者释放)的时候会调用相应的函数进行处理,
WH_KEYBOARD_LL这个类型是只要有键盘输入事件的发生,它都会将键盘消息传给相应函数,
WH_KEYBOARD_LL是底层键盘钩子,来记录计算机上所有的键盘输入。

int main()
{
	MSG msg;
	g_Hook = SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardProc,GetModuleHandle(NULL),0);
	while(GetMessage(&msg,NULL,0,0))
    {
       TranslateMessage(&msg);
       DispatchMessage(&msg);
    }
 
    UnhookWindowsHookEx(g_Hook);
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值