首页
社区
课程
招聘
[求助]请达人帮我看看这段关于PostMessage的代码
发表于: 2007-2-19 01:14 5298

[求助]请达人帮我看看这段关于PostMessage的代码

2007-2-19 01:14
5298
代码如下:

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直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
你是向目标程序发送回车键消息吧。你向发送的目标程序窗口必须响应回车键消息并处理这消息才行。
2007-2-20 08:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
目标程序有响应回车
2007-2-21 11:32
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
不用PostMessage,用SendMessage试试,向窗口发消息!
2007-2-22 10:05
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
用这个PostQuitMessage也应该行.
2007-2-22 10:09
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
::PostMessage(hwnd1,WM_KEYDOWN,VK_RETURN,NULL);
::PostMessage(hwnd1,WM_KEYDOWN,VK_ESCAPE,NULL);

VK_KEYUP
2007-3-11 04:34
0
雪    币: 22
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这我懂,游戏外挂吧,最近大多游戏把这sendkeys封了
你得用WINIO模拟,试下吧,帅哥

我也有个问题
游戏里基地址的时候怎么搜寄存器里的值没有,这还做什么外挂?
真郁闷,望懂游戏加解密的高手赐教,关键是测试数据技巧
ING  等回答........................................
2007-3-11 05:07
0
游客
登录 | 注册 方可回帖
返回
//