[已解决]请问如何做到 除了当前程序窗口,关闭目前所有窗口?
本帖最后由 elexy 于 2010-7-9 11:51 编辑指定的窗口用winclose就能搞定,现在想在程序运行前,将当前系统里的其他窗口全部关掉,不知道这段代码如何写才能高效解决。
______________________________________________________
谢谢 3mile,不好意思,可能是我描述不清楚,您的这段代码太猛了,运行后,连WINDOWS的关机重启的菜单都弹出来了,效果就像是关闭了 explorer.exe一样,屏幕整个闪了一下,右下角的音量、网络等图标都重新加载了一遍。 有没有温柔一点的?其实只需要将 任务管理器 应用程序 列表里的任务 winkill 掉即可。您那样太吓人了 顶上去求解... 帮顶,,等待高手回答。。 我来帮忙顶 $var = WinList()
For $i = 1 to $var
; 只显示带有标题的可见窗口
If $var[$i] <> "" AND IsVisible($var[$i]) Then
$state=WinGetState($var[$i])
If $state<>47 Then WinKill($var[$i])
EndIf
Next
Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf
EndFunc
WinKill 也可以考虑先使用 WinClose ,以提示用户关闭前保存数据 谢谢 3mile,不好意思,可能是我描述不清楚,您的这段代码太猛了,运行后,连WINDOWS的关机重启的菜单都弹出来了,效果就像是关闭了 explorer.exe一样,屏幕整个闪了一下,右下角的音量、网络等图标都重新加载了一遍。 有没有温柔一点的?其实只需要将 任务管理器 应用程序 列表里的任务 winkill 掉即可。您那样太吓人了
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 587, 395, 192, 114)
$ListView1 = GUICtrlCreateListView("窗口状态|窗口标题", 48, 32, 497, 329,$LVS_NOLABELWRAP)
GUISetState(@SW_SHOW)
win()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func win()
$var = WinList()
For $i = 1 to $var
; 仅显示带标题的可见窗口
If $var[$i] <> "" AND IsVisible($var[$i]) Then
if $var[$i] = $Form1 or $var[$i] = "Program Manager" then
GuiCtrlCreateListViewItem("未关闭" & "|" & $var[$i],$ListView1)
else
WinKill($var[$i])
GuiCtrlCreateListViewItem("已关闭" & "|" & $var[$i],$ListView1)
endif
EndIf
Next
EndFunc
Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf
EndFunc
本帖最后由 jhun 于 2010-7-9 11:53 编辑
$WinList = WinList()
For $i = 1 to $WinList
If $WinList[$i] <> "" AND IsVisible($WinList[$i]) Then
If $WinList[$i]<>"Program Manager" Then WinClose ($WinList[$i])
EndIf
Next
Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 )And WinGetText ($handle) And WinActive ($handle)=0 Then
Return 1
Else
Return 0
EndIf
EndFunc 感谢 xsjtxy 、jhun
8楼的带GUI
9楼的精简高效
都能满足需求。 本帖最后由 jhun 于 2010-7-9 11:59 编辑
开始忘了需要保留当前的窗口这个要求了,重新修改过了,另外就是没有文本的窗口会忽略 未加思索测试你们的代码,把我几个ie下载框给干掉了,速度老慢,下了半天的,损失惨重…… 还有一些打开的文件夹也没了……
下次测试前还是先看看代码的好~
LZ的问题我想还是先列表显示所有非系统进程的*.exe进程名,再进行有选择的关闭,这样会更人性化一点。 未加思索测试你们的代码,把我几个ie下载框给干掉了,速度老慢,下了半天的,损失惨重…… 还有一些打开的文 ...
afan 发表于 2010-7-9 12:04 http://www.autoitx.com/images/common/back.gif
好吧,我错了,为了赎罪,我做了这个
http://www.autoitx.com/forum.php?mod=viewthread&tid=16788&extra= 回复 12# afan
是啊,用这个函数,应先建立一个排除关闭的进程列表,要不然,什么进程统统kill一次,很容易出问题。
页:
[1]