【问题标题】:Get parent process id by Window Handle通过窗口句柄获取父进程id
【发布时间】:2015-10-27 16:57:52
【问题描述】:

是否可以根据它在 powershell 中的子窗口句柄获取进程 ID?

例如,此脚本查找标题为“警告”的窗口句柄:

$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 上完成。

【问题讨论】:

    标签: windows powershell winapi


    【解决方案1】:

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

    [DllImport("User32.dll")]
    public static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2012-05-06
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多