代码如下:
void CMainFrame::OnMenu()
{
// TODO: Add your command handler code here
ShellExecute(this->m_hWnd, "open",
"K:\\Program Files\\MAME32K\\mame32k.exe", "dino", NULL, SW_SHOWNA);
Sleep(3000);
HWND hwnd1=::FindWindow(NULL,"MAME: Cadillacs and Dinosaurs (World 930201) [dino]");
char str[100];
if (hwnd1)
{
::GetWindowText(hwnd1,str,100);
MessageBox(str);
}
else
MessageBox("F");
::PostMessage(hwnd1,WM_KEYDOWN,VK_RETURN,NULL);
::PostMessage(hwnd1,WM_KEYDOWN,VK_ESCAPE,NULL);
FILE *hFile = fopen("K:\\Program Files\\MAME32K\\1.txt", "w");
EnumWindows( ( WNDENUMPROC ) EnumWindowsProc, ( LPARAM ) hFile );
fclose(hFile);
}
代码的功能是打开mame游戏程序,并载入dino这个游戏,然后向游戏发送键盘消息,让游戏响应这些消息
运行结果,FindWindow找到了指定的窗口,MessageBox(str);结果可以打出str的值,也符合,1.txt里面也有窗口的标题,
就是发送消息::PostMessage(hwnd1,WM_KEYDOWN,VK_RETURN,NULL);
::PostMessage(hwnd1,WM_KEYDOWN,VK_ESCAPE,NULL);不能像想象中那样,让游戏退出,游戏一点反应都没有,查了很多地方在看雪看到一个类似的向记事本发送键盘消息的程序,
HWND w1,w2;
w1=::FindWindow(NULL,"abc.txt - 记事本");
w2=::FindWindowEx(w1,NULL,"Edit",NULL);
::SendMessage(w2,WM_CHAR,'A',0); /* 可以成功的模拟字符A */
这段程序FindWindowEx,找到记事本的Edit控件类,才知道前面的代码中消息只传到指定窗口的框架,所以程序不能正确响应,但是记事本,知道有个Edit控件类,针对某个不确定的窗口比如我的这个游戏窗口,我们如何知道要获得窗口的哪些信息,才能正确处理键盘的模拟消息,游戏窗口是一个简单的窗口,只有标题栏和游戏画面,没有菜单栏等等
请高手帮帮忙?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课