Конференция "WinAPI" » windows 8 and SendMessageTimeoutA... [D7]
 
  • guest (26.10.12 18:41) [0]
    мне кажется или SendMessageTimeoutA в windows8 возвращает юникод? (???? вместо русских символов)
  • Dimka Maslov © (26.10.12 19:06) [1]
    ???? вместо русских символов это не юникод
  • brother © (26.10.12 19:17) [2]
    о чем речь? те как догадался?
  • Сергей М. © (26.10.12 21:08) [3]
    Ты с дуба рухнул.

    Ни SendMessageTimeoutA ни SendMessageTimeoutW не возвращают никаких символов. Совсем не возвращают. Вообще не возвращают.
  • guest (27.10.12 02:46) [4]
    сорри, я GETTEXT шлю и конкретно его ответ имел в виду)
  • Германн © (27.10.12 04:16) [5]

    > guest   (27.10.12 02:46) [4]
    >
    > сорри, я GETTEXT шлю и конкретно его ответ имел в виду)

    Не путай ответ с результатом.
    Кому ты шлёшь данное сообщение и где и как ты смотришь результат сей посылки?
  • Rouse_ © (28.10.12 14:09) [6]
    SendMessageTimeoutA это шлюз, трансляцию возвращаемого буфера в юникод ни она ни ее W аналог не производит. Чего ты там принимаешь и как - это не проблемы данной функции
  • guest (29.10.12 14:20) [7]
    шлю окнам различных приложений, чтобы получить кепшены их окон

    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;

  • DVM © (29.10.12 16:43) [8]

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

  • guest (30.10.12 00:10) [9]
    delphi7, неюникод.

    проверил новый код - всё равно ????? пишет в win8,  во всех других windows всё ок.
  • DVM © (30.10.12 00:15) [10]

    > guest   (30.10.12 00:10) [9]

    русские буквы в принципе отображаются в программе?
  • guest (30.10.12 00:21) [11]
    нет, не отображает)

    винда английская, добавили русскую раскладку.
    в блокноте пишет ок, в нашей проге - нет.  как подружить с такой виндой неюникодное приложение?
  • DVM © (30.10.12 00:23) [12]

    >  как подружить с такой виндой неюникодное приложение?

    Панель управления - Языки и региональные стандарты - Вкладка "Дополнительно" - Язык программ, не поддерживающих Юникод.
  • guest (30.10.12 00:36) [13]
    там нет такого.. но есть возможность поставить русский лангвидж пак...  ставить?
  • Inovet © (30.10.12 00:38) [14]
    > [13] guest   (30.10.12 00:36)
    > там нет такого..

    Да куда вы "это" подевали, сегодня только обсуждали
    http://pda.delphimaster.net/?n=3&id=1351516785
  • guest (30.10.12 00:44) [15]
    сенкс)
  • guest (30.10.12 00:48) [16]
    всё работает теперь, спасибо.
 
Конференция "WinAPI" » windows 8 and SendMessageTimeoutA... [D7]
Есть новые Нет новых   [134430   +3][b:0][p:0.001]