我先发送个消息使另外一个程序新打开一个窗口,然后再继续发送一个WM_KEYDOWN的消息想让他再打开一个新窗口。但是发现再跟踪状态下发送WM_KEYDOWN消息有反映,但编译好以后直接执行则没有反映。请问是为什么?程序代码如下:
//点击登陆按钮
::SendMessage( SAPCHILDHWND ,WM_KEYDOWN,VK_RETURN,0) ;//通过上面这个消息,程序打开了一个新的窗口。并通过下面的语句获取新窗口的句柄
SAPHWND = FindWindowEx( NULL,  NULL , "#32770" ,  "选择视图" );//这个消息在跟踪状态下有效,但是再编译后的程序中执行则无反映
::SendMessage( SAPCHILDHWND ,WM_KEYDOWN,VK_RETURN,0) ;

解决方案 »

  1.   

    如果是点击按钮的话,就发送按钮点击消息
    SAPHWND = FindWindowEx( NULL, NULL , "#32770" , "选择视图" );
    if(SAPHWND )
    ::SendMessage(SAPHWND ,WM_COMMAND,MAKEWPARAM(IDC_BUTTON,BN_CLICKED),0);
      

  2.   

    SendMessage前sleep一下看看。
      

  3.   

    sleep一下果然就好,我想我的猜测是对的。用SPY++跟踪一下消息发现窗口打开后会处理很多内容。我想要想不通过sleep来处理的话只能通过HOOK消息来处理了,不过对消息如何HOOK我还不清楚,有大侠可以教一下吗?
      

  4.   

    你的问题是SendMessage后,新窗口建立期间就进行FindWindowEx,所以加了延时或单步运行时给了足够的时间等待,这个和用不用钩子没有关系吧,可以加延时或循环带超时查找窗体。