我有一个软件exe,我试图通过PowerShell安装。它工作正常。我正在使用SendKeys
来浏览安装GUI。我在两个SendKeys
命令之间给出了延迟,因为软件在两个步骤之间需要一些时间,但安装时间因计算机而异。
我的问题是如何绕过SendKeys
中的时间延迟依赖?我试过AppActivate
,但它对我毫无用处。有延迟的替代方案吗?
答案 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解释了我所做的一些事情。
System.Text
参数中传入-Using
命名空间。System
和System.Runtime.InteropServices
的引用,因此无需担心这些内容。$nChars
),窗口指针($handle
)和窗口标题缓冲区($Buff
)$foo...
和$bar...
这是我运行所有这些时得到的......
每当我必须调用Windows API(这不是我的事情)时,我会参考以下两篇文章:
我希望这有帮助!