elexy 发表于 2010-7-8 22:34:18

[已解决]请问如何做到 除了当前程序窗口,关闭目前所有窗口?

本帖最后由 elexy 于 2010-7-9 11:51 编辑

指定的窗口用winclose就能搞定,现在想在程序运行前,将当前系统里的其他窗口全部关掉,不知道这段代码如何写才能高效解决。



______________________________________________________
谢谢 3mile,不好意思,可能是我描述不清楚,您的这段代码太猛了,运行后,连WINDOWS的关机重启的菜单都弹出来了,效果就像是关闭了 explorer.exe一样,屏幕整个闪了一下,右下角的音量、网络等图标都重新加载了一遍。   有没有温柔一点的?其实只需要将 任务管理器 应用程序 列表里的任务 winkill 掉即可。您那样太吓人了

elexy 发表于 2010-7-9 07:44:52

顶上去求解...

zcx880517 发表于 2010-7-9 08:10:59

帮顶,,等待高手回答。。

ransally 发表于 2010-7-9 09:14:28

我来帮忙顶

3mile 发表于 2010-7-9 09:25:02

$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

afan 发表于 2010-7-9 09:33:48

WinKill 也可以考虑先使用 WinClose ,以提示用户关闭前保存数据

elexy 发表于 2010-7-9 10:44:50

谢谢 3mile,不好意思,可能是我描述不清楚,您的这段代码太猛了,运行后,连WINDOWS的关机重启的菜单都弹出来了,效果就像是关闭了 explorer.exe一样,屏幕整个闪了一下,右下角的音量、网络等图标都重新加载了一遍。   有没有温柔一点的?其实只需要将 任务管理器 应用程序 列表里的任务 winkill 掉即可。您那样太吓人了

xsjtxy 发表于 2010-7-9 11:22:34


#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:43:15

本帖最后由 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

elexy 发表于 2010-7-9 11:50:23

感谢 xsjtxy 、jhun   
8楼的带GUI
9楼的精简高效
都能满足需求。

jhun 发表于 2010-7-9 11:54:27

本帖最后由 jhun 于 2010-7-9 11:59 编辑

开始忘了需要保留当前的窗口这个要求了,重新修改过了,另外就是没有文本的窗口会忽略

afan 发表于 2010-7-9 12:04:18

未加思索测试你们的代码,把我几个ie下载框给干掉了,速度老慢,下了半天的,损失惨重…… 还有一些打开的文件夹也没了……
下次测试前还是先看看代码的好~

LZ的问题我想还是先列表显示所有非系统进程的*.exe进程名,再进行有选择的关闭,这样会更人性化一点。

jhun 发表于 2010-7-9 12:46:40

未加思索测试你们的代码,把我几个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=

C.L 发表于 2010-7-9 12:46:46

回复 12# afan

是啊,用这个函数,应先建立一个排除关闭的进程列表,要不然,什么进程统统kill一次,很容易出问题。
页: [1]
查看完整版本: [已解决]请问如何做到 除了当前程序窗口,关闭目前所有窗口?