![](/img/trans.png)
[英]Set window title when running "start powershell" in powershell not working?
[英]Powershell - Get current Active Window title and set it as a string
我想获取我的活动窗口的 processName 和 MainWindowTitle,然后将其设置为字符串变量,以便我以后可以使用它,例如在文件命名中。
我的代码确实有效,但是
(1) 无法显示$screenTitle
(2) 有一些 MainWindowTitle 为空的实例,但即使我删除了 $processNaming 也不会继续执行 If 条件。
我在这里错过了什么?
$code = @'
[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
public static extern Int32 GetWindowThreadProcessId(IntPtr hWnd,out
Int32 lpdwProcessId);
'@
Add-Type $code -Name Utils -Namespace Win32
$myPid = [IntPtr]::Zero;
Do{
$hwnd = [Win32.Utils]::GetForegroundWindow()
$null = [Win32.Utils]::GetWindowThreadProcessId($hwnd, [ref] $myPid)
$processNaming = Get-Process | Where-Object ID -eq $myPid | Select-Object processName
#$processNaming
$screenTitle = Get-Process | Where-Object ID -eq $myPid | Select-Object MainWindowTitle
If($screenTitle -ne $Null){
$processNaming
$screenTitle
}
Else {
Write-Host "No Screen Title"
}
Start-Sleep -Milliseconds 3000
}While($True)
您的代码未显示$screenTitle
的问题是由于 PowerShell 如何在控制台中显示对象,目前您正在尝试输出2 个具有不同属性ProcessName
和MainWindowTitle
的对象,但只显示一个(第一个)。 请参阅这些答案以了解发生这些情况的原因:
为了克服这个问题,您应该做的是返回一个具有 2 个属性的对象,这样您应该会看到它们正确显示。
$myPid = [IntPtr]::Zero;
Do {
$hwnd = [Win32.Utils]::GetForegroundWindow()
$null = [Win32.Utils]::GetWindowThreadProcessId($hwnd, [ref] $myPid)
$process = Get-Process -Id $myPid
If($process.MainWindowTitle) {
$process | Select-Object ProcessName, MainWindowTitle
}
else {
Write-Host ("No Screen Title for '{0}'" -f $process.ProcessName)
}
Start-Sleep -Seconds 1
} While($True)
如果你想从你的循环中输出字符串而不是一个对象,你可以这样做:
'ProcessName: {0} - MainWindowTitle: {1}' -f $process.ProcessName, $process.MainWindowTitle
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.