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

君子性非異也,善假于物也。

如有恒,何須三更起,半夜眠;最怕莫,三天打魚兩天曬網(wǎng),竹籃打水一場空!
posts - 31, comments - 23, trackbacks - 0, articles - 30
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
一、在WINDOWS鍵盤事件上掛接監(jiān)控函數(shù)的方法

WINDOW下可進(jìn)行掛接的過濾函數(shù)包括11種:

WH_CALLWNDPROC 窗口函數(shù)的過濾函數(shù)

WH_CBT 計(jì)算機(jī)培訓(xùn)過濾函數(shù)

WH_DEBUG 調(diào)試過濾函數(shù)

WH_GETMESSAGE 獲取消息過濾函數(shù)

WH_HARDWARE 硬件消息過濾函數(shù)

WH_JOURNALPLAYBACK 消息重放過濾函數(shù)

WH_JOURNALRECORD 消息記錄過濾函數(shù)

WH_MOUSE 鼠標(biāo)過濾函數(shù)

WH_MSGFILTER 消息過濾函數(shù)

WH_SYSMSGFILTER 系統(tǒng)消息過濾函數(shù)

WH_KEYBOARD 鍵盤過濾函數(shù)

其中鍵盤過濾函數(shù)是最常用最有用的過濾函數(shù)類型,不管是哪一種類型的過濾函數(shù),其掛接的基本方法都是相同的。
WINDOW調(diào)用掛接的反調(diào)函數(shù)時總是先調(diào)用掛接鏈?zhǔn)椎哪莻€函數(shù),因此必須將鍵盤掛鉤函數(shù)利用函數(shù)SetWindowsHookEx()將其掛接在函數(shù)鏈?zhǔn)住V劣谙⑹欠駛鬟f給函數(shù)鏈的下一個函數(shù)是由每個具體函數(shù)功能確定的,如果消息需要傳統(tǒng)給下一個函數(shù),可調(diào)用API函數(shù)的CallNextHookEx()來實(shí)現(xiàn),如果不傳遞直接返回即可。掛接函數(shù)可以是用來監(jiān)控所有線程消息的全局性函數(shù),也可以是單獨(dú)監(jiān)控某一線程的局部性函數(shù)。如果掛接函數(shù)是局部函數(shù),可以將它放到一個.DLL動態(tài)鏈接庫中,也可以放在一個局部模塊中;如果掛接函數(shù)是全局的,那么必須將其放在一個.DLL動態(tài)鏈接庫中。掛接函數(shù)必須嚴(yán)格按照下述格式進(jìn)行聲明,以鍵盤掛鉤函數(shù)為例:

int FAR PASCAL KeyboardProc(int nCode,WORD wParam,DWORD lParam)

其中KeyboardProc為定義掛接函數(shù)名,該函數(shù)必須在模塊定義文件中利用EXPORTS命令進(jìn)行說明;nCode決定掛接函數(shù)是否對當(dāng)前消息進(jìn)行處理;wParam和lParam為具體的消息內(nèi)容。



二、鍵盤事件掛接函數(shù)的安裝與下載

在程序中可以利用函數(shù)SetWindowsHookEx()來掛接過濾函數(shù),在掛接函數(shù)時必須指出該掛接函數(shù)的類型、函數(shù)的入口地址以及函數(shù)是全局性的還是局部性的,掛接函數(shù)的具體調(diào)用格式如下:

SetWindowsHookEx(iType,iProc,hInst,iCode)

其中iType為掛接函數(shù)類型,鍵盤類型為WH_KEYBOARD,iProc為掛接函數(shù)地址,hInst為掛接函數(shù)鏈接庫實(shí)例句柄,iCode為監(jiān)控代碼-0表示全局性函數(shù)。如果掛接函數(shù)需要將消息傳遞給下一個過濾函數(shù),則在該掛接函數(shù)返回前還需要調(diào)用一次CallNextHookEx()函數(shù),當(dāng)需要下載掛接函數(shù)時,只要調(diào)用一次UnhookWindowsHookEx(iProc)函數(shù)即可實(shí)現(xiàn)。如果函數(shù)是全局性的,那么它必須放在一個.DLL動態(tài)鏈接庫中,這時該函數(shù)調(diào)用方法可以和其它普通.DLL函數(shù)一樣有三種:

