vc编写改键精灵
????? 突然想起魔獸高手們都喜歡在游戲里自定義改鍵,那么這些是怎么實(shí)現(xiàn)的呢,記得有個(gè)程序叫魔獸改鍵精靈,那么我們也來(lái)仿照它寫一款吧。
????? 網(wǎng)上的一些源碼都是掛WH_GETMESSAGE鉤子的,需要一個(gè)dll,比較麻煩,那么我們就化難為易,還記得低級(jí)鉤子嗎,對(duì),就是它了,不用dll也行。
#include <iostream> #include "windows.h" using namespace std; typedef struct tagKBDLLHOOKSTRUCT { DWORD vkCode; DWORD scanCode; DWORD flags; DWORD time; DWORD dwExtraInfo; } KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; HHOOK hook;LRESULT CALLBACK mouse(int ncode,WPARAM w,LPARAM l){if (ncode>=0){LPKBDLLHOOKSTRUCT k=(LPKBDLLHOOKSTRUCT)l;char a[100]={0};GetWindowText(GetForegroundWindow(),a,100);if(stricmp(a,"Warcraft III")==0){if(k->vkCode==VkKeyScan('s')){// MessageBox(0,0,0,0);k->vkCode=VkKeyScan('a'); if(w==WM_KEYDOWN){keybd_event(VkKeyScan('a'),0,0,0);return 1; }else if(w==WM_KEYUP){keybd_event(VkKeyScan('a'),0,KEYEVENTF_KEYUP,0);return 1;}}}}return ::CallNextHookEx(hook,ncode,w,l); }main(){hook=::SetWindowsHookEx(13,mouse,::GetModuleHandle(0),0);MSG msg;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg);DispatchMessage (&msg);};UnhookWindowsHookEx (hook);return 0;}
???? 當(dāng)當(dāng)前窗口為魔獸的時(shí)候,我們按下s鍵,系統(tǒng)便會(huì)響應(yīng)a鍵。我本來(lái)想直接修改LPKBDLLHOOKSTRUCT結(jié)構(gòu)的vkCode屬性的,但是發(fā)現(xiàn)不行,所以只好調(diào)用keybd_event這個(gè)api了。
?????以上程序只是一個(gè)demo,該興趣的可以把它完善成一個(gè)完整的改鍵精靈。
?????本文有不足之處,還望大家多多指正。
總結(jié)
- 上一篇: java计算机毕业设计幼儿早教系统软件设
- 下一篇: nasmc++ 读取FAT12文件系统