急:如何编程实现关闭另外一个应用程序打开的模式窗口(如对话框等),请大虾援手(100分)(100分)

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

zmp

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在delphi程序中能关闭其他应用程序(如word、notepad)打开的<br>模式窗口(如对话框等),我的思路是:先获得模式窗口的句柄,然后<br>向其发送关闭的message 。请教各位大虾:<br>1、思路对吗?或是有其他方法?<br>2、如何获得模式窗口的句柄?<br>3、用SendMessage发送,参数怎么给?<br>&nbsp;最好能给出例子,Thanks a lot.
 
SendMessage(窗口或者应用程序的handle,WM_QUIT(或者其他消息),0,0);<br>后面两个参数可以根据需要自己定义
 
1、思路完全正确。<br>2、用FindWindow。<br>3、帮助里有。<br><br>下面给出一段在 Delphi 中关闭“计算器”程序为例: <br>var <br>HWndCalculator : HWnd; <br>begin <br>// find the exist calculator window <br>HWndCalculator := Winprocs.FindWindow(nil, '计算器'); <br>// close the exist Calculator <br>if HWndCalculator &lt;&gt; 0 then <br>SendMessage(HWndCalculator, WM_CLOSE, 0, 0); <br>end; <br>
 
wjiachun 、 xueminliu 两位高人:<br>当我不知道模式窗口(如对话框等)的class or 标题,如何获得模式窗口的句柄?<br>findwindow函数似乎只能获得应用程序的主窗口的句柄,而由它打开的对话框窗口<br>不知怎样获得handle?务必赐教。<br>
 
EnumChildWindows 枚举顶级窗口的子窗口。找到指定的再发消息。
 
mikedeakins:<br>能否举个例子说明EnumChildWindows函数的用法(参数怎么给),我没用过<br>EnumChildWindows和EnumChildProc函数。
 
BOOL EnumChildWindows(<br>&nbsp; HWND hWndParent, &nbsp; &nbsp; &nbsp; &nbsp; // 已经获得的父窗口句柄。<br>&nbsp; WNDENUMPROC lpEnumFunc, &nbsp;// 回调函数地址。<br>&nbsp; LPARAM lParam &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 自定义值<br>);<br><br>BOOL CALLBACK EnumChildProc(<br>&nbsp; HWND hwnd, &nbsp; &nbsp; &nbsp;// 子窗口句柄。<br>&nbsp; LPARAM lParam &nbsp; // 前面的自定义值。<br>);<br><br>加入已经获得了一个主窗口:hWnd,编写代码:<br>BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)<br>{<br>&nbsp; &nbsp; //对窗口做出判断的代码<br>&nbsp; &nbsp; return TRUE; //继续枚举,FALSE 停止.<br>}<br>EnumChildWindows(hWnd, EnumChildProc, 0);<br>就可以了。
 
问题已解决,谢谢mikedeakins 、wjiachun、xueminliu三位网友给我的大力帮助,<br>分数有限,只好平分了。<br>
 
多人接受答案了。
 
后退
顶部