本人要对一个客户端游戏做一个自动登录的功能,现在尝试通过发送窗体WM_KEYUP WM_KEYDOWM 或 WM_CHAR 消息来实现。游戏窗口界面如下图1用SPY++查找游戏窗口结构如下图2通过SPY++可以确定游戏登录窗口为句柄 0x000A04A0 类名 SunAwtCanvas
然后我用SPY++监视我手动登录过程窗口 0X000A04A0 的 WM_KEYUP WM_KEYDOWM WM_CHAR 消息却监视不到这几个消息的任何记录
重新设置监视父窗口 0x000B03C2 下所有子窗口的 WM_KEYUP WM_KEYDOM WM_CHAR 消息, 这个时候能正确记录和反应我手动登录过程键盘操作记录 如下图3通过查看上图消息记录的窗体句柄却是 0x00030448 也就是上面图2的那个类名是 Static 的窗体
根据上面的消息记录我用程序向 0x00030448 发送WM_KEYDOWN WM_KEYUP 消息 SPY++记录和上面比对正常 但窗体却没有显示我发送的消息内容。消息记录如下图4不知道这个是什么原因? 请有了解的提供点意见或建议!
还有我尝试直接向窗体 0x000A04A0 发送消息后窗体也没有反应, 用SPY++监视消息发送也是成功的。

解决方案 »

  1.   

    sorry,一张图片都没看到。发送消息用API
    LRESULT SendMessage(
      HWND hWnd,      // handle of destination window
      UINT Msg,       // message to send
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );即可。
    句柄你可以通过APIHWND FindWindow(
      LPCTSTR lpClassName,  // pointer to class name
      LPCTSTR lpWindowName  // pointer to window name
    );
    返回登录窗体的句柄,
    由于一张图都没看到,所以也不知道说的是不是符合你的意思。
      

  2.   

    没看到图?怎么查找窗体句柄 怎么发送消息我都没问题 以前有做过这样的项目了 这次有点奇怪 可能是对WINDOW消息还是没有弄透彻
      

  3.   

    你此时用WM_KEYUP WM_KEYDOWM WM_CHAR 这些消息一点用都没有,因为你是要自动登录。需要的是直接打开客户端就可以运行的进去的。你应该是将用户名、密码记录下来,加密,存放、下次进来解密、输入到对话框,调用OnLoginButton事件。
      

  4.   

    你直接赋值,this.TxtUserName.Text = "hello";this.TexPwd.Text = "World";这样不就行了,
    不同的是这个值需要你打开登录界面的时候从保存的文件里面读取得到。你不会是想不打开登录界面就直接登录进去了吧