GetWindowText в c # возвращает прямоугольники вместо текста - PullRequest
3 голосов
/ 03 марта 2012

У меня есть такой код:

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);

в окнах у меня 49 указателей. В Windows [0] есть текст, который я вижу в Spy ++, но метод GetWindowText возвращает этот текст вместо прямоугольников outText. Я получаю {慬 潹 瑵 潃 瑮 潲 ㅬ} (в Visual и блокноте эти китайские знаки отображаются в виде прямоугольников. У меня что-то не так с кодировкой?

Спасибо

1 Ответ

12 голосов
/ 03 марта 2012

Эти признаки указывают, что вы вызываете ANSI-версию GetWindowText, но интерпретируете возвращаемое значение как Unicode.

Решение заключается в том, чтобы вместо этого вызывать Unicode-версию GetWindowText. Сделайте это, указав Charset=Charset.Unicode в вашем DllImport.

[DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString,
    int nMaxCount);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...