如果用SendMessage去控制另一个程序(300分)

  • 主题发起人 主题发起人 zwc
  • 开始时间 开始时间
Z

zwc

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题烦了我一个多星期了。<br>我写了一个程序,想让它去控制另一个程序。<br>假设有两个程序A和B(都是用C++Builder写)。<br>当我在A按F3是,如何让B产生ONKEYDOWN一个事件。<br>我试过用SendMessage(HWND,WM_KEYDOWN,VK_F3,0),没有成功。<br>用SendMessage(HWND,WM_CLOSE,0,0)是可以把B关闭的。
 
你的SendMessage(HWND,WM_CLOSE,0,0)可以把B 关掉吗?<br>应该是<br>handle : = FindWindows()......;<br>SendMessage(handle,WM_CLOSE,0,0);<br>才可以
 
HWND TEMP;<br>TEMP=FindWindow(NULL,"From2");<br>if (TEMP){<br>SendMessage(TEMP,WM_KEYDOWN,VK_F3,0);//没反应 ???<br>SendMessage(TEMP,WM_CLOSE,0,0);//程序关闭<br>}
 
void __fastcall TForm1::Button2Click(TObject *Sender)<br>{<br>&nbsp; &nbsp; &nbsp; &nbsp; HWND temp;<br>&nbsp; &nbsp; &nbsp; &nbsp; temp=FindWindow(NULL,"Project1");<br>&nbsp; &nbsp; &nbsp; &nbsp; if (temp) SendMessage(temp,WM_KEWDOWN,VK_F3,0);//没反应 ???<br>&nbsp; &nbsp; &nbsp; &nbsp; else ShowMessage("找不到指定的窗口");<br>}<br>//---------------------------------------------------------------------------<br>void __fastcall TForm1::Button3Click(TObject *Sender)<br>{<br>&nbsp; &nbsp; &nbsp; &nbsp; HWND temp;<br>&nbsp; &nbsp; &nbsp; &nbsp; temp=FindWindow(NULL,"Project1");<br>&nbsp; &nbsp; &nbsp; &nbsp; if (temp) SendMessage(temp,WM_CLOSE,0,0);<br>&nbsp; &nbsp; &nbsp; &nbsp; else ShowMessage("找不到指定的窗口");//程序关闭<br><br><br>}
 
我用的是Delphi 5,C++我不很熟。<br>我在From2写:<br>procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;<br>&nbsp; Shift: TShiftState);<br>begin<br>&nbsp; if key=VK_F3 then<br>&nbsp; &nbsp; &nbsp;MessageDlg('fasfasdfasfasfasfa', mtWarning, [mbOK], 0);<br>end;<br>//----------------------------<br>在From1写<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; TEMP:HWND;<br>begin<br>TEMP:=FindWindow(nil,'Form2');<br>if TEMP&lt;&gt; 0 then<br>&nbsp; SendMessage(TEMP,WM_KEYDOWN,VK_F3,0);<br>end;<br>结果From2有反应;不知是不是Delphi与C不一样。<br>还是From2的用的事件是OnKeyPress事件,这个事件key的类型为Char,<br>应用OnKeyDown事件。<br>
 
&gt;&gt;temp=FindWindow(NULL,"Project1");<br>&nbsp; 查到的窗口句柄是Application窗口而不是窗体,当然不会有放应,正确的语句应该是<br>&nbsp;temp=FindWindow(Null,"Form2");<br>
 
把Project1改为被控制的程序窗口标题,测试成功了。<br>balaschen,迟一些再给分你。
 
多人接受答案了。
 
后退
顶部