Unicode or ANSI

Тема в разделе "WASM.BEGINNERS", создана пользователем held1r, 21 ноя 2005.

  1. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    Буфер обмена содержит строку. Как определить, она ансишная или юникодовская?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Буфер обмена может содержать текст в нескольких форматах: анси, юникод, оем. Поэтому можно брать тот, какой нужен - винда сама преобразует текст в нужный формат.

    А вообще, проверить наличие нужного формата можно с помощью IsClipboardFormatAvailable, можно также перечислить все доступные форматы EnumClipboardFormats (первым идет оригинальный формат, в котором текст был помещен в буфер)



    PS: в некотрых случаях возможны ошибки преобразования ANSI <=> UNICODE, если текущая установка языка не соотв. языку текста
     
  3. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    Спасибо!



    Вопрос по ходу - нашел ф-цию IsTextUnicode, но хоть убейте, не могу найти в какой она библтотеке.
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Вроде как в advapi32
     
  5. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    Жопа, вид спереди...



    При проверке буфера на форматы CF_TEXT и CF_UNICODETEXT возвращает тру о обоих случаях, а при последующей проверке посредством MessageBoxA, MessageBoxW оказыватся, что в буфере был юникод, но не было аски, и наоборот. блин.
     
  6. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    точно в advapi32!



    Thanx
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    > "в буфере был юникод, но не было аски, и наоборот"

    Такое возможно только в 9х, а NT-шные винды автоматом преобразуют текстовые форматы CF_TEXT <-> CF_UNICODETEXT. (Точнее сказать - пытаются, вот пример кракозяблов, котрые может выдавать win XP при обмене с прогами, не поддерживающими юникод).

    Поэтому GetClipboardData(CF_TEXT) всегда должна выдавать текст в ансишной кодировке, а CF_UNICODETEXT соотв-но в юникоде
     
  8. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    судя по получаемым результатам - ничего он никому не должен :) по крайней мере мой 2к



    например:

    копирую из блокнота - получаю читаемый через CF_TEXT,

    CF_UNICODETEXT - возвращает пургу



    SQL Navigator ведет себя прямо противоположным образом



    вот такая бяка...
     
  9. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    я понял!



    точнее нашел закономерность...

    все свои штуки я реализовываю через длл в контексте чужого процесса.



    если запрашивать буфер из другого процесса, то все ок