如何在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。
答案 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
来自哪里,但您需要在您定义的类中将它们称为静态方法。
我的近距离投票中的链接中有更完整的示例。
帮助链接(如果有):
Add-Type
(在模块Microsoft.PowerShell.Utility中)New-Object
(在模块Microsoft.PowerShell.Utility中)Get-Process
(在模块Microsoft.PowerShell.Management中)ForEach-Object
答案 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)