通过Window Handle获取父进程ID

时间:2015-10-27 08:55:27

标签: windows powershell winapi

是否可以根据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上完成。

1 个答案:

答案 0 :(得分:3)

您正在寻找GetWindowThreadProcessId。根据这个answer,您可以使用此p / invoke从PowerShell调用它:

onResume()

您在第一个参数中提供了一个窗口句柄。进程和线程ID分别在第二个参数和返回值中返回。