我有一个HTA在执行备份时被最小化。备份完成后,我想恢复HTA,但我遇到了麻烦。
我尝试了一些事情(下面),但没有成功。有人能指出我的最终解决方案吗?
首先我尝试简单地激活HTA,但这失败了。我不是专家,但我的理解是,这样做应该模仿鼠标点击任务栏中的HTA,从而恢复它 -
Sub RestoreBackupHTA()
Shell.AppActivate "Backup"
End Sub
接下来我尝试激活HTA然后发送密钥以“恢复”活动窗口,但这也失败了 -
Sub RestoreBackupHTA()
Shell.AppActivate "Backup"
Shell.SendKeys "% r"
End Sub
最后我尝试先激活HTA,然后在短暂超时后发送密钥“恢复”活动窗口(我发现有几个帖子暗示这有助于确保HTA在发送密钥之前完全处于活动状态恢复它),但又失败了 -
Sub RestoreBackupHTA()
Shell.AppActivate "Backup"
Call window.setTimeout("RestoreBackupHTAAfterWait", 500, "VBScript")
End Sub
Sub RestoreBackupHTAAfterWait()
'** Create a tempory Shell object (required as the global Shell object is out of scope for some reason *'
Dim tmpShell
Set tmpShell = CreateObject("Wscript.Shell")
tmpShell.SendKeys "% r" ' Restore the HTA
Set tmpShell = Nothing ' Destroy the tmpShell object
End Sub
备注 -
<HTA:APPLICATION ID="Backup" ... />, and so "Backup" is displayed in the title bar when it is running (and as the title in the task manager). This is why I'm using it as the
标题parameter for
Shell.AppActivate`,根据this MSDN page应该是正确的。Shell
是全局声明和设置的,因此上面示例中的RestoreBackupHTA
过程可以使用它。答案 0 :(得分:2)
嗯。它似乎对我有用。我的窗口标题显示了hta的完整路径,所以我只是尝试了以下(使用setTimeout
后):
With CreateObject("WScript.Shell")
.AppActivate("test.hta")
.SendKeys "% r"
End With
并没有任何问题。
但这是另一种方式。您可以使用nircmd
(随时可以随时使用)。
CreateObject("WScript.Shell").Run "nircmd.exe win normal ititle Backup"
这将使用&#34; Backup&#34;恢复任何窗口。在标题中。如果需要更好的控制,可以过滤多种方式(标题,类,PID等)。
答案 1 :(得分:0)
因为您使用的是HTA,所以可以使用SINGLEINSTANCE
参数
<HTA:APPLICATION ID="RestoreMe" SINGLEINSTANCE="yes">
这样当您重新启动HTA应用程序时,它将欺骗窗口以恢复现有的HTA应用程序:
Set objShell = CreateObject("WScript.Shell")
objShell.run location.href
为了说明这一点,我创建了一个模拟HTA应用程序,您必须在启动它的前5秒内将其最小化。 5秒后,它将自行恢复:
<!DOCTYPE html>
<HEAD>
<TITLE>Restore Me</TITLE>
<HTA:APPLICATION ID="RestoreMe" SINGLEINSTANCE="yes">
<SCRIPT language="VBScript">
Sub RestoreMe
Set objShell = CreateObject("WScript.Shell")
objShell.run location.href
End Sub
Call window.setTimeout("RestoreMe", 5000)
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>