gpt4 book ai didi

windows - 使用适用于 Windows 的 VBScript 刷新 Windows 任务栏?

转载 作者:可可西里 更新时间:2023-11-01 10:10:00 27 4
gpt4 key购买 nike

有一个VBScript (.vbs) 脚本,是我公司的某人制作的。它打开和关闭某个应用程序,这个应用程序有一个托盘图标,每次它关闭(通过控制台杀死)应用程序时,托盘图标仍然存在。因此,在运行脚本一两天后,任务栏上会保留数百万个应用程序图标。

Windows 的 VBScript 中是否有刷新任务栏并删除这些图标的指令?

这是脚本:

*****************************************************************************************
' Progam Name: CheckConnection.vbs
' Program Purpose: This script check for an internec connection, the program pings to some domains,
' wait some seconds (5 seconds) before the next try, if a domain is found, reset all counters,
' and wait secondsBeforeNextCheck seconds before next check
' If the programs raise nMaxRetriesBeforeStartProgram then kill the program that
' manage the connection and start it again.
' Usage: This Script must be placed in ONE OF THE FOLLOWING PATHS
' 1) Start --> All Programs --> Start Up
' 2) HKLM\Software\Microsoft\Windows\CurrentVersion\Run
' 3)HKCU\Software\Microsoft\Windows\CurrentVersion\Run
' 4) Or you can create a task through:
' Start --> All Programs --> Accessories-->System Tools --> Scheduled Tasks--> Add Scheduled Task
' --> Follow the Wizard'
' 5) The program VZAccess Manager.exe must be configured to autoconnect through
' Tools --> Preferences --> WWan --> Connect Options --> Automatically Connect (this must be checked)
' 6) Also to autorefresh the ip the vzaccess manager.exe must be configured with an script when c onnect.
' Author: Benito Lopez
' Date: 06152009
' Revision 1.1 : (11272009) -f was added to force the program VZAccess manager.exe to terminate.
' *****************************************************************************************
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim objfso, objfile
Set objfso = CreateObject("Scripting.FileSystemObject")
Dim secondsBeforeNextCheck
Dim strDomains(6)
Dim nMaxRetriesBeforeStartProgram
Dim nCounterRetries

Const ForReading=1, ForWriting=2, ForAppending=8

strDomains (0) = "www.google.com"
strDomains (1) = "www.yahoo.com"
strDomains (2) = "www.chilpak.com"
strDomains (3) = "www.microsoft.com"
strDomains (4) = "www.flutec.com"
strDomains (5) = "www.flutec.com.mx"

strLogFilename = "c:\checkconnectionlog.log"
filepinger = "c:\pingresult.log"
nMaxRetriesBeforeStartProgram =5
secondsBeforeNextCheck = 60000
secondsBeforeNextTry = 15000
secondsBeforeAppStart = 2000
secondsAfterAppStart = 60000

Call Main()

Sub Main()
set objfile = objfso.OpenTextFile(strLogFilename, 8,True)

WHILE 1
nCounterRetries = 0
FOR i = 0 TO 5 STEP 1
'Check the connection status if zero, means
'There is no internet connection or the domain is down
If not IsThereInternetConnection(strDomains(i)) THEN
'Let suppose the domain is down, so we must try with the next domain
nCounterRetries = nCounterRetries + 1
IF nCounterRetries >= nMaxRetriesBeforeStartProgram THEN
'Close the program
targetprogram = "taskkill /im " & chr(34) & "VZAccess Manager.exe" & chr(34) & " /f"
WshShell.Exec(targetprogram)
'Wait Applications Events 2 seconds
Wscript.Sleep(secondsBeforeAppStart)
'Start the program
targetprogram = chr(34) & "C:\Program Files\Verizon Wireless\VZAccess Manager\VZAccess Manager.exe" & chr(34) & " -m"
WshShell.Exec(targetprogram)
'Wait for the applications loads completely 1 seconds
WScript.Sleep(secondsAfterAppStart)
'Reset the counters
nCounterRetries = 0
Wscript.Sleep secondsBeforeNextCheck
END IF
'But we must wait some seconds before the next try
Wscript.Sleep secondsBeforeNextTry

ELSE
'If we get a reply from the current domain,
'Everything is OK, The only we need to do is Wait until the next time to check
'Reset Counter
nCounterRetries = 0
WScript.Sleep secondsBeforeNextCheck
END IF
NEXT
Wend
End Sub

FUNCTION IsThereInternetConnection(strDomain)
on error resume next
'Create some cons values
'Make the ping
Dim strRun
strRun = "%comspec% /c ping -n 1 " & strDomain & " > " & filepinger
Dim objwss
Set objwss = CreateObject("WScript.Shell")
'Hide the windows and wait the app to terminate
WriteLog "Pinging " & strDomain & " ..."
objwss.Run strRun,0,True
Set objwss = Nothing

''Read the ping
Dim strotf
Dim fso
Dim otf
strotf=""
set fso = CreateObject("Scripting.FileSystemObject")
set otf = fso.OpenTextFile(filepinger,ForReading)
strotf = otf.ReadAll
fso.DeleteFile filepinger
set fso = nothing
set otf = nothing

'Test the ping
IF InStr(strotf,"Reply from")>0 THEN
IsThereInternetConnection = TRUE
ELSE
IsThereInternetConnection = FALSE
END IF
WriteLog "Pinging Result " & IsThereInternetConnection & " Done."
End FUNCTION

Sub WriteLog(strLog)

on error resume next

Set objfile = objfso.GetFolder(strLogFilename)
if objfile.size > 50000 then
objfso.Close
objfso.DeleteFile strLogFilename
set objfile = objfso.OpenTextFile(strLogFilename, 8,True)
end if
'Add some useful information
strData = Now() & " - "
objfile.WriteLine strData & strLog
End Sub

最佳答案

将鼠标指针移到系统托盘中的孤立图标后,它们就会消失。我想这可以通过将 WM_MOUSEMOVE 消息发送到系统托盘窗口以编程方式完成,但 VBScript 无法访问 Windows API。

我建议您使用一些外部实用程序来刷新系统托盘并从您的脚本中运行它。例如,有 TrayIconBuster CodeProject 上的实用程序,它可以每 5 秒清理一次托盘。 (但它需要 .NET Framework。)或者您可以自己编写一个类似的工具。

要从 VBScript 代码运行应用程序,您可以使用 WshShell.RunWshShell.Exec方法。您可以在脚本中找到示例。

关于windows - 使用适用于 Windows 的 VBScript 刷新 Windows 任务栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com