我有以下两行代码,它将把相应的窗口带到前面,这将帮助我自动截取屏幕截图。但问题是,有时,它就像一种魅力,有时则不然。当我说它不起作用时,我并不是说它因任何错误消息或警告而失败。没发生什么事。只是代码运行,窗口不会出现在前面。
我想知道此代码段是否有任何隐藏的先决条件才能成功运行?在我运行此代码以预先显示该窗口之前,有问题的窗口是否应该处于任何状态?
这是代码:
[void][System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::AppActivate("R")
Run Code Online (Sandbox Code Playgroud)
我之前在使用 Title-overload 时遇到过麻烦。此外,窗口标题的单个更改将中断AppActivate(string Title)。
使用ProcessID-overload效果更好吗?前任。
$excelpid = (Get-Process excel).ID
[Microsoft.VisualBasic.Interaction]::AppActivate($excelpid)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 COM 应用程序,则需要根据 获取流程MainWindowHandle,如下所示:
[void][System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
#start excel
$excel = New-Object -ComObject excel.application
#make excel visible
$excel.Visible = $true
#get pid from windows handle
$excelpid = (Get-Process | Where-Object { $_.MainWindowHandle -eq $excel.Hwnd }).Id
#Activate window
[Microsoft.VisualBasic.Interaction]::AppActivate($excelpid)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9182 次 |
| 最近记录: |