使用隐藏的powershell将窗口推到前面

时间:2017-06-02 18:37:10

标签: javascript windows powershell vbscript hta

我有一个计划任务启动隐藏窗口PowerShell脚本。脚本执行一些操作,启动HTA并等待HTA关闭:

Start-Process $HTApath -Wait

然后PoSh脚本做了一些其他的事情。在许多机器(Win7和10)上都可以很好地工作,但是其他(相当库存的)系统,HTA通常不会出现在前面,而且几小时/几天都看不到。这是一个问题。

我添加了javascript:

<script type="text/javascript">
[...]
window.focus();

AND vbscript:

<script language='vbscript'>
Sub window_toFront
  Set Shell = CreateObject("WScript.Shell")
  Shell.AppActivate("UAlbany Security Updates Policy Reboot Notice")
End Sub
window_toFront
在HTA中,我已经在定时循环中重复尝试。在最初窗口到达前面的机器上,循环做了一个非常好的工作,迫使窗口返回到前面,但是在忽略该指令的机器上,重复尝试什么都不做。这些机器正在运行HTA中的其他VBS / JS脚本; 不能正常工作的push-to-front命令。

我也试过this "evil" method。它也无法在某些机器上运行(并使VM崩溃)。

我已经尝试过测试可以在HTA外部使用的PoSh选项(即替换预定脚本中的Start-Process调用):

Add-Type @"
  using System;
  using System.Runtime.InteropServices;
  public class Tricks {
     [DllImport("user32.dll")]
     [return: MarshalAs(UnmanagedType.Bool)]
     public static extern bool SetForegroundWindow(IntPtr hWnd);
  }
"@

$PID = [diagnostics.process]::start("HTApath").id
start-sleep -Seconds 1
$Handle = (Get-Process -Id $PID).MainWindowHandle

While ((Get-Process -Id $PID -ErrorAction SilentlyContinue) -ne $null) {
   Start-Sleep -Seconds 1
   [void] [Tricks]::SetForegroundWindow($Handle)
}

但它似乎只有在PoSh窗口处于活动状态时才会起作用(这个过程不会发生)。

有没有人有任何建议让这个工作?我特别感兴趣的是理解为什么内部HTA方法如此受欢迎;是否存在可能导致此问题的Windows / IE设置?

谢谢!

0 个答案:

没有答案