HOOK的利用

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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章