c#中的GetWindowText返回矩形而不是文本

时间:2012-03-02 21:53:34

标签: c# winapi pinvoke

我有这样的代码:

IntPtr hwndGetValue = new IntPtr(67904);
List<IntPtr> windows = GetChildWindows(hwndGetValue);

int textLength = GetWindowTextLength(windows[0]);
StringBuilder outText = new StringBuilder(textLength + 1);
int a = GetWindowText(windows[0], outText, outText.Capacity);
在windows中我有49个指针。 Windows [0]有我在Spy ++中可以看到的文本,但方法GetWindowText以outText矩形而不是此文本返回。我得到{慬潹瑵潃瑮潲ㅬ}(在视觉和记事本中,这个中国标志显示为矩形。我的编码有问题吗?

由于

1 个答案:

答案 0 :(得分:12)

这些症状表明您正在调用ANSI GetWindowText版本,但将返回值解释为Unicode。

解决方案是确保您调用GetWindowText的Unicode版本。通过在Charset=Charset.Unicode中指定DllImport来执行此操作。

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