青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Life is Good.

Enhance Tech and English
隨筆 - 65, 文章 - 20, 評論 - 21, 引用 - 0
數據加載中……

VC++引用鍵盤鉤子

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

  由于需要記錄當前系統下所有應用程序的鍵盤錄入記錄,因此必須采 取某種特殊的技術來實現本進程(監視程序)對外部進程鍵盤操作信息的獲取。這種技術便是本文將要論述的核心--系統全局鉤子。本文下面將對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中加入對其的引用:

如果用VC2008,此處不用像VC6.0這樣設置, 只要把路徑加上, 并且引用lib就可以.

#include "LaunchDLL.h"

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

如果用VC2008,不用重載此函數, 可以直接加到InitInstance() 末尾處.

InstallLaunchEv();

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

       最后需要調用UnhookWindowsHookEx來卸載鉤子, 在LaunchDLL里完成,
           HOOKDLLEXPORT void WINAPI StopHook()
           {
                UnhookWindowsHookEx(g_Hook);
                g_Hook = NULL;
           }

  小結

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

http://www.programfan.com/blog/article.asp?id=20338

posted on 2011-03-14 21:48 Mike Song 閱讀(746) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            巨胸喷奶水www久久久免费动漫| 欧美日韩国产高清视频| 久久久国产精彩视频美女艺术照福利| 一本色道久久99精品综合 | 国产精品一区二区三区成人| 欧美视频网站| 国产精品久久久久久久app| 欧美日韩视频在线一区二区观看视频| 欧美日韩国语| 国产精品爽爽爽| 国产一区二区三区不卡在线观看| 国产日韩欧美制服另类| 国产亚洲精品bt天堂精选| 激情成人在线视频| 亚洲国产成人porn| 一本到12不卡视频在线dvd| 亚洲一区二区三区免费视频| 篠田优中文在线播放第一区| 久久久久国产成人精品亚洲午夜| 蜜桃av综合| 亚洲美洲欧洲综合国产一区| 午夜精品一区二区三区电影天堂| 久久久精品国产99久久精品芒果| 欧美精彩视频一区二区三区| 国产精品五区| 亚洲欧洲精品一区二区三区| 亚洲午夜激情免费视频| 久久综合中文色婷婷| 99精品欧美一区二区三区综合在线 | 久久九九国产精品| 亚洲一区www| 亚洲婷婷在线| 麻豆久久精品| 亚洲午夜极品| 欧美激情精品久久久久久蜜臀| 国产精品你懂的在线| 亚洲黄页视频免费观看| 欧美亚洲综合久久| 亚洲国产精品一区二区第四页av| 亚洲免费成人av| 欧美在线观看视频| 欧美午夜视频| 99精品视频免费观看| 六月天综合网| 欧美一区观看| 国产日韩欧美三级| 亚洲免费在线观看| 日韩视频精品在线观看| 久热精品视频在线免费观看| 国产日本欧洲亚洲| 亚洲欧美中文日韩v在线观看| 91久久午夜| 鲁大师影院一区二区三区| 国内精品嫩模av私拍在线观看| 午夜精品福利电影| 宅男精品视频| 国产精品扒开腿做爽爽爽视频| 亚洲麻豆av| 亚洲日韩欧美视频| 欧美成人免费在线观看| 亚洲高清久久网| 欧美sm重口味系列视频在线观看| 久久精品视频一| 激情偷拍久久| 男同欧美伦乱| 老司机精品久久| 在线观看亚洲视频| 欧美成人激情在线| 亚洲天天影视| 在线欧美不卡| 欧美xart系列高清| 乱码第一页成人| 99精品国产在热久久| 欧美高清视频| 欧美不卡视频一区发布| 亚洲日本欧美在线| 亚洲精品看片| 国产精品久久久久久五月尺| 午夜精品成人在线| 欧美亚洲一区三区| 亚洲第一级黄色片| 亚洲全黄一级网站| 欧美日本一区二区三区 | 激情综合电影网| 米奇777超碰欧美日韩亚洲| 免费看成人av| 亚洲一区二区三区免费视频| 久久精品亚洲乱码伦伦中文| 羞羞视频在线观看欧美| 国产中文一区| 亚洲高清一区二| 欧美深夜影院| 久久男人av资源网站| 久久综合九色欧美综合狠狠| 一本色道精品久久一区二区三区| 亚洲影院在线| 最新日韩av| 亚洲欧美日韩精品一区二区| 在线观看三级视频欧美| 亚洲一区二区三区777| 激情综合自拍| 一本色道精品久久一区二区三区| 国产欧美亚洲视频| 亚洲黄色精品| 国产亚洲高清视频| 亚洲精品免费在线播放| 国产一区二区精品久久91| 亚洲国产日韩在线一区模特| 一区二区免费在线视频| 午夜精品一区二区三区在线 | 久热精品视频在线免费观看 | 国产真实久久| 在线亚洲激情| 亚洲韩日在线| 午夜精品亚洲一区二区三区嫩草| 亚洲三级影片| 欧美专区在线观看一区| 亚洲网在线观看| 久久久欧美精品sm网站| 欧美亚洲三级| 欧美日本一区二区三区| 欧美电影美腿模特1979在线看| 国产欧美1区2区3区| 99国产精品99久久久久久粉嫩| 在线看不卡av| 久久精品国产清自在天天线| 亚洲伊人伊色伊影伊综合网| 欧美~级网站不卡| 欧美国产一区在线| 国产在线视频不卡二| 亚洲欧美在线一区| 亚洲午夜91| 欧美性视频网站| 亚洲免费av网站| 这里只有精品视频在线| 欧美日韩视频第一区| 亚洲韩日在线| 91久久精品一区二区别| 久久精视频免费在线久久完整在线看| 午夜精品福利一区二区蜜股av| 国产精品av免费在线观看| 亚洲免费成人av| 亚洲资源av| 国产麻豆午夜三级精品| 先锋影音国产一区| 日韩亚洲欧美一区二区三区| 欧美国产成人在线| 91久久精品日日躁夜夜躁欧美 | 国产性做久久久久久| 亚洲欧美综合另类中字| 午夜亚洲视频| 国产欧美日韩在线视频| 亚洲一区二区三区免费观看| 午夜精品一区二区三区在线播放| 国产精品午夜久久| 欧美亚洲综合另类| 久久久久久电影| 伊人精品久久久久7777| 欧美99在线视频观看| 亚洲九九精品| 久久精品一区蜜桃臀影院| 激情另类综合| 欧美国产日产韩国视频| 日韩亚洲欧美成人一区| 欧美专区在线播放| 精品电影在线观看| 免费久久99精品国产自| 一本色道久久综合一区 | 久久www成人_看片免费不卡| 国产自产精品| 免费欧美网站| 亚洲午夜精品久久久久久浪潮| 欧美综合第一页| 亚洲经典自拍| 国产精品美女久久久久av超清| 欧美资源在线| 亚洲伦理中文字幕| 久久久久se| 夜夜夜久久久| 黄色av成人| 欧美日韩亚洲一区三区| 久久精品30| 一区二区三区不卡视频在线观看| 性欧美大战久久久久久久久| 黄网站色欧美视频| 国产精品成人播放| 麻豆av一区二区三区| 亚洲自拍啪啪| 亚洲大胆女人| 欧美在线一级va免费观看| 国产欧美一区二区三区国产幕精品| 久久只精品国产| 欧美一激情一区二区三区| 亚洲精品女人| 久久天堂国产精品| 亚洲视频精选| 亚洲免费观看高清完整版在线观看熊 | 亚洲乱码国产乱码精品精| 国产精品视频xxx| 欧美理论在线|