• <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, 評論 - 26, 引用 - 0
            數據加載中……

            (轉)wince中的hook(鉤子)用法

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

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

            評論

            # re: (轉)wince中的hook(鉤子)用法  回復  更多評論   

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

            # re: (轉)wince中的hook(鉤子)用法  回復  更多評論   

            http://blog.csdn.net/91program/archive/2007/12/23/1961570.aspx
            2010-06-13 23:00 | 91program
            精品久久久无码21p发布| 久久这里有精品| 中文字幕一区二区三区久久网站| 人人妻久久人人澡人人爽人人精品 | 国产麻豆精品久久一二三| 久久夜色精品国产噜噜亚洲AV| 99久久精品日本一区二区免费 | 久久午夜无码鲁丝片秋霞| 久久精品国产亚洲AV大全| 精品水蜜桃久久久久久久| 久久精品中文无码资源站| 久久精品免费网站网| 国产精品久久久久久| 热99RE久久精品这里都是精品免费| 久久99国产精品99久久| 久久精品卫校国产小美女| 伊人久久综合热线大杳蕉下载| 人妻无码αv中文字幕久久| 久久综合九色综合欧美就去吻| 久久福利青草精品资源站免费| 人妻久久久一区二区三区| 思思久久精品在热线热| 蜜臀久久99精品久久久久久 | 无码伊人66久久大杳蕉网站谷歌| 久久久久无码中| 国产一区二区精品久久岳| 国产精品久久久久久久午夜片 | 久久午夜羞羞影院免费观看| 久久午夜无码鲁丝片秋霞| 亚洲国产日韩欧美久久| 久久亚洲天堂| 超级97碰碰碰碰久久久久最新| 精品人妻伦九区久久AAA片69| 99热都是精品久久久久久| 国产毛片久久久久久国产毛片| 91久久国产视频| 国产精品成人无码久久久久久| 久久综合九色综合欧美就去吻| 一本综合久久国产二区| 精品伊人久久大线蕉色首页| 欧洲成人午夜精品无码区久久|