Comments 40
Это где так?очень часто сталкиваюсь в qip клиенте. И да, icq еще пользуются :)
Что касается исправления, в голове у меня крутятся какие-то остатки когда-то прочитанного, что это трактуется как фича — типа на каком языке печатаешь, на том и будет вставлен текст. Так что у меня стойкое подозрение, что исправлено это не будет никогда, несмотря на очевидный идиотизм.
типа на каком языке печатаешь, на том и будет вставлен текст.В смысле предполагалось, что туда переводчик впихнут? Потому, что в остальных случаях явный бред. Кстати а в буфере обмена для однобайтных кодировок вообще сохраняется инфа о кодовой странице?
Потом никто не мешает временно вернуть английскую раскладку с английским языком. Я так иногда делал, когда надо было на английском документы писать.
Ну, и все англоязычные приложения на установку CF_LOCALE дружно забивают. Зачем? Они же знают, что все работают в своей раскладке.
Блин, базовый компонент сделать просто работающим не могли…
как я от этого страдал… когда буфер просто переставал работать. А способ лечения знал только перезагрузкой. А удаленный сервер перезагружать было нельзя. Качал файлы через выкладывание в IIS, даже простые тексты выкладывал на вебсервере, чтобы тупо скопировать текст (( И только когда проблема ушла с новой виндой, я случайно узнал, что это можно было решить перезапуском rdpclip.exe
И это в Windows 10 в 2017 году…
А зачем такая ОС, которую может сломать любая индусская программа?Ну дык эта. Чтоб було.
Многозадачные ОС как раз и созданы для изоляции процессов друг от друга.К UI это не относится. Linux (вернее X Windows System), MacOS и Windows написаны так, что UI там работает нормально только если «кривых» программ в системе нет.
Вот iOS/Android (ну и почивший в бозе Windows Phone) — там да, есть защита. Но это уже новое поколение.
Конечно, есть драйвера, которые для скорости работают в режиме ядра с полным доступом, но как оно может пересекаться с калькулятором, который у меня однажды на десятке отвалился до следующего крупного обновления, я не представляю.Очень просто: очень много вещей на десктопе шарится между программами. GDI-обьекты в Windows, разные X Windows обьекты в Linux и их аналоги в MacOS — тоже. Ну просто никто об этом не думал — считалось что защищать процессы, принадлежащие одному пользователю друг от друга — нет смысла.
Сейчас потихоньку этим начинают занимать, но сколько лет пройдёт пока до ума доведут — одному богу ведомо.
Это на какой-то инсайд сборке? Лично ни разу не видел подобного. Вот проблемы с драйверами из центра обновлений частое явление. Правда с одной оговоркой — это касается ноутбуков с apu от амд.
Неужели есть программисты, которые до сих пор не в курсе, как устроен буфер обмена?! Хотя бы в общих чертах, о чем как раз статья…
Таки Вы не верите, что существуют программисты моложе Вас, которые не читали хелп к древним средам разработки, и у которых не доходили руки посмотреть, как работает то, с чем они, к примеру, не сталкивалсь как программисты? Или любой, кто моложе Вас или не знет, как работать с буфером обмена, для Вас по определению не программист?
Странноватый, но, к сожалению, типичный комментарий в стиле "зачем писал? Я это знаю, значит и другим неинтересно"
Ну извините, ошибся.
Ну и я, например, использую программу перекодировки текста (snoop) которая с буфером что-то химичит и не всегда корректно. Вот теперь думаю, а можно ли было по другому сделать.
Допустим, я работаю на MacOS, пишу приложения для Android, и я должен быть в курсе, как устроен буфер обмена на Windows? Хотя почитать было интересно.
Спасибо переводчику за труд и Микрософту за интересную статью. Когда начинаешь по-настоящему знакомиться с устройством Windows, куда-то исчезает весь этот пафос типа "маздай" и "отстой";) Про всякое нутро очень много и интересно написано в книгах Windows Internals.
Архитектура с цепочкой вызовов, конечно, смелая. Видимо, ребята в тот момент не понимали, насколько много "индусского" кода, и что вообще многие кодят по туториалам, не вдаваясь в подробности (а потом ругают, что "тупая винда" не работает так, как они представляют, не понимая, что их представление ошибочно). Сам грешен.
Хорошо, что потом исправили. И, кстати, довольно изящно — хочешь, чтобы тебе никто не подпортил слежение за буффером, используй новый интерфейс. Мигрируют все добровольно и с песней;)
Архитектура с цепочкой вызовов, конечно, смелая.
В delphi все события так работают. Наверно, в то время так было принято.
Интересная статья. Немного странно видеть её в 2017м, а не раньше, ведь технология очень старая.
Когда мы писали приложения под windows и надо было сделать copy/paste сложных обьектов, мы сделали интересную фишку — в Clipboard копировался наш COM обьект с проприетарным интерфейсом, когда его вставляли в наше же приложение — мы копировали обьект 1к1 (так как могли получить этот проприетарный интерфейс), а если например в Notepad то он конвертировался в XML «на лету». Удобно было смотреть в текстовых редакторах что наредактировали в GUI через обычный copy/paste. Насколько я знаю копирование из Excel в Word так и сделано, через COM обьекты, а не текст, а вся эта надстройка WM_* — сугубо для поддержки старых приложений.
а) нажимаешь горячую клавишу и появляется окошко с выбором
б) можно выбрать различные настраиваемые действия
в) результат этих действий кладется в буфер и сразу же вызывается вставка из буфера в активное
г) если содержимое буфера соответствует определенным правилам, то вместо вставки вызывается внешняя программа, например, браузер.
г) и чтобы можно было посмотреть историю последних N объектов, лежавших в буфере.
Я бы например настроил в такой программе вставку текущей даты, нового GUID, форматирования XML, автоматический перевод текста на русский и еще кое-что по мелочи.
Может, подскажете, что почитать, чтобы написать такую утилиту самому?
а) RegisterHotKey
б) Создаете и показываете popup меню
в) Вставка в буфер описана в статье, а заставить текущее окно сделать вставку из буфера можете отправкой сообщения WM_PASTE активному элементу, который получается из GetGUIThreadInfo, поле hwndFocus. Сообщение стандартное, но не факт, что будет работать для всех окон и элементов.
г) CreateProcess
д) Записываете текст из буфера в текстовый же файл, а когда надо показать — открываете блокнот с этим файлом тем же CreateProcess
Как работает буфер обмена в Windows