替代通过PowerShell安装exe时的延迟时间?

时间:2018-06-13 06:34:15

标签: powershell sendkeys powershell-v5.0

我有一个软件exe,我试图通过PowerShell安装。它工作正常。我正在使用SendKeys来浏览安装GUI。我在两个SendKeys命令之间给出了延迟,因为软件在两个步骤之间需要一些时间,但安装时间因计算机而异。

我的问题是如何绕过SendKeys中的时间延迟依赖?我试过AppActivate,但它对我毫无用处。有延迟的替代方案吗?

1 个答案:

答案 0 :(得分:3)

不确定

我已将Nitesh's C# function转换为Powershell脚本

$signature_user32_GetForegroundWindow = @"
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
"@

$signature_user32_GetWindowText = @"
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
"@

$foo = `
    Add-Type -MemberDefinition $signature_user32_GetForegroundWindow `
        -Name 'user32_GetForegroundWindow' `
        -Namespace 'Win32' `
        -PassThru

$bar = `
    Add-Type -MemberDefinition $signature_user32_GetWindowText `
        -Name 'user32_GetWindowText' `
        -Namespace 'Win32' `
        -Using System.Text `
        -PassThru

[int]$nChars = 256
[System.IntPtr] $handle = New-object 'System.IntPtr'
[System.Text.StringBuilder] $Buff = New-Object 'System.Text.StringBuilder' `
    -ArgumentList $nChars

$handle = $foo::GetForegroundWindow()
$title_character_count = $bar::GetWindowText($handle, $Buff, $nChars)
If ($title_character_count -gt 0) { Write-Output $Buff.ToString() }

这里有很多事情要发生。 Lemme解释了我所做的一些事情。

  1. 我创建了两个方法签名(here-string中的位);我们正在调用的每个功能都有一个。
  2. 我使用这些签名来创建相应的类型。同样,每个方法一个。
  3. 对于GetWindowType(将字符串传递回字符串并需要对System.Text的引用),我在System.Text参数中传入-Using命名空间。
  4. 在幕后,PowerShell添加了对SystemSystem.Runtime.InteropServices的引用,因此无需担心这些内容。
  5. 我创建了字符串大小($nChars),窗口指针($handle)和窗口标题缓冲区($Buff
  6. 我通过类型指针调用函数:$foo...$bar...
  7. 这是我运行所有这些时得到的......

    enter image description here

    每当我必须调用Windows API(这不是我的事情)时,我会参考以下两篇文章:

    我希望这有帮助!