如何在PowerShell中使用GetWindowText API函数?

时间:2016-11-01 05:31:16

标签: powershell powershell-v2.0 powershell-v3.0 powershell-v4.0

如何在powershell中使用GetWindowText API函数?

我试过这种方式:

    Add-Type @"
  using System;
  using System.Runtime.InteropServices;
  public class UserWindowss {
    [DllImport("user32.dll")]
    public static extern IntPtr GetWindowText(IntPtr hWnd, System.Text.StringBuilder text, int count);
}
"@

我按照以下方式制作字符串构建器:

$stringbuilder = New-Object System.Text.StringBuilder
$stringbuilder.Capacity =256

我使用的功能如下:

$WindowTitless = $ImportDll::GetWindowText($TopWindow, $stringbuilder, 256)

但我收到了错误:

ERROR: test: Failed to get active Window details. More Info: Exception calling "GetWindowText" with "3" argument(s): "Unable to find an entry point named
ERROR: 'GetWindowText' in DLL 'user32.dll'."
有人可以帮我使用这个功能吗?如果你可以请 rite code 。 TNX。

2 个答案:

答案 0 :(得分:6)

粗略地说:

Add-Type @"
  using System;
  using System.Runtime.InteropServices;
  public class UserWindows {
    [DllImport("user32.dll")]
    public static extern IntPtr GetWindowText(IntPtr hWnd, System.Text.StringBuilder text, int count);
}
"@

$stringbuilder = New-Object System.Text.StringBuilder 256

Get-Process | ForEach-Object {

    $count = [UserWindows]::GetWindowText($_.MainWindowHandle, $stringbuilder, 256)

    if (0 -lt $count) {
        "$($_.ProcessName) $($stringbuilder.ToString())"
    }

}

您没有在代码中说明$ImportDll来自哪里,但您需要在您定义的类中将它们称为静态方法。

我的近距离投票中的链接中有更完整的示例。

帮助链接(如果有):

答案 1 :(得分:0)

您可以使用c#代码声明类并在其中编写函数,然后在程序中使用它。

    Add-Type @"
  using System;
  using System.Runtime.InteropServices;
  public class UserWindowss {
    [DllImport("user32.dll")]
    public static extern IntPtr GetWindowText(IntPtr hWnd, System.Text.StringBuilder text, int count);
}
"@
[UserWindowss]::GetWindowText(hwnd , stringbuilder , count)