是否可以根据PowerShell中的子窗口句柄获取进程ID?
例如,这个脚本寻找具有titile"警告"的窗口句柄:
$sig = @"
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(IntPtr sClassName, String sAppName);
[DllImport("kernel32.dll")]
public static extern uint GetLastError();
"@
$fw = Add-Type -Namespace Win32 -Name Funcs -MemberDefinition $sig -PassThru
$wname='Warning'
$find_window = $fw::FindWindow([IntPtr]::Zero, $wname )
Write-Host $find_window
如何在任务管理器中显示:
Program.exe
|
\Warning
现在我需要确定 - 这个警告窗口有什么PID。我知道可以在C#中实现(我完全没有使用它),但这应该只在powershell上完成。
答案 0 :(得分:3)
您正在寻找GetWindowThreadProcessId
。根据这个answer,您可以使用此p / invoke从PowerShell调用它:
onResume()
您在第一个参数中提供了一个窗口句柄。进程和线程ID分别在第二个参数和返回值中返回。