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

            使用低級(jí)鍵盤(pán)鉤子實(shí)現(xiàn)鍵盤(pán)改鍵

            很垃圾的文章了,大牛們直接飄過(guò)吧。
            為什么要實(shí)現(xiàn)改鍵?
            前幾天玩一個(gè)游戲,因?yàn)锳SDW這幾個(gè)鍵不能控制方向所以感覺(jué)很不方便,于是就想出了自己寫(xiě)一個(gè)全局鍵盤(pán)鉤子來(lái)實(shí)現(xiàn)改鍵的程序;一般能自己解決的問(wèn)題我都會(huì)自己想辦法解決,所以也沒(méi)有用網(wǎng)上先有的程序了。
            怎么實(shí)現(xiàn)鍵盤(pán)改鍵?
            裝一個(gè)全局的低級(jí)鍵盤(pán)鉤子(WH_KEYBOARD_LL),在鍵盤(pán)鉤子回調(diào)函數(shù)(LowLevelKeyboardProc)中判斷是不是目標(biāo)按鍵,如果是則通過(guò)keybd_event來(lái)實(shí)現(xiàn)模擬按鍵,同時(shí)直接用return TRUE;來(lái)對(duì)回調(diào)函數(shù)進(jìn)行返回。如果不是目標(biāo)按鍵,那么需要傳遞到下一個(gè)鉤子鏈。全局的鉤子需要放在DLL里面。
            改鍵效果
            對(duì)普通程序有效……因?yàn)槲彝娴挠螒蚴荄irect X的,所以鍵盤(pán)鉤子完全相當(dāng)于不存在,因?yàn)闆](méi)有接觸過(guò)Direct X,所以就沒(méi)有繼續(xù)寫(xiě)下去了。
            改鍵代碼
             1 // 說(shuō)明:頭文件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 // 說(shuō)明:Def文件KeyRedir.def
            2 // 作者:代碼瘋子
            3 // Blog: http://www.programlife.net/
            4 LIBRARY    "KeyRedir"
            5  
            6 EXPORTS
            7 InstallHook
            8 UnInstallHook

             1 // 說(shuō)明:源文件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 }

            原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明:
            本文出自程序人生 >> 使用低級(jí)鍵盤(pán)鉤子實(shí)現(xiàn)鍵盤(pán)改鍵
            作者:代碼瘋子

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

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

            <2011年11月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            導(dǎo)航

            統(tǒng)計(jì)

            留言簿(1)

            文章分類

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            友情鏈接:C++博客 LoveBeyond 代碼瘋子 程序人生 C++技術(shù)博客
            久久91精品国产91| 亚洲国产成人久久综合一| 国产成人精品综合久久久| 日韩精品久久无码人妻中文字幕| 99久久精品国产高清一区二区| 国产精品女同一区二区久久| 久久人人爽人人爽人人片AV麻豆 | 久久99热这里只频精品6| 精品国产乱码久久久久软件 | 久久综合伊人77777麻豆| 国产A三级久久精品| 久久国产亚洲精品麻豆| 色婷婷噜噜久久国产精品12p| 亚洲午夜久久久久久噜噜噜| 精品午夜久久福利大片| 亚洲精品国产综合久久一线| 久久99精品久久久久久动态图 | 99久久国语露脸精品国产| 日韩亚洲国产综合久久久| 国产精品禁18久久久夂久| 免费一级欧美大片久久网| 国产精品美女久久久久网| 久久频这里精品99香蕉久| 久久精品国产影库免费看 | 99久久夜色精品国产网站| 色偷偷88欧美精品久久久| 国产精品久久久久久久久鸭| 久久青青草视频| 久久99国产一区二区三区| 国产精品国色综合久久| 囯产精品久久久久久久久蜜桃| 51久久夜色精品国产| 欧美亚洲色综久久精品国产| 久久婷婷色香五月综合激情 | 精品久久久久久中文字幕| 无码国内精品久久人妻| 伊人久久大香线蕉综合热线| 久久996热精品xxxx| 色成年激情久久综合| 97久久精品无码一区二区 | 亚洲国产香蕉人人爽成AV片久久 |