1.在DEF定義文件中直接用函數(shù)名或序號說明:

EXPORTS

WEP @1 RESIDENTNAME

InitHooksDll @2

InstallFilter @3

KeyboardProc @4

用序號說明格式為:鏈接庫名.函數(shù)名(如本例中說明方法為KEYDLL.KeyboardProc)。

2.在應(yīng)用程序中利用函數(shù)直接調(diào)用:

首先在應(yīng)用程序中利用LoadLibrary(LPSTR "鏈接庫名")將動態(tài)鏈接庫裝入,并取得裝載庫模塊句柄hInst,然后直接利用GetProcAddress(HINSTANCE hInst,LPSTR "函數(shù)過程名")獲取函數(shù)地址,然后直接調(diào)用該地址即可,程序結(jié)束前利用函數(shù)FreeLibrary( )釋放裝入的動態(tài)鏈接庫即可。

3.利用輸入庫.LIB方法

利用IMPLIB.EXE程序在建立動態(tài)鏈接庫的同時建立相應(yīng)的輸入庫.LIB,然后直接在項(xiàng)目文件中增加該輸入庫。



三、WINDOWS掛鉤監(jiān)控函數(shù)的實(shí)現(xiàn)步驟

WINDOWS掛鉤函數(shù)只有放在動態(tài)鏈接庫DLL中才能實(shí)現(xiàn)所有事件的監(jiān)控功能。在.DLL中形成掛鉤監(jiān)控函數(shù)基本方法及其基本結(jié)構(gòu)如下:

1、首先聲明DLL中的變量和過程;

2、然后編制DLL主模塊LibMain(),建立模塊實(shí)例;

3、建立系統(tǒng)退出DLL機(jī)制WEP()函數(shù);

4、完成DLL初始化函數(shù)InitHooksDll(),傳遞主窗口程序句柄;

5、編制掛鉤安裝和下載函數(shù)InstallFilter();

6、編制掛鉤函數(shù)KeyboardProc(),在其中設(shè)置監(jiān)控功能,并確定繼續(xù)調(diào)下一個鉤

子函數(shù)還是直接返回WINDOWS應(yīng)用程序。

7、在WINDOWS主程序中需要初始化DLL并安裝相應(yīng)掛鉤函數(shù),由掛接的鉤子函數(shù)負(fù)

責(zé)與主程序通信;

8、在不需要監(jiān)控時由下載功能卸掉掛接函數(shù)。

四、WINDOWS下鍵盤掛鉤監(jiān)控函數(shù)的應(yīng)用技術(shù)



目前標(biāo)準(zhǔn)的104 鍵盤上都有兩個特殊的按鍵,其上分別用WINDOW程序徽標(biāo)和鼠標(biāo)下拉列表標(biāo)識,本文暫且分別稱為Micro左鍵和Micro右鍵,前者用來模擬鼠標(biāo)左鍵激活開始菜單,后者用來模擬鼠標(biāo)右鍵激活屬性菜單。這兩個特殊按鍵只有在按下后立即抬起即完成 CLICK過程才能實(shí)現(xiàn)其功能,并且沒有和其它按鍵進(jìn)行組合使用。由于WINDOWS 系統(tǒng)中將按鍵劃分得更加詳細(xì),使應(yīng)用程序中很難靈活定義自己的專用快捷鍵,比如在開發(fā).IME等應(yīng)用程序時很難找到不與WORD8.0等其它應(yīng)用程序沖突的功能按鍵。如果將標(biāo)準(zhǔn)104鍵盤中的這兩個特殊按鍵作為模擬CTRL和ALT 等專用按鍵,使其和其它按鍵組合,就可以在自己的應(yīng)用程序中自由地設(shè)置專用功能鍵,為應(yīng)用程序?qū)崿F(xiàn)各種功能快捷鍵提供靈活性。正常情況下WINDOWS 鍵盤事件驅(qū)動程序并不將這兩個按鍵的消息進(jìn)行正常解釋,這就必須利用鍵盤事件的掛鉤監(jiān)控函數(shù)來實(shí)現(xiàn)其特定的功能。其方法如下:

