void CWlwzDlg::OnButton1() 
{
CFileDialog dlg(TRUE);
if(dlg.DoModal()==IDOK)
{
ShellExecute(hWnd,"open",dlg.GetFileName(),NULL,NULL,SW_SHOW);
}
}void CWlwzDlg::OnButton2() 
{
::SendMessageA(hWnd,WM_KEYDOWN,VK_F1,0L);
::SendMessageA(hWnd,WM_KEYUP,VK_F1,0L);
}这样写为什么不能发送正确的消息给另一个程序呢?

解决方案 »

  1.   

    关于向另一个程序发送击键消息,一般是用 SendInput/keybd_event ,注意调用 SendInput/keybd_event  之前一定要确保它是活动的,为此可以调用 SetForegroundWindow 函数。
    具体参考http://www.vckbase.com/document/viewdoc/?id=1360
      

  2.   

    我想在被启动的程序在后台的时候一样可以发送键被按下的消息,所以只能用sendmessage发送,如何实现?
      

  3.   

    获得目标程序句柄,然后就直接SendMessage发送
    相应的消息就可以了
      

  4.   

    楼主的程序段
    void CWlwzDlg::OnButton2() 
    {
    ::SendMessageA(hWnd,WM_KEYDOWN,VK_F1,0L);
    ::SendMessageA(hWnd,WM_KEYUP,VK_F1,0L);
    }hWnd看起来是本程序的窗口啊。自己给自己发消息吗?想给谁发消息就要用谁的窗口句柄做第一个参数。
    要是知道对方窗口的标题,可以用::FindWindow(NULL,"标题")得到对方窗口的句柄
    要是对方窗口的标题不一定,可以用spy++查下它的窗口类名。::FindWindow(窗口类名,NULL)