|
Чудеса Windows: ExtTextOutW и USP10.dll
|
|||
---|---|---|---|
#18+
Предыстория: понадобилось чуть пропатчить работу одного приложения с буфером обмена: если приложение отображает текст в OEM кодировке, то в буфер обмена кидает в этой кодировке, а тип содержимого устанавливает ANSI и обратно. Для решения проблемы перехватил функции Set/GetClipboardData, а для определения текущей кодировки - ExtTextOutW (опытным путем выяснилось, что этой функцией название кодировки выводится в StatusBar) - все замечательно заработало, но на другой машине всплыла проблема: плагин не смог определять кодировку :( Просмотр лога показал, что функции ExtTextOutW передается строка, все коды символов в которой уменьшены на 0x1D, а вызов происходит из USP10.dll, в то время как на рабочей машине вызов идет из LPK.dll. Чуйка подсказала, что здесь может быть замешана какая-то тема Windows или что-то в этом роде - переключение темы с аэро-что-то-там на классическую решило проблему, но остался вопрос: для чего сделано такое загадочное поведение и как предсказать, что будет в какой-то другой теме? ОС - Windows 7 (32 и 64 бита) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 13:22 |
|
Чудеса Windows: ExtTextOutW и USP10.dll
|
|||
---|---|---|---|
#18+
Ура! Кое-что прояснилось: в ExtTextOut не всегда передается печатаемая строка - иногда передается некая муть, возвращенная GetCharacterPlaceMent, что именно передается определяется параметром Options. Увы, но пока отследить вызовы GetCharacterPlaceMent почему-то не получилось ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 18:25 |
|
|
start [/forum/topic.php?fid=16&fpage=2&tid=1339643]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 369ms |
0 / 0 |