HOOK的利用
可以通过安装HOOK过程来屏蔽相应消息,比如说鼠标消息,相应键盘消息
用SetWindowsHookEx来安装相应HOOK过程,如果想屏蔽所有线程的消息,则HOOK过程必须在动态链接库中定义。
下面为屏蔽本进程中线程的鼠标和某些键盘消息的代码:
HHOOK hmouse;
HHOOK hkey;
HWND hwnd=NULL;
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return 1;//屏蔽所有鼠标消息
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
/*if(VK_F2==wParam&&1==(lParam<<29&&1))//屏蔽alt+F2组合键
return 1;
return CallNextHookEx(hkey,code,wParam,lParam);*/
if(VK_F2==wParam)//设置后门,当按F2则退出程序
{
::SendMessage(hwnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(hkey);
UnhookWindowsHookEx(hmouse);
}
return 1;
}
hmouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
hkey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
下面为屏蔽所有线程的鼠标及相应键盘消息
首先编写动态链接库hook代码:
hook.cpp:
#include <windows.h>
HHOOK hmouse;
HHOOK hkey;
HWND hwnd;
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)//按F2退出
{
::SendMessage(hwnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(hkey);
UnhookWindowsHookEx(hmouse);
}
return 1;
}
void sethook(HWND handle)
{
hwnd=handle;
hmouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("hook.dll"),0);
hkey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hook.dll"),0);
}
hook.def:
LIBRARY hook
EXPORTS
sethook @2
hooktest客户端代码:
_declspec(dllimport)void sethook(HWND handle);
sethook(m_hWnd);
如果想在切换各窗口时,总让运行的程序处于最前面,而看不见其他的窗口,可通过设置当前窗口为顶级窗口,屏幕大小为全屏。
int cxscreen,cyscreen;
cxscreen=GetSystemMetrics(SM_CXSCREEN);
cyscreen=GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(&wndTopMost,0,0,cxscreen,cyscreen,SWP_SHOWWINDOW);