FindWindowA не находит название окна на русском языке

272
26 июля 2017, 22:52

Если str английская, вроде все нормально. А вот на русском не находит окно:

QString str = "Этот компьютер";
LPCSTR lstr = str.toStdString().c_str();
HWND hwnd = FindWindowA(NULL, lstr);
Answer 1

Для узких char и широких wchar_t строк в WinAPI используются разные функции. Подробнее можно прочитать в моём ответе на связанный вопрос: char* to LPWSTR.

Здесь же происходит следующее: QString::toStdString преобразует строку "Этот компьютер", которая хранится внутри QString как набор 16-битных символов (т.е. QChar) в последовательность символов char (1 байт) с помощью функции toUtf8. А так как FindWindowA ждёт строку в однобайтовой (локальной) кодировке, то UTF-8 (мультибайтовая) строка для неё не подходит.

Наиболее правильным решением будет использование строк широких символов и функции QString:toStdWString.

QString str = "Этот компьютер";
LPWSTR lstr = str.toStdWString().c_str();
HWND hwnd = FindWindowW(NULL, lstr);

Хотя, вероятно, сработал бы и вариант с использованием локальной кодировки (QString::toLocal8Bit) .

QString str = "Этот компьютер";
LPCSTR lstr = str.toLocal8Bit().data();
HWND hwnd = FindWindowA(NULL, lstr);
READ ALSO
Выбор элементов от и до jQuery

Выбор элементов от и до jQuery

В общем, есть div с произвольным количеством дочерних div-овНужно реализовать выбор/мультивыбор дочерних div (на подобии выбора файлов в проводнике)

408
Не срабатывает onclick на тачскрине некоторых мобильных устройствах

Не срабатывает onclick на тачскрине некоторых мобильных устройствах

Здравствуйте, для реализации кнопки с выпадающим меню для мобильных устройств написал простую функцию:

235
С помощью ng-if вызвать функцию

С помощью ng-if вызвать функцию

Возможно ли это сделать? У меня есть такая разметка:

239