Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#获取窗口';希伯来语中的按句柄的标题返回问号_C#_Titlebar - Fatal编程技术网

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

C#获取窗口';希伯来语中的按句柄的标题返回问号,c#,titlebar,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); 如果标题有希伯来文字符,则用问号代替。 我猜这个问题与经济或其他有关。。。如何解

我使用以下命令:通过其句柄获取窗口标题:

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

StringBuilder title = new StringBuilder(256);
GetWindowText(hWnd, title, 256);
如果标题有希伯来文字符,则用问号代替。
我猜这个问题与经济或其他有关。。。如何解决它?

使用以下方法:

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

您的问题包含一个小错误,可能不会经常发生。您假设标题的最大长度为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();
}

什么版本的Windows?Windows 8 Pro 64位,没关系-在所有版本中都能正常工作(我想,如果我在Windows和Windows xp中进行测试的话),这很快也很容易。谢谢D对于me长度始终等于(实际长度-1)。不知道为什么,但是简单的
var length=GetWindowTextLength(hwnd)+1修复了我的问题。@alexWyler我偶然发现了同样的问题,但忘记了更新我的答案。我假设GETWOWDOWITE返回没有C和C++中使用的终止符0的长度,以标记字符串的结尾。但这只是猜测