源代码下载地址:点击打开链接
显血:
模拟键盘按键'['和']'来达到显血效果。
void CMsxxDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(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;
//1
if(lpk->vkCode==v1)
{
if(wParam==WM_KEYDOWN)
{
keybd_event(97,0,0,0);
}
else
if(wParam==WM_KEYUP)
{
keybd_event(97,0,KEYEVENTF_KEYUP,0);
}
return 1;
}
//2
if(lpk->vkCode==v2)
{
if(wParam==WM_KEYDOWN)
{
keybd_event(98,0,0,0);
}
else
if(wParam==WM_KEYUP)
{
keybd_event(98,0,KEYEVENTF_KEYUP,0);
}
return 1;
}
//4
if(lpk->vkCode==v4)
{
if(wParam==WM_KEYDOWN)
{
keybd_event(100,0,0,0);
}
else
if(wParam==WM_KEYUP)
{
keybd_event(100,0,KEYEVENTF_KEYUP,0);
}
return 1;
}
//5
if(lpk->vkCode==v5)
{
if(wParam==WM_KEYDOWN)
{
keybd_event(101,0,0,0);
}
else
if(wParam==WM_KEYUP)
{
keybd_event(101,0,KEYEVENTF_KEYUP,0);
}
return 1;
}
//7
if(lpk->vkCode==v7)
{
if(wParam==WM_KEYDOWN)
{
keybd_event(103,0,0,0);
}
else
if(wParam==WM_KEYUP)
{
keybd_event(103,0,KEYEVENTF_KEYUP,0);
}
return 1;
}
//8
if(lpk->vkCode==v8)
{
if(wParam==WM_KEYDOWN)
{
keybd_event(104,0,0,0);
}
else
if(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个小键盘的虚拟键码传递进来就行了。