C#希伯来语中的句柄获取窗口标题返回问号

Ron*_*Ron 3 c# titlebar

我正在使用它:通过其句柄获取窗口的标题:

[DllImport("user32.dll")] private static extern int GetWindowText(int hWnd, StringBuilder title, int size);

StringBuilder title = new StringBuilder(256);
GetWindowText(hWnd, title, 256);
Run Code Online (Sandbox Code Playgroud)

如果标题有希伯来字符,则用问号代替它们.
我想问题与经济或某事有关......我该如何解决?

0xB*_*00D 10

您的问题包含一个小错误,这可能不会经常发生。您假设标题的最大长度为 256 个字符,这对于大多数情况可能已经足够了。但正如这篇文章所示,长度可能是 100K 个字符,也许更多。所以我会使用另一个辅助函数:GetWindowTextLength

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetWindowTextLength(IntPtr hWnd);

public static string GetWindowTitle(IntPtr hWnd)
{
    var length = GetWindowTextLength(hWnd) + 1;
    var title = new StringBuilder(length);
    GetWindowText(hWnd, title, length);
    return title.ToString();
}
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,长度总是等于(实际长度-1)。不知道为什么,但简单的 `var length = GetWindowTextLength(hwnd) + 1;` 解决了我的问题。 (5认同)

Ham*_*yan 5

用这个:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
Run Code Online (Sandbox Code Playgroud)