===================================================================== AJPapps - Clipboard locale fixer 1.00 Линда Кайе 2012. Посвящается Ариэль ===================================================================== Эта программа призвана побороть проблему Windows XP (а также, возможно, и более поздних систем), когда в буфер обмена копируется текст на русском, а вставляются крякозябы. Она работает в фоновом режиме и при появлении нового текста в буфере обмена назначает ему правильную кодировку. История создания ---------------- Вот как бывает? Скопируешь откуда-то огромный кусок текста, закроешь программу, вставляешь в другой программе, а вместо русского языка - крякозябы. Обычно это сопровождается включенной по умолчанию английской раскладкой клавиатуры. Приходится приучать себя перед копированием переключаться на русскую раскладку. И долго я мучилась с этим, даже раскопала причины такого поведения системы, но никак руки не доходили до написания программы, которая исправляет это. Но вот программа написана и даже работает ^^ Анатомия проблемы ----------------- Windows поддерживает два формата текста в буфере обмена: CF_TEXT для простого ANSI текста и CF_UNICODETEXT для юникодного текста. Во времена Windows 9x CF_UNICODETEXT не поддерживался на тех системах, и девелоперы привыкли в буфер обмена вставлять только CF_TEXT. Попутно с этим, существует формат CF_LOCALE, который содержит четыре байта и указывает кодовую страницу (локаль) текста в формате CF_TEXT. Не знаю, как Microsoft до этого додумалась, но при вставке в буфер обмена текста в формате CF_TEXT прозрачно (тобишь самой системой) записывается не системная локаль, а локаль текущей выбранной в программе раскладки. При этом установкой CF_UNICODETEXT и CF_LOCALE девелоперы не заморачиваются. Теперь мы вставляем текст на другой стороне, в другой программе. Вот тут и начинается цирк, который зависит от того, куда смотрит программа при забирании текста из буфера обмена. Программа смотрит в CF_TEXT. Тут проблем, скорее всего, не будет, поскольку ANSI они есть ANSI, и принимающая программа, скорее всего, будет разбирать его, предполагая, текущую системную (или установленную для потока) локаль. Хотя даже старые программы могут делать иначе, если полагаются на систему (в каких-нибудь очень стандартизированных вещах, которые осуществляют сами контролы вроде TEXT). Программа смотрит в CF_UNICODETEXT. Тут и начинается праздник жизни. Допустим, передающая программа сама указала текст в этом формате. Возможно, дальше всё вставится правильно, но у меня в Агехе бывали непонятные приколы, когда текст не воспринимался правильно. Допустим, передающую программу писал лентяй и ничего не указал. Принимающая программа запрашивает CF_UNICODETEX, и Windows радостно сообщает, что их есть у неё. Врёт! Дальше программа запрашивает этот самый формат, и умная система создаёт его на месте. Для этого она смотрит какая локаль указана в CF_LOCALE и конвертирует текст из CF_TEXT используя эту локаль. Ну и в итоге результат возвращается программе. Если в передающей программе был скопирован русский текст при включенной английской раскладке, мы получаем крякозябы. Сконвертированный текст сохраняется в буфере обмена, и сделать что-то уже сложнее, хотя и можно. Вот такая история. История изменений ----------------- • 2.00.0003 Первый публичный релиз второй версии. Зависимости ----------- Для работы этой программы нужны следующие компоненты: • AJPapps - AJPapps support library 1.00 Файл AJPappsSupport0100.DLL • AJPapps - Библиотека общих функций 3.01 Файл CommonFunctions0301.DLL • AJPapps - System tray icon control 2.01 Файл SysTray0201.OCX • Microsoft Visual Basic Virtual Machine Файл MSVBVM60.DLL Эти компоненты обязательны. Они уже включены в программу установки ^_^ Информация о разработке ----------------------- Язык: Microsoft Visual Basic 6.0 SP6 Платформа: Windows XP Professional SP3 Установка --------- Просто запустите Setup.ClipboardLocaleFixer.EXE, и программа установки сама создаст все необходимые ярлыки. Использование ------------- Достаточно запустить программу, она выведет иконку в трее и будет делать всё в полностью автоматическом режиме. Для этого она каждую секунду будет запрашивать, появился ли в буфере обмена новый текст, и при его появлении будет исправлять локаль, записывая текущую пользовательскую. Сам текст при этом трогаться не будет, и дойдёт до программы-получателя в первозданном виде. Удаление -------- Удаление самой программы производится обычным способом - через Установку и удаление программ. Однако рекомендуется перед этим запустить программу, снять галочку отвечающую за автозапуск, и закрыть программу. Маленький копирайт ------------------ 1. Программа распространяется бесплатно. 2. Вы имеете право распространять её на тех же условиях. 3. При распространении вы не имеете права менять авторство программы, присваивать его себе или каким-либо иным способом искажать его. 4. Вы не имеете права на платное распространение программы, сдачу в аренду или любое другое коммерческое использование. 5. Программа распространяется как есть. Автор не несёт ответственности за любые трагедии или несчастные случаи, вызванные использованием программы. 6. Вы имеете право использовать ActiveX компоненты, поставляемые с программой, в собственных программах. При этом автор не гарантирует совместимость будущих версий компонентов. 7. Для любого пункта данного соглашения может быть сделано исключение с разрешения автора программы. 8. По любым вопросам, связанным с данной программой, обращайтесь по адресу lindaoneesama@gmail.com Загружено с http://purl.oclc.org/Linda_Kaioh/Homepage/