?? lc_bcb_104.txt
字號:
WIN95中日志鉤子
WIN95中日志鉤子(JournalRecord Hook)的使用
東莞生益敷銅板股份有限公司
肖粵斌
---- 鉤子是WINDOWS中消息處理機制的一個要點,通過安裝各種鉤子,應用程序能夠設置相應的子例程來監視系統里的消息傳遞以及在這些消息到達目標窗口程序之前處理它們。鉤子的種類很多,每種鉤子可以截獲并處理相應的消息,如鍵盤鉤子可以截獲鍵盤消息,鼠標鉤子可以截獲鼠標消息,外殼鉤子可以截獲啟動和關閉應用程序的消息,日志鉤子可以監視和記錄輸入事件。鉤子分為線程專用鉤子和全局鉤子,線程專用鉤子只監視指定的線程,要監視系統中的所有線程,必須用到全局鉤子。對于全局鉤子,鉤子函數必須包含在獨立的動態鏈接庫(DLL)中,這樣才能被各種相關聯的應用程序調用。在WINDOWS中,日志鉤子是個很特別的鉤子,它只有全局鉤子一種,是鍵盤鼠標等輸入設備的消息在系統消息隊列被取出時發生的,而且系統中只能存在一個這樣的日志鉤子,更重要是,它不必用在動態鏈接庫中,這樣可以省卻了為安裝一個全局鉤子而建立一個動態鏈接庫的麻煩。利用日志鉤子,我們可以監視各種輸入事件,下面的示例可以用來記錄鍵盤的輸入,當有按鍵發生時,自動記錄按鍵動作的日期和時間以及當前激活的窗口名稱。本示例在中文WIN98,Borland
C++ Builder4中編譯通過。
---- 1.新建一個工程,在窗體Form1中放置兩個按鈕Button1和Button2,
CAPTION分別 為“安裝日志鉤子”和“卸載日志鉤子”。
---- 2. 定義如下全局變量:
HHOOK g_hLogHook=NULL; //鉤子變量
HWND g_hLastFocus=NULL;
//記錄上一次得到焦點的窗口句柄
const int KeyPressMask=0x80000000; //鍵盤掩碼常量
char g_PrvChar; //保存上一次按鍵值
3.在Button1的OnClick事件中輸入:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (g_hLogHook==NULL)
g_hLogHook = SetWindowsHookEx
(WH_JOURNALRECORD,
(HOOKPROC)JournalLogProc,
HInstance,0); //安裝日志鉤子
}
4.在Button2的OnClick事件中輸入:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (g_hLogHook!=NULL)
{UnhookWindowsHookEx(g_hLogHook);
g_hLogHook=NULL;
} //卸載日志鉤子
}
5.輸入鉤子回調函數:
HOOKPROC JournalLogProc(int iCode,
WPARAM wParam, LPARAM lParam)
{
if (iCode<0) return (HOOKPROC)CallNextHookEx (g_hLogHook,iCode,wParam,lParam); if (iCode="=HC_ACTION)" {EVENTMSG *pEvt="(EVENTMSG" *)lParam; int i; HWND hFocus; //保存當前活動窗口句柄 char szTitle[256]; //當前窗口名稱 char szTime[128]; //保存當前的日期和時間 FILE *stream="fopen(“c:\\logfile.txt”,"a+t");" if (pEvt->message==WM_KEYDOWN)
{int vKey=LOBYTE(pEvt- >paramL); // 取得虛擬鍵值
char ch;
char str[10];
hFocus=GetActiveWindow();
//取得當前活動窗口句柄
if(g_hLastFocus!=hFocus)
//當前活動窗口是否改變
{GetWindowText(hFocus,szTitle,256);
g_hLastFocus=hFocus;
strcpy(szTime,DateTimeToStr(Now())
.c_str()); //得到當前的日期時間
fprintf(stream,"%c%s%c%c%s",
10,szTime,32,32,szTitle); //寫入文件
fprintf(stream,"%c%c",32,32);
}
int iShift=GetKeyState(0x10);
//測試SHIFT,CAPTION,NUMLOCK等鍵是否按下
int iCapital=GetKeyState(0x14);
int iNumLock=GetKeyState(0x90);
bool bShift=(iShift & KeyPressMask)==KeyPressMask;
bool bCapital=(iCapital & 1)==1;
bool bNumLock=(iNumLock & 1)==1;
if (vKey >=48 && vKey<=57) // 數字0-9 if (!bShift) fprintf(stream,"%c",vKey); if (vKey>=65 && vKey<=90) // A-Z a-z {if (!bCapital) if (bShift) ch="vKey;" else ch="vKey+32;" else if (bShift) ch="vKey+32;" else ch="vKey;" fprintf(stream,"%c",ch); } if (vKey>=96 && vKey<=105) // 小鍵盤0-9 if (bNumLock) fprintf(stream,"%c",vKey-96+48); if (vKey>=186 && vKey<=222) // 其他鍵 {switch (vKey) {case 186:if (!bShift) ch=";" ; else ch=":" ;break; case 187:if (!bShift) ch="=" ; else ch="+" ;break; case 188:if (!bShift) ch="," ; else ch="<" ;break; case 189:if (!bShift) ch="-" ; else ch="_" ;break; case 190:if (!bShift) ch="." ; else ch=" >" ;break; case 191:if (!bShift) ch="/" ; else ch="?" ;break; case 192:if (!bShift) ch="`" ; else ch="~" ;break; case 219:if (!bShift) ch="[" ; else ch="{" ;break; case 220:if (!bShift) ch="\\" ; else ch="|" ;break; case 221:if (!bShift) ch="]" ; else ch="}" ;break; case 222:if (!bShift) ch="\" '; else ch="\"" ;break; default:ch="n" ;break; } if (ch!="n" ) fprintf(stream,"%c",ch); } // if (wParam>=112 && wParam<=123) // 功能鍵 [F1]-[F12] if (vKey>=8 && vKey<=46) //方向鍵 {switch (vKey) {case 8:strcpy(str,"[BK]");break; case 9:strcpy(str,"[TAB]");break; case 13:strcpy(str,"[EN]");break; case 32:strcpy(str,"[SP]");break; case 33:strcpy(str,"[PU]");break; case 34:strcpy(str,"[PD]");break; case 35:strcpy(str,"[END]");break; case 36:strcpy(str,"[HOME]");break; case 37:strcpy(str,"[LF]");break; case 38:strcpy(str,"[UF]");break; case 39:strcpy(str,"[RF]");break; case 40:strcpy(str,"[DF]");break; case 45:strcpy(str,"[INS]");break; case 46:strcpy(str,"[DEL]");break; default:ch="n" ;break; } if (ch!="n" ) {if (g_PrvChar!="vKey)" {fprintf(stream,"%s",str); g_PrvChar="vKey;" } } } } if (pEvt->message==WM_LBUTTONDOWN || pEvt- >message
==WM_RBUTTONDOWN)
{hFocus=GetActiveWindow();
if (g_hLastFocus!=hFocus)
{g_hLastFocus=hFocus;
GetWindowText(hFocus,szTitle,256);
strcpy(szTime,DateTimeToStr(Now()).c_str());
//得到當前的日期時間
fprintf(stream,"%c%s%c%c%s",
10,szTime,32,32,szTitle); //寫入文件
fprintf(stream,"%c%c",32,32);
}
}
fclose(stream);
return (HOOKPROC)CallNextHookEx
(g_hLogHook,iCode,wParam,lParam);
}
----
將工程編譯執行后,每當激活一個窗口時,就會把當前窗口名稱寫入文件c:\logfile.txt中,當有按鍵時,按鍵的名稱也會寫入此文件中,這里的并沒有處理全部的按鍵,讀者可根據需要添加相應的語句。要捕捉鍵盤的按鍵動作,用鍵盤鉤子(Keyboard
Hook)也同樣可以實現,但是用日志鉤子卻比鍵盤鉤子要方便許多。首先,如果要捕捉其他應用程序的按鍵,即做成全局鉤子,鍵盤鉤子一定要單獨放在動態鏈接庫中,而日志鉤子卻不必;其次,在鍵盤鉤子函數得到的鍵盤按鍵之前,系統已經處理過這些輸入了,如果系統把這些按鍵屏蔽掉,鍵盤鉤子就無法檢測到它們,例如,當輸入屏幕保護程序密碼時,鍵盤鉤子無法檢測到用戶輸入了那些字符,而日志鉤子卻可以檢測到。
---- 無論是哪種鉤子,
都會增加系統處理消息的時間,從而降低系統的性能,我們只有在必要的時候才安裝這些鉤子,而且盡可能在不需要時移走它們。
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频一区二区三区|
91麻豆国产福利精品|
成人在线一区二区三区|
欧美性一区二区|
久久久久久麻豆|
亚洲国产欧美日韩另类综合
|
亚洲精品第一国产综合野|
久久国产精品72免费观看|
91原创在线视频|
久久精品男人的天堂|
日韩国产欧美在线观看|
色综合久久久久综合体|
国产三级久久久|
奇米精品一区二区三区在线观看一|
www.成人在线|
国产欧美日韩另类视频免费观看|
日本最新不卡在线|
欧美日韩精品福利|
亚洲天堂精品视频|
成人看片黄a免费看在线|
日韩欧美色电影|
日本vs亚洲vs韩国一区三区|
色婷婷av一区二区三区大白胸|
欧美激情一区三区|
国产精品伊人色|
久久一留热品黄|
国产精品一区二区久激情瑜伽|
日韩视频免费直播|
日韩成人av影视|
3d动漫精品啪啪1区2区免费|
香蕉成人伊视频在线观看|
色偷偷成人一区二区三区91|
亚洲欧美日韩国产成人精品影院
|
亚洲电影在线免费观看|
日本精品视频一区二区三区|
亚洲码国产岛国毛片在线|
99re66热这里只有精品3直播
|
日韩欧美美女一区二区三区|
日日夜夜精品免费视频|
欧美一卡在线观看|
美国十次综合导航|
26uuu久久天堂性欧美|
激情久久五月天|
国产亚洲精品超碰|
不卡高清视频专区|
亚洲女爱视频在线|
欧美综合亚洲图片综合区|
五月天国产精品|
精品日产卡一卡二卡麻豆|
国产高清成人在线|
中文字幕在线不卡国产视频|
在线精品亚洲一区二区不卡|
日韩综合一区二区|
精品国产乱码91久久久久久网站|
国产精品一区二区三区四区|
中文字幕在线不卡一区|
欧美日免费三级在线|
日本在线观看不卡视频|
久久综合99re88久久爱|
波多野结衣在线一区|
亚洲精品日产精品乱码不卡|
日韩一区二区影院|
国产成人av电影在线播放|
亚洲色图欧洲色图|
欧美一级淫片007|
国产精品一区二区你懂的|
一区二区三区在线观看欧美|
日韩视频一区二区三区|
99久久99久久综合|
麻豆一区二区三区|
日韩毛片在线免费观看|
欧美一区2区视频在线观看|
99视频有精品|
另类小说图片综合网|
综合亚洲深深色噜噜狠狠网站|
7777精品伊人久久久大香线蕉经典版下载
|
久久久夜色精品亚洲|
99久久综合国产精品|
麻豆精品一区二区三区|
依依成人综合视频|
久久久99免费|
91精品国产高清一区二区三区蜜臀|
丁香激情综合五月|
蜜臀久久99精品久久久久久9|
成人免费在线播放视频|
欧美videos大乳护士334|
一本色道久久加勒比精品|
国产一区二区在线视频|
亚洲sss视频在线视频|
国产欧美一二三区|
日韩手机在线导航|
欧美日韩精品一区二区三区|
99久久精品久久久久久清纯|
国内国产精品久久|
手机精品视频在线观看|
亚洲女同ⅹxx女同tv|
国产欧美一区二区在线观看|
欧美一区二区三区四区视频|
一本到不卡免费一区二区|
国产成人精品亚洲午夜麻豆|
美脚の诱脚舐め脚责91
|
欧美日韩精品高清|
91九色02白丝porn|
www.av精品|
成人免费不卡视频|
成人午夜精品在线|
国产a精品视频|
国产中文一区二区三区|
久久精品国产一区二区三|
三级欧美韩日大片在线看|
亚洲国产视频在线|
亚洲一区二区三区视频在线|
亚洲精品中文在线影院|
最新高清无码专区|
亚洲人成人一区二区在线观看|
国产精品视频免费看|
国产精品污www在线观看|
国产日韩精品一区二区浪潮av|
欧美mv和日韩mv的网站|
精品久久人人做人人爽|
精品福利二区三区|
久久欧美中文字幕|
欧美—级在线免费片|
欧美极品美女视频|
亚洲天天做日日做天天谢日日欢
|
国产精品久久久久久久第一福利|
欧美国产视频在线|
...av二区三区久久精品|
综合久久给合久久狠狠狠97色|
亚洲色图20p|
亚洲午夜精品在线|
奇米色一区二区三区四区|
老司机精品视频一区二区三区|
紧缚捆绑精品一区二区|
国产成人免费高清|
日本高清免费不卡视频|
777午夜精品视频在线播放|
欧美va亚洲va|
国产精品免费av|
亚洲高清久久久|
久久国产尿小便嘘嘘尿|
成人免费视频免费观看|
欧美亚洲动漫精品|
精品免费视频.|
亚洲免费观看高清完整版在线观看熊|
亚洲一区二区综合|
极品尤物av久久免费看|
97久久久精品综合88久久|
91精品麻豆日日躁夜夜躁|
久久久久国产精品麻豆ai换脸|
最新高清无码专区|
蜜臀99久久精品久久久久久软件|
国产成人一区在线|
欧美精品一二三区|
国产精品午夜在线观看|
日本欧美一区二区三区|
av爱爱亚洲一区|
日韩一区二区电影|
亚洲精品视频在线|
国产一区二区成人久久免费影院|
99re这里只有精品视频首页|
欧美va亚洲va在线观看蝴蝶网|
一区二区三区欧美|
国产精品99久久久久久久女警|
欧美亚洲综合网|
亚洲国产成人在线|
蜜臀精品一区二区三区在线观看|
av日韩在线网站|
精品剧情v国产在线观看在线|
亚洲一区二区精品3399|
国产suv精品一区二区三区|
91麻豆精品国产91久久久久久久久|
国产精品剧情在线亚洲|
老司机精品视频在线|
欧美猛男gaygay网站|
中文字幕亚洲视频|
国产成人精品一区二区三区四区
|
久久se精品一区二区|
欧美视频一区二区三区四区
|
国产丝袜欧美中文另类|
青青青爽久久午夜综合久久午夜|
91视频免费播放|
欧美国产一区视频在线观看|
国产揄拍国内精品对白|
精品国偷自产国产一区|
日本怡春院一区二区|
欧美精品一二三四|
午夜视频一区二区三区|
色婷婷亚洲精品|
亚洲特级片在线|
av电影天堂一区二区在线|
国产丝袜美腿一区二区三区|
狠狠色狠狠色合久久伊人|
欧美成人欧美edvon|
麻豆精品精品国产自在97香蕉|
91精品国产综合久久福利软件|
丝袜诱惑制服诱惑色一区在线观看|
色综合久久综合网97色综合|
亚洲人成精品久久久久|
在线观看日韩av先锋影音电影院|