c++学习笔记- 自制魔兽显血改键

来源:互联网 发布:淘宝咸鱼在哪找 编辑:程序博客网 时间:2024/04/30 16:20

 

源代码下载地址:点击打开链接

显血:

    模拟键盘按键'['和']'来达到显血效果。

   

void CMsxxDlg::OnTimer(UINT nIDEvent) {// TODO: Add your message handler code here and/or call defaultif(nIDEvent==1){hWnd=::GetForegroundWindow();//获取当前窗口句柄::GetWindowText(hWnd,wText,50);if(strcmp(wText,"Warcraft III")==0)//如果是魔兽窗口则模拟按键{if(flag==0){                         keybd_event(219,0,0,0);                       keybd_event(221,0,0,0);    flag=1;}}else{flag=0;}}CDialog::OnTimer(nIDEvent);}


改键:

      用到WH_KEYBOARD_LL钩子,先创建一个MFC规则的dll将功能函数都放到里面。

     先在头文件中添加变量和函数

   

int v1,v2,v4,v5,v7,v8;//修改关联小键盘的虚拟键码HHOOK g_hHook;HINSTANCE g_hInstanceHandle=NULL;extern "C" _declspec(dllexport) BOOL StartHook(int t1,int t2,int t4,int t5,int t7,int t8);//初始化钩子extern "C" _declspec(dllexport) BOOL StopHook();//停止钩子


 在cpp中实现函数功能

1.钩子回调函数

LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){//先获取当前窗口看是否为魔兽窗口char str[30];::GetWindowText(::GetForegroundWindow(),str,30);if(strcmp(str,"Warcraft III")==0){if(nCode==HC_ACTION){LPKBDLLHOOKSTRUCT lpk=(LPKBDLLHOOKSTRUCT)lParam;//1if(lpk->vkCode==v1){if(wParam==WM_KEYDOWN){keybd_event(97,0,0,0);}elseif(wParam==WM_KEYUP){keybd_event(97,0,KEYEVENTF_KEYUP,0);}return 1;}//2if(lpk->vkCode==v2){if(wParam==WM_KEYDOWN){keybd_event(98,0,0,0);}elseif(wParam==WM_KEYUP){keybd_event(98,0,KEYEVENTF_KEYUP,0);}return 1;}//4if(lpk->vkCode==v4){if(wParam==WM_KEYDOWN){keybd_event(100,0,0,0);}elseif(wParam==WM_KEYUP){keybd_event(100,0,KEYEVENTF_KEYUP,0);}return 1;}//5if(lpk->vkCode==v5){if(wParam==WM_KEYDOWN){keybd_event(101,0,0,0);}elseif(wParam==WM_KEYUP){keybd_event(101,0,KEYEVENTF_KEYUP,0);}return 1;}//7if(lpk->vkCode==v7){if(wParam==WM_KEYDOWN){keybd_event(103,0,0,0);}elseif(wParam==WM_KEYUP){keybd_event(103,0,KEYEVENTF_KEYUP,0);}return 1;}//8if(lpk->vkCode==v8){if(wParam==WM_KEYDOWN){keybd_event(104,0,0,0);}elseif(wParam==WM_KEYUP){keybd_event(104,0,KEYEVENTF_KEYUP,0);}return 1;}}}LRESULT lRetVal=CallNextHookEx(g_hHook,nCode,wParam,0);return lRetVal;}


2.初始化钩子

extern "C" _declspec(dllexport) BOOL StartHook(int t1,int t2,int t4,int t5,int t7,int t8){v1=t1;v2=t2;v4=t4;v5=t5;v7=t7;v8=t8;g_hHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyboardProc,g_hInstanceHandle,0);return TRUE;}


3.卸载钩子

extern "C" _declspec(dllexport) BOOL StopHook(){if(g_hHook){return UnhookWindowsHookEx(g_hHook);}return TRUE;}


最后在主程序中调用dll时将修改6个小键盘的虚拟键码传递进来就行了。

原创粉丝点击