我使用了2种方法:
1:使用PostMessage() HWND Handle;
Handle = FindWindow(NULL, "game");//找到目标窗口的Handle
if ( Handle == NULL ) return;
PostMessage(Handle,WM_KEYDOWN, VF_F5, 0L); //按下
Sleep(5);
PostMessage(Handle,WM_KEYUP, VF_F5, 0L); //释放2:捆绑线程
HWND Handle;
DWORD dwthreadforeground, dwthreadthis;
//获得活动窗口的线程号
dwthreadforeground = ::GetWindowThreadProcessId(Handle, NULL);
//获得与自己程序的窗口相关的线程号
dwthreadthis = ::GetWindowThreadProcessId(this->Handle, NULL);
//将两个线程的输入联系起来
::AttachThreadInput(dwthreadthis, dwthreadforeground, TRUE);
keybd_event(VK_F5,0,0,0); //按下
Sleep(5);
keybd_event(VK_F5,0,0,0); //释放
//将联到一起的两个线程的输入分离
::AttachThreadInput(dwthreadthis, dwthreadforeground, FALSE);以上2种方法在记事本等等窗口中试验是有效的。
但我这段程序的目的是让某个游戏窗口不停的按键
昨天试了一下,程序对游戏窗口无效。估计是屏蔽了其他进程的消息?
我对windows的消息机制不了解,PostMessage()是不是把WM_KEYDOWN这个
消息放到Handle这个进程的消息队列中,进而让Handle进程处理这个消息。
但是现在看来对游戏窗口是无效的。怎么解决?
多谢!!!!!!!!!!!
1:使用PostMessage() HWND Handle;
Handle = FindWindow(NULL, "game");//找到目标窗口的Handle
if ( Handle == NULL ) return;
PostMessage(Handle,WM_KEYDOWN, VF_F5, 0L); //按下
Sleep(5);
PostMessage(Handle,WM_KEYUP, VF_F5, 0L); //释放2:捆绑线程
HWND Handle;
DWORD dwthreadforeground, dwthreadthis;
//获得活动窗口的线程号
dwthreadforeground = ::GetWindowThreadProcessId(Handle, NULL);
//获得与自己程序的窗口相关的线程号
dwthreadthis = ::GetWindowThreadProcessId(this->Handle, NULL);
//将两个线程的输入联系起来
::AttachThreadInput(dwthreadthis, dwthreadforeground, TRUE);
keybd_event(VK_F5,0,0,0); //按下
Sleep(5);
keybd_event(VK_F5,0,0,0); //释放
//将联到一起的两个线程的输入分离
::AttachThreadInput(dwthreadthis, dwthreadforeground, FALSE);以上2种方法在记事本等等窗口中试验是有效的。
但我这段程序的目的是让某个游戏窗口不停的按键
昨天试了一下,程序对游戏窗口无效。估计是屏蔽了其他进程的消息?
我对windows的消息机制不了解,PostMessage()是不是把WM_KEYDOWN这个
消息放到Handle这个进程的消息队列中,进而让Handle进程处理这个消息。
但是现在看来对游戏窗口是无效的。怎么解决?
多谢!!!!!!!!!!!
Handle = FindWindow(NULL, "game");//找到目标窗口的Handle
if ( Handle == NULL ) return;
HWND Handle;
Handle = FindWindow(NULL, "1.txt - 记事本");//找到目标窗口的Handle
if ( Handle == NULL ) return;
SendMessage(Handle,WM_KEYDOWN, VF_F5, 0L); //按下
Sleep(5);
SendMessage(Handle,WM_KEYUP, VF_F5, 0L); //释放是无效的,而用PostMessage()是有效的