此段代码,不能在控制台里运行,必须有窗口。
// HOOK 消息循环处理.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
//
//LRESULT (CALLBACK *Old_WindowProc) (HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
LONG Old_WindowProc;
LONG New_WindowProc;
HWND cmd_hwd;
LRESULT CALLBACK myWindowProc (HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
LRESULT re;
if (uMsg == WM_COPYDATA)
{
printf("收到的数据消息");
}
re= CallWindowProc((WNDPROC)Old_WindowProc,hwnd, uMsg, wParam,lParam);
return re;
};
void Hook()//开始替换消息列队
{
cmd_hwd=GetConsoleWindow();//获取当前控制窗口的的句柄
printf("当前消息循环句柄为:%x",cmd_hwd);
Old_WindowProc=SetWindowLong(cmd_hwd,GWL_WNDPROC,(LONG)myWindowProc);
};
void UmHook()//停止替换消息列队
{
New_WindowProc=SetWindowLong(cmd_hwd,GWL_WNDPROC,(LONG)Old_WindowProc);
};
int _tmain(int argc, _TCHAR* argv[])
{
Hook();
while(1)
{
Sleep(1000);
}
return 0;
}