大侠帮忙:已知一个窗体句柄和按钮类型及其相关信息,怎样通过消息或事件来运行这个按钮?
       
       本人测试如下,发现失败,望高手来解决:
       
        HWND hMicapsWnd = FindWindow("TMainForm","测试");
        bool ret;
        char buf[255];
        if(hMicapsWnd!=NULL)
        {    
           HWND hBtn= FindWindowEx(hMicapsWnd, NULL,"TkktFlatButton","开始(&S)");
           if(hBtn!=NULL)
           {
                SendMessage(hBtn,WM_GETTEXT ,255,(LPARAM)(LPCTSTR)buf);
                MessageBox(NULL,buf,buf,MB_OK); //正确
                ret=SendMessage(hBtn,BM_CLICK,0 ,0);//失败
           }
          // CloseHandle(hMicapsWnd);
          // CloseHandle(hBtn);
        }
        
        如果按钮是Butten或TBiten等以上代码可以实现,如果是SpeedButton则不能实现,不知道怎么解决。

解决方案 »

  1.   

    ret=::SendMessage(::GetParent(hBtn), MAKEWPARAM(buttonid, BK_CLICK), 0);
      

  2.   

    我只好使用其他办法,只需将SpeedButton的父窗体SetFocus,然后发送键就可以呀 。
    代码如下:
      ::SetFocus(hMicapsWnd);
      PostMessage(hMicapsWnd ,WM_CHAR,'s',0);如果没有快键,那真的没有办法。
    我是向其他进程发送click。
      

  3.   

    怎么用一个程序向另一个程序发送字符并让其显示出来
    首先通过FindWindow取得windows程序的窗口句柄,
    然后通过GetDlgItem取得其中输入框的窗口句柄,
    最后,向该窗口句柄发送WM_CHAR消息即可显示字符
    例如,对于Notepad窗口,可以以如下的方式向其中输入一个'a':
    // 取得记事本的窗口句柄
    HWND hWnd = ::FindWindow( NULL  , "未定标题 - 记事本" );// 取得其中输入框的窗口句柄
    HWND hEdit = ::GetDlgItem( hWnd , 0x0F );  // 这里0x0F是编辑框的ID,可在SPY++中观察得到
    // 向输入框中填写'a'
    ::SendMessage( hEdit , WM_CHAR , (WPARAM)'A' , 0x00000001 );
    -----
    参考一下
      

  4.   

    to flyelf(空谷清音) ( ) 
    举个例子,行吗?
    可是buttonid不知道呀,是否有什么函数可以搞定?
      

  5.   

    If the button is in a dialog box and the dialog box is not active, the BM_CLICK message might fail. To ensure success in this situation, call the SetActiveWindow function to activate the dialog box before sending the BM_CLICK message to the button