vc编写改键精灵
????? 突然想起魔獸高手們都喜歡在游戲里自定義改鍵,那么這些是怎么實現的呢,記得有個程序叫魔獸改鍵精靈,那么我們也來仿照它寫一款吧。
????? 網上的一些源碼都是掛WH_GETMESSAGE鉤子的,需要一個dll,比較麻煩,那么我們就化難為易,還記得低級鉤子嗎,對,就是它了,不用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;}
???? 當當前窗口為魔獸的時候,我們按下s鍵,系統便會響應a鍵。我本來想直接修改LPKBDLLHOOKSTRUCT結構的vkCode屬性的,但是發現不行,所以只好調用keybd_event這個api了。
?????以上程序只是一個demo,該興趣的可以把它完善成一個完整的改鍵精靈。
?????本文有不足之處,還望大家多多指正。
總結
- 上一篇: java计算机毕业设计幼儿早教系统软件设
- 下一篇: springboot Vue孕期月子管理