-
мне кажется или SendMessageTimeoutA в windows8 возвращает юникод? (???? вместо русских символов)
-
???? вместо русских символов это не юникод
-
о чем речь? те как догадался?
-
Ты с дуба рухнул.
Ни SendMessageTimeoutA ни SendMessageTimeoutW не возвращают никаких символов. Совсем не возвращают. Вообще не возвращают.
-
сорри, я GETTEXT шлю и конкретно его ответ имел в виду)
-
> guest (27.10.12 02:46) [4] > > сорри, я GETTEXT шлю и конкретно его ответ имел в виду)
Не путай ответ с результатом. Кому ты шлёшь данное сообщение и где и как ты смотришь результат сей посылки?
-
SendMessageTimeoutA это шлюз, трансляцию возвращаемого буфера в юникод ни она ни ее W аналог не производит. Чего ты там принимаешь и как - это не проблемы данной функции
-
шлю окнам различных приложений, чтобы получить кепшены их окон function GetWndCaption(AHandle: HWND): string;
var
Buffer : array[0..255] of Char;
Rslt: Cardinal;
begin
FillChar(Buffer, 256, 0);
SendMessageTimeoutA(AHandle, WM_GETTEXT, 256, Integer(@Buffer[0]), SMTO_ABORTIFHUNG, 300, Rslt);
Result := Buffer;
end;
-
> guest (29.10.12 14:20) [7]
Если твое приложение юникодное, то ты получишь буфер в котором юникод и проблем с отображением даже китайских иероглифов у тебя не будет, если твое приложение неюникодное, то будет произведено преобразование по возможности юникода в ansi с учетом текущих языковых настроек и ты получишь то что получишь, китайские иероглифы допустим ты не увидишь с установленным руским языком для неюникодных программ.
function GetWndText(const hWnd: HWND): string;
var
n: Cardinal;
begin
SendMessageTimeout(hWnd, WM_GETTEXTLENGTH, 0, 0, SMTO_ABORTIFHUNG, 300, @n) ;
Inc(n, SizeOf(Char));
SetLength(Result, n);
SendMessageTimeout(hWnd, WM_GETTEXT, WPARAM(n), LPARAM(PChar(Result)), SMTO_ABORTIFHUNG, 300, @n);
end;
-
delphi7, неюникод.
проверил новый код - всё равно ????? пишет в win8, во всех других windows всё ок.
-
> guest (30.10.12 00:10) [9]
русские буквы в принципе отображаются в программе?
-
нет, не отображает)
винда английская, добавили русскую раскладку. в блокноте пишет ок, в нашей проге - нет. как подружить с такой виндой неюникодное приложение?
-
> как подружить с такой виндой неюникодное приложение?
Панель управления - Языки и региональные стандарты - Вкладка "Дополнительно" - Язык программ, не поддерживающих Юникод.
-
там нет такого.. но есть возможность поставить русский лангвидж пак... ставить?
-
-
сенкс)
-
всё работает теперь, спасибо.
|