• <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>
            隨筆 - 74, 文章 - 0, 評(píng)論 - 26, 引用 - 0
            數(shù)據(jù)加載中……

            (轉(zhuǎn))wince中的hook(鉤子)用法

            Hook(鉤子)是一種在消息到達(dá)目標(biāo)窗口前進(jìn)行截獲的技術(shù)。使用鉤子主要使用以下三個(gè)函數(shù)SetWindowsHookEx:創(chuàng)建鉤子
            CallNextHookEx:將消息傳給鉤子鏈中的下一個(gè)鉤子
            UnhookWindowsHookEx:釋放鉤子
            對(duì)于創(chuàng)建鉤子的函數(shù)SetWindowsHookEx,MSDN給出其原形如下:

            HHOOK SetWindowsHookEx(
              int idHook,        // type of hook to install
              HOOKPROC lpfn,     // address of hook procedure
              HINSTANCE hMod,    // handle to application instance
              DWORD dwThreadId   // identity of thread to install hook for
            );

            這些在windows上面使用沒(méi)有問(wèn)題,但是在說(shuō)明的最后,關(guān)于平臺(tái)限制的地方,可以清楚的看到以下文字:Windows CE: Unsupported.
            也就是說(shuō),wince并不支持鉤子。
            但是是不是不支持呢?只能說(shuō)不直接支持鉤子,用別的方法也是可以使用鉤子函數(shù)的,那就是直接獲取鉤子函數(shù)地址,然后調(diào)用的方法。
            g_hHookApiDLL = LoadLibrary(_T("coredll.dll"));
            SetWindowsHookEx = (_SetWindowsHookExW)GetProcAddress(g_hHookApiDLL, _T("SetWindowsHookExW"));
            如法炮制,可以獲得其他兩個(gè)函數(shù)的地址,有了這三個(gè)函數(shù)的地址,就可以類(lèi)似這樣使用了:
            g_hInstalledLLKBDhook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardProc, hInstance, 0);
            關(guān)于wince的鉤子,有以下總結(jié),不盡不對(duì)之處,請(qǐng)給飛狐指正:
            1 參看WinCE的winbase.h,wince下可以使用以下三種:
            #define WH_JOURNALRECORD 0
            #define WH_JOURNALPLAYBACK 1
            #define WH_KEYBOARD_LL 20
            其中最有用的就是鍵盤(pán)鉤子了。Wince里面定義其為20,而不是windows里面的14,因此調(diào)用時(shí)要注意。
            2 關(guān)于鍵盤(pán)鉤子回調(diào)函數(shù)keyboardProc,它里面的幾個(gè)參數(shù)并不像MSDN里面提到的KeyboardProc那樣:
            LRESULT CALLBACK KeyboardProc(
              int code,       // hook code
              WPARAM wParam,  // virtual-key code
              LPARAM lParam   // keystroke-message information
            按照說(shuō)明,wParam應(yīng)該存的是虛擬鍵信息。然而事實(shí)上,這三個(gè)函數(shù)中,第二個(gè)是用來(lái)指示是鍵按下還是彈起,第三個(gè)參數(shù)lParam才是真正存儲(chǔ)的按鍵信息數(shù)據(jù)。它存儲(chǔ)的是一個(gè)KBDLLHOOKSTRUCT結(jié)構(gòu)體指針。這個(gè)結(jié)構(gòu)體定義如下:
            typedef struct {
                DWORD vkCode;
                DWORD scanCode;
                DWORD flags;
                DWORD time;
                ULONG_PTR dwExtraInfo;
            } KBDLLHOOKSTRUCT;
            結(jié)構(gòu)體里面才是真正的按鍵信息。
            3對(duì)于鍵盤(pán)鉤子,我只能使用一個(gè),如果創(chuàng)建二個(gè)鉤子來(lái)檢測(cè)(不管是使用同一個(gè)dll,還是兩個(gè)不同的dll),則第一個(gè)可以正常工作,但是第二個(gè)會(huì)報(bào)錯(cuò),錯(cuò)誤id是31 ERROR_GEN_FAILURE即
            A device attached to the system is not functioning.
            不知道哪位高手有解決方案?
            4 鉤子有線程級(jí)和全局鉤子,但是我只試驗(yàn)成功了全局鉤子,工作很好,但是線程級(jí)鉤子還沒(méi)有成功。
            5 鉤子用途很多,我們就用它和驅(qū)動(dòng)打交道,具體也不多說(shuō)了。
             鉤子函數(shù)源代碼在采用codeproject網(wǎng)站上面Prathamesh S Kulkarni的源代碼基礎(chǔ)上,增加了處理按鍵消息的部分,代碼比較長(zhǎng),就不貼了,有需要的可以交流,或者參看Prathamesh S Kulkarni的文章。

            posted on 2007-12-13 15:51 井泉 閱讀(3523) 評(píng)論(2)  編輯 收藏 引用

            評(píng)論

            # re: (轉(zhuǎn))wince中的hook(鉤子)用法  回復(fù)  更多評(píng)論   

            你好,能不能發(fā)下source code給我,那個(gè)codeproject source code下載不到了,我的email:iefoahz3802@tom.com 謝謝
            2008-12-30 14:24 | slove

            # re: (轉(zhuǎn))wince中的hook(鉤子)用法  回復(fù)  更多評(píng)論   

            http://blog.csdn.net/91program/archive/2007/12/23/1961570.aspx
            2010-06-13 23:00 | 91program

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久婷婷色综合一区二区| 日韩精品久久久肉伦网站| 久久无码国产专区精品| 热久久这里只有精品| 精品人妻久久久久久888| 亚洲精品乱码久久久久久久久久久久| 婷婷久久精品国产| 无码人妻少妇久久中文字幕| 亚洲国产成人久久一区WWW| 久久久久国产一区二区三区| 久久国产精品免费一区| 久久久久亚洲av成人无码电影| 国产真实乱对白精彩久久| 国产精品狼人久久久久影院| 狠狠久久综合伊人不卡| 久久久久国产| 久久综合久久美利坚合众国| 奇米综合四色77777久久| 久久99精品久久久久久久不卡| 精品久久久久久久久午夜福利| 国产精品久久成人影院| 99久久国产亚洲高清观看2024| 久久久久99精品成人片三人毛片| 亚洲精品国精品久久99热| 午夜不卡久久精品无码免费| 久久发布国产伦子伦精品| 国产巨作麻豆欧美亚洲综合久久| 性做久久久久久久久久久| 久久亚洲精品成人av无码网站| 久久久精品午夜免费不卡| 亚洲国产精品无码久久九九| 久久精品中文无码资源站| 久久精品国产WWW456C0M| AV无码久久久久不卡蜜桃| 91精品观看91久久久久久 | 久久精品一本到99热免费| 97久久国产综合精品女不卡 | 欧美日韩久久中文字幕| 久久99精品久久久久久动态图| 久久国产午夜精品一区二区三区| 国产精品99久久久精品无码|