• <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ù)博客
            久久久www免费人成精品| 无码国内精品久久人妻蜜桃| 亚洲AV成人无码久久精品老人 | 狠狠色综合久久久久尤物| 色偷偷偷久久伊人大杳蕉| 午夜视频久久久久一区| 无码人妻少妇久久中文字幕| 久久久无码精品午夜| 久久久久国产| 色婷婷久久久SWAG精品| 久久亚洲精品国产精品婷婷| 思思久久99热只有频精品66| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 久久人人爽人人爽人人片AV不| 精品国产日韩久久亚洲| 无码专区久久综合久中文字幕| 97久久精品人妻人人搡人人玩| 国产人久久人人人人爽| 日本三级久久网| 久久高潮一级毛片免费| 久久婷婷五月综合97色直播| 久久婷婷是五月综合色狠狠| 一本一本久久a久久综合精品蜜桃| 色88久久久久高潮综合影院| 99久久99这里只有免费费精品| 91精品国产91久久久久久| 欧美久久天天综合香蕉伊| 亚洲成色WWW久久网站| 久久久久久a亚洲欧洲aⅴ| 三级韩国一区久久二区综合| 久久精品欧美日韩精品| 精品久久久久久无码国产| 精品综合久久久久久98| 精品国产福利久久久| 中文国产成人精品久久亚洲精品AⅤ无码精品| 色欲综合久久躁天天躁| 999久久久免费精品国产| 亚洲欧美日韩精品久久亚洲区 | 久久久久亚洲AV成人网人人软件| 日韩精品久久久久久久电影蜜臀| 久久久久久久综合日本|