• <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>

            LoveBeyond

            使用低級鍵盤鉤子實現鍵盤改鍵

            很垃圾的文章了,大牛們直接飄過吧。
            為什么要實現改鍵?
            前幾天玩一個游戲,因為ASDW這幾個鍵不能控制方向所以感覺很不方便,于是就想出了自己寫一個全局鍵盤鉤子來實現改鍵的程序;一般能自己解決的問題我都會自己想辦法解決,所以也沒有用網上先有的程序了。
            怎么實現鍵盤改鍵?
            裝一個全局的低級鍵盤鉤子(WH_KEYBOARD_LL),在鍵盤鉤子回調函數(LowLevelKeyboardProc)中判斷是不是目標按鍵,如果是則通過keybd_event來實現模擬按鍵,同時直接用return TRUE;來對回調函數進行返回。如果不是目標按鍵,那么需要傳遞到下一個鉤子鏈。全局的鉤子需要放在DLL里面。
            改鍵效果
            對普通程序有效……因為我玩的游戲是Direct X的,所以鍵盤鉤子完全相當于不存在,因為沒有接觸過Direct X,所以就沒有繼續寫下去了。
            改鍵代碼
             1 // 說明:頭文件KeyRedir.h
             2 // 作者:代碼瘋子
             3 // Blog: http://www.programlife.net/
             4 #ifndef __KEYHOOK_H_H
             5 #define __KEYHOOK_H_H
             6  
             7 #ifdef MY_HOOK_API
             8 #else
             9 #define MY_HOOK_API _declspec(dllimport)
            10 #endif
            11  
            12 #ifdef __cplusplus
            13 extern "C" {
            14 #endif 
            15  
            16     MY_HOOK_API BOOL __stdcall InstallHook();
            17     MY_HOOK_API BOOL __stdcall UnInstallHook();
            18  
            19 #ifdef __cplusplus
            20 }
            21 #endif 
            22  
            23 #endif

            1 // 說明:Def文件KeyRedir.def
            2 // 作者:代碼瘋子
            3 // Blog: http://www.programlife.net/
            4 LIBRARY    "KeyRedir"
            5  
            6 EXPORTS
            7 InstallHook
            8 UnInstallHook

             1 // 說明:源文件KeyRedir.cpp
             2 // 作者:代碼瘋子
             3 // Blog: http://www.programlife.net/
             4 #include <windows.h>
             5  
             6 #pragma warning(disable:4996)
             7  
             8 #define MY_HOOK_API _declspec(dllexport)
             9 #include "KeyRedir.h"
            10  
            11 HINSTANCE g_hInst = NULL;
            12 static HHOOK g_hHook = NULL;
            13  
            14 BYTE g_bVK[4] = {VK_LEFT, VK_DOWN, VK_RIGHT, VK_UP};
            15  
            16 LRESULT CALLBACK LowLevelKeyboardProc(
            17     int code,
            18     WPARAM wParam,
            19     LPARAM lParam)
            20 {
            21     if(code == HC_ACTION)
            22     {
            23         PKBDLLHOOKSTRUCT pStruct = (PKBDLLHOOKSTRUCT)lParam;
            24         DWORD dwIndex = 0;
            25         switch (pStruct->vkCode)
            26         {
            27         case L'A':
            28         case L'a':
            29             dwIndex = 0;
            30             break;
            31  
            32         case L'S':
            33         case L's':
            34             dwIndex = 1;
            35             break;
            36  
            37         case L'D':
            38         case L'd':
            39             dwIndex = 2;
            40             break;
            41  
            42         case L'W':
            43         case L'w':
            44             dwIndex = 3;
            45             break;
            46  
            47         default:
            48             return CallNextHookEx(g_hHook, code, wParam, lParam);
            49         }
            50         if (wParam == WM_KEYDOWN)
            51         {
            52             keybd_event(g_bVK[dwIndex], MapVirtualKey(g_bVK[dwIndex], 0), 0, 0);                                
            53         }
            54         else if (wParam == WM_KEYUP)
            55         {
            56             keybd_event(g_bVK[dwIndex], MapVirtualKey(g_bVK[dwIndex], 0), KEYEVENTF_KEYUP, 0);
            57         }
            58         return TRUE;
            59     }
            60     return CallNextHookEx(g_hHook, code, wParam, lParam);
            61 }
            62  
            63 BOOL __stdcall InstallHook()
            64 {
            65     g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
            66         LowLevelKeyboardProc,
            67         g_hInst,
            68         NULL);
            69     return g_hHook == NULL ? FALSE : TRUE;
            70 }
            71  
            72 BOOL __stdcall UnInstallHook()
            73 {
            74     return UnhookWindowsHookEx(g_hHook);
            75 }
            76  
            77 BOOL WINAPI DllMain(IN HINSTANCE hDllHandle,
            78                     IN DWORD nReason,
            79                     IN LPVOID Reserved)
            80 {
            81     g_hInst = hDllHandle;
            82     return TRUE;
            83 }

            原創文章,轉載請注明:
            本文出自程序人生 >> 使用低級鍵盤鉤子實現鍵盤改鍵
            作者:代碼瘋子

            您可能對下面的文章也感興趣:
            1. 在DLL中獲取主進程窗口句柄 (16.3)
            2. Win32寫的屏幕取色工具 (15.5)
            3. SysListView32控件響應鼠標單擊消息 (15.4)
            4. SDK設置編輯框控件只讀屬性 (12.8)
            5. error C2059: syntax error : ‘string’ (11.6)
            分類:Windows SDK標簽:

            posted on 2011-11-10 15:03 LoveBeyond 閱讀(3569) 評論(0)  編輯 收藏 引用

            <2011年10月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導航

            統計

            留言簿(1)

            文章分類

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            友情鏈接:C++博客 LoveBeyond 代碼瘋子 程序人生 C++技術博客
            久久久无码精品亚洲日韩按摩 | 狠狠色婷婷久久综合频道日韩| 久久不见久久见免费影院www日本| 日本道色综合久久影院| 欧美粉嫩小泬久久久久久久| 九九精品久久久久久噜噜| 久久久久AV综合网成人| 女人香蕉久久**毛片精品| 久久久久亚洲精品男人的天堂 | 欧洲性大片xxxxx久久久| 青草国产精品久久久久久| 91亚洲国产成人久久精品| 久久人人爽人人人人片av| 久久中文字幕一区二区| 777午夜精品久久av蜜臀| 久久黄视频| 国产精品美女久久久| 久久天天躁狠狠躁夜夜avapp| 久久午夜电影网| 国内精品久久久久久99蜜桃 | 久久国产免费直播| 久久久久久夜精品精品免费啦 | 免费精品国产日韩热久久| 中文字幕亚洲综合久久| 亚洲国产精品18久久久久久| 久久综合伊人77777| 国产精品激情综合久久| 久久亚洲精品国产精品| 少妇内射兰兰久久| 久久亚洲精品国产精品| 色欲综合久久中文字幕网| 久久久久亚洲av综合波多野结衣 | 色综合久久中文字幕无码| 欧美亚洲国产精品久久高清| 久久久久亚洲AV综合波多野结衣| 亚洲国产二区三区久久| 久久精品国产99国产电影网| 久久精品9988| 久久性生大片免费观看性| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久国产精品免费一区|