1、首先編制如下一個簡單動態(tài)鏈接庫程序,并編譯成DLL文件。

#include "windows.h"

int FAR PASCAL LibMain(HANDLE hModule,UINT wDataSeg,UINT cbHeapSize,LPSTR lpszCmdLine);

int WINAPI WEP(int bSystemExit);

int WINAPI InitHooksDll(HWND hwndMainWindow);

int WINAPI InstallFilter(BOOL nCode);

LRESULT CALLBACK KeyHook(int nCode,WORD wParam,DWORD lParam);

static HANDLE hInstance; // 全局句柄

static HWND hWndMain; // 主窗口句柄

static int InitCalled=0; // 初始化標(biāo)志

static HHOOK hKeyHook;

FARPROC lpfnKeyHook=(FARPROC)KeyHook;

BOOL HookStates=FALSE;

int FAR PASCAL LibMain(

HANDLE hModule,

UINT wDataSeg,

UINT cbHeapSize,

LPSTR lpszCmdLine)

{

if (cbHeapSize!=0) UnlockData(0);

hInstance = hModule;

return 1;

}

int WINAPI WEP (int bSystemExit)

{ return 1;}

int WINAPI InitHooksDll(HWND hwndMainWindow)

{ hWndMain = hwndMainWindow;

InitCalled = 1;

return (0);

}

int WINAPI InstallFilter(BOOL nCode)

{ if (InitCalled==0) return (-1);

if (nCode==TRUE) {

hKeyHook=SetWindowsHookEx(WH_KEYBOARD,

(HOOKPROC)lpfnKeyHook,hInstance,0);

HookStates=TRUE;

} else {

UnhookWindowsHookEx(hKeyHook);

HookStates=FALSE;

}

return(0);

}

LRESULT CALLBACK KeyHook(int nCode,WORD wParam,DWORD lParam)

{

static BOOL msflag=FALSE;

if(nCode>=0) {

if(HookStates==TRUE){

if((wParam==0xff)|| //WIN3.X下按鍵值

(wParam==0x5b)||(wParam==0x5c)){//WIN95下按鍵值

if((i==0x15b)||(i==0x15c)){ //按鍵按下處理

msflag=TRUE;

PostMessage(hWndMain,0x7fff,0x1,0x3L);

} else if((i==0xc15b)||(i==0xc15c)){//按鍵抬起處理

msflag=FALSE;

PostMessage(hWndMain,0x7fff,0x2,0x3L);

}

}

}

}

return((int)CallNextHookEx(hKeyHook,nCode,wParam,lParam));

}

該程序的主要功能是監(jiān)控鍵盤按鍵消息,將兩個特殊按鍵Micro按下和抬起消息轉(zhuǎn)換成自定義類型的消息,并將自定義消息發(fā)送給應(yīng)用程序主窗口函數(shù)。

2、在應(yīng)用程序主函數(shù)中建立窗口后,調(diào)用InitHooksDll()函數(shù)來初始化動態(tài)鏈接庫,并將應(yīng)用程序主窗口句柄傳遞給鏈接庫,然后調(diào)用InstallFilter()函數(shù)掛接鍵盤事件監(jiān)控回調(diào)函數(shù)。

InitHooksDll(hIMEWnd); //初始化DLL

InstallFilter(TRUE); //安裝鍵盤回調(diào)函數(shù)

3、在應(yīng)用程序主窗口函數(shù)處理自定義消息時,保存Micro按鍵的狀態(tài),供組合按鍵處理時判斷使用。

switch (iMessage) {

case 0x7fff: //自定義消息類型

if(lParam==0x3L){//設(shè)置Micro鍵的狀態(tài)

if(wParam==0x1) MicroFlag=TRUE;

else if(wParam==0x2) MicroFlag=FALSE;

}

break;

4、在進(jìn)行按鍵組合處理時,首先判斷Micro鍵是否按下,然后再進(jìn)行其它按鍵的判斷處理。

case WM_KEYDOWN: // 按鍵按下處理

if(MicroFlag==TRUE){//Micro鍵按下

if((BYTE)HIBYTE(wParam)==0x5b){

//Micro+"["組合鍵

......//按鍵功能處理

} else if((BYTE)HIBYTE(wParam)==0x5d){

//Micro+"]"組合鍵

......//按鍵功能處理

}

}

break;

5、當(dāng)應(yīng)用程序退出時應(yīng)注意下載鍵盤監(jiān)控函數(shù),即調(diào)用InstallFilter(FALSE)函數(shù)一次。

6、利用本文提供的方法設(shè)置自己的應(yīng)用程序功能按鍵,在保證程序功能按鍵不會與其它系統(tǒng)發(fā)生沖突的同時,有效地利用了系統(tǒng)中現(xiàn)有資源,而且在實(shí)現(xiàn)應(yīng)用程序功能的同時靈活應(yīng)用了系統(tǒng)中提供的各種功能調(diào)用。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久免费视频一区| 国产精品成人播放| 欧美国产亚洲精品久久久8v| 欧美体内谢she精2性欧美| 国产原创一区二区| 亚洲网站视频| 亚洲区免费影片| 久久嫩草精品久久久精品一| 国产精品日本一区二区| 亚洲调教视频在线观看| 一本一道久久综合狠狠老精东影业| 免费亚洲一区二区| 亚洲国产精品久久久久婷婷老年| 久久裸体视频| 免费观看成人www动漫视频| 极品裸体白嫩激情啪啪国产精品 | 久久精品天堂| 欧美一区二区三区播放老司机 | 久久综合激情| 欧美在线一二三| 亚洲视频在线观看三级| 国产精品第一页第二页第三页| 亚洲精品在线观| 欧美激情一二三区| 麻豆av福利av久久av| 亚洲第一在线综合网站| 久久久精品久久久久| 亚洲综合视频1区| 国产精品第一区| 国产综合亚洲精品一区二| 亚洲精品五月天| 亚洲国产欧美一区二区三区久久 | 亚洲黄页视频免费观看| 久久综合免费视频影院| 欧美一区二区三区四区在线观看地址 | 欧美一区二区三区视频| 国产一区二区三区久久久久久久久| 亚洲欧美99| 在线亚洲免费| 国产精品三区www17con| 欧美亚洲综合久久| 亚洲欧美怡红院| 国产一区二区三区视频在线观看| 久久精品中文字幕免费mv| 亚洲欧洲一区二区三区在线观看| 蜜桃av综合| 亚洲激精日韩激精欧美精品| 亚洲电影av在线| 欧美精品二区| 亚洲一级二级在线| 午夜视频久久久| 伊人久久亚洲热| 91久久午夜| 国产精品嫩草99av在线| 久久国产福利国产秒拍| 免费精品99久久国产综合精品| 亚洲人成小说网站色在线| 日韩一级黄色片| 国产精品自在在线| 免费成人激情视频| 欧美日韩精品系列| 久久国产欧美精品| 久久欧美肥婆一二区| 99国产精品一区| 亚洲视频在线观看网站| 欧美巨乳波霸| 亚洲免费网址| 欧美一区二区三区在线| 日韩一本二本av| 欧美一二三区在线观看| 亚洲日韩欧美视频| 亚洲主播在线播放| 亚洲国产导航| 亚洲制服少妇| 亚洲精品乱码久久久久久蜜桃91 | 久久精品亚洲一区二区| 久久综合影音| 亚洲一级高清| 久久亚洲图片| 亚洲欧美日韩精品| 欧美激情一区二区三区不卡| 性做久久久久久免费观看欧美| 久久亚裔精品欧美| 亚洲免费中文| 欧美一级理论片| 精品96久久久久久中文字幕无| 欧美大成色www永久网站婷| 欧美国产日韩视频| 久久久久一区二区| 国产精品每日更新在线播放网址| 欧美成在线观看| 国产在线欧美| 亚洲欧美日韩国产另类专区| 亚洲精品日日夜夜| 久久九九有精品国产23| 亚洲精品视频二区| 久久久成人网| 欧美在线首页| 国产精品国色综合久久| 亚洲精品欧洲| 亚洲成人自拍视频| 欧美一区不卡| 亚洲欧美精品伊人久久| 欧美乱在线观看| 欧美激情自拍| 韩国精品在线观看| 日韩一区二区免费看| 亚洲精品一区二区在线观看| 久久精品国产一区二区三| 亚洲日本中文| 久久精品国产清自在天天线| 午夜精品在线观看| 欧美日韩影院| 一本久道久久综合中文字幕| 一区二区高清在线| 欧美绝品在线观看成人午夜影视 | 久久午夜视频| 久久国产一区二区三区| 国产精品日韩在线观看| 亚洲女同同性videoxma| 欧美一级理论性理论a| 国产精品毛片va一区二区三区 | 国产精品久99| 亚洲影音一区| av不卡在线观看| 久久先锋影音| 亚洲第一成人在线| 99视频热这里只有精品免费| 欧美xx69| 亚洲精品久久久蜜桃| 亚洲婷婷综合久久一本伊一区| 欧美日韩国产123区| 亚洲最新合集| 久久精品人人爽| 在线观看日产精品| 欧美~级网站不卡| 亚洲欧美色一区| 国产精品日本精品| 久久精品国产久精国产思思| 蜜臀久久99精品久久久久久9| 伊人精品成人久久综合软件| 女人天堂亚洲aⅴ在线观看| 久久久91精品| 国产免费观看久久黄| 性色一区二区三区| 亚洲电影有码| 午夜激情亚洲| 在线观看成人网| 欧美日韩亚洲不卡| 羞羞漫画18久久大片| 免费亚洲电影在线| 一区二区久久久久| 国产一区二区视频在线观看| 麻豆9191精品国产| 亚洲天天影视| 欧美~级网站不卡| 亚洲欧美日韩中文视频| 亚洲一区视频在线观看视频| 亚洲欧美一区二区原创| 韩国女主播一区| 欧美激情成人在线| 午夜日韩在线观看| 亚洲精品一区在线观看| 久久国产精品久久久久久久久久 | 性欧美办公室18xxxxhd| 亚洲人成网站在线播| 性欧美videos另类喷潮| 亚洲国产小视频在线观看| 国产精品一国产精品k频道56| 久久亚洲风情| 亚洲一区二区三区午夜| 欧美黄色成人网| 久久免费的精品国产v∧| 一区二区三区国产在线观看| 亚洲激情婷婷| 狠狠色噜噜狠狠狠狠色吗综合| 欧美极品在线播放| 久久精品中文字幕免费mv| 亚洲调教视频在线观看| 亚洲精品一品区二品区三品区| 久久全国免费视频| 亚洲欧美日韩国产精品 | 日韩午夜电影| 亚洲第一天堂无码专区| 久久久久成人精品| 亚洲一区免费| 这里只有精品丝袜| 亚洲精品韩国| 在线看不卡av| 激情成人综合| 激情视频亚洲| 黄色日韩在线| 国内外成人免费激情在线视频网站| 亚洲大胆人体视频| 亚洲欧美日本日韩| 亚洲精品乱码视频| 国精品一区二区三区| 国产日韩亚洲欧美综合| 国产欧美一区二区精品性色 | 国产精品一区久久|