能否判断一个应用程序当前是不是有弹出窗口 ( 积分: 200 )

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

zxpeng

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在一个应用程序中判断另一个应用程序当前状态下是不是有弹出窗口,即:<br><br>两个程序 A.exe 和 B.exe,我要在 B 里检测 A 的当前状态,是不是有ShowModal窗体、ShowMessage 对话框之类的弹出窗口。换句话说,就是我要判断A的主窗体当前是不是处于不可用状态。<br><br>不知道能否做到,请大家指教^_^
 
我需要在一个应用程序中判断另一个应用程序当前状态下是不是有弹出窗口,即:<br><br>两个程序 A.exe 和 B.exe,我要在 B 里检测 A 的当前状态,是不是有ShowModal窗体、ShowMessage 对话框之类的弹出窗口。换句话说,就是我要判断A的主窗体当前是不是处于不可用状态。<br><br>不知道能否做到,请大家指教^_^
 
用hook,<br> &nbsp; 查一查api函数就可以了。<br>注意需要得到窗体的句并
 
不好意思,能告诉我具体的API吗?<br>A主窗体的句柄我能得到:)
 
The GetTopWindow function examines the Z order of the child windows associated with the specified parent window and retrieves the handle of the child window at the top of the Z order. <br><br>HWND GetTopWindow(<br><br> &nbsp; &nbsp;HWND hWnd // handle of parent window<br> &nbsp; ); <br> <br><br>Parameters<br><br>hWnd<br><br>Identifies the parent window whose child windows are to be examined. If this parameter is NULL, the function returns a handle of the window at the top of the Z order. <br><br> <br><br>Return Values<br><br>If the function succeeds, the return value is the handle of the child window at the top of the Z order. If the specified window has no child windows, the return value is NULL. To get extended error information, use the GetLastError function.
 
怪了,为什么不管有没有弹出窗口,返回值都不是 NULL,而且都是同样的值,怎么回事?
 
请大家帮帮忙
 
请用IsWindowEnabled
 
procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br> &nbsp;str ,str1,str2: string;<br> &nbsp;hwndclose1,hwndclose,hwndclose2,hwndclose3,hwndclose4 : Hwnd;<br>begin<br> &nbsp;str1 := '不安全的设备删除';<br> &nbsp;hwndclose2 := FindWindow(nil,PChar(str1));<br> &nbsp;if hwndclose2 &amp;lt;&amp;gt; 0 then<br> &nbsp; &nbsp;SendMessage(hwndclose2,wm_close,0,0);<br> &nbsp;str2 := 'NetworkController'; &nbsp;// str2是可执行文件的文件名<br> &nbsp;hwndclose3 := FindWindow(nil,Pchar(str2));<br> &nbsp;hwndclose4 := GetLastActivePopup(hwndclose3);<br> &nbsp;if hwndClose3 = hwndclose4 then<br> &nbsp; &nbsp;if hwndclose4 &amp;lt;&amp;gt; 0 then<br> &nbsp; &nbsp; &nbsp;SendMessage(hwndclose4,wm_close,0,0);<br><br> &nbsp;str := 'DFJK'; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 杀DFJK 子窗体<br> &nbsp;hwndclose1 := FindWindow(nil,Pchar(str));<br> &nbsp;hwndclose := GetLastActivePopup(hwndclose1);<br> &nbsp;if hwndClose &amp;lt;&amp;gt; hwndclose1 then exit;<br> &nbsp;if hwndclose &amp;lt;&amp;gt; 0 then<br> &nbsp; &nbsp;SendMessage(hwndclose,wm_close,0,0);<br>end;
 
一般还是用GetLastActivePopup
 
后退
顶部