Page 3 of 13
Re: Общесистемный буфер обмена
Posted: Thu Feb 21, 2008 5:09 pm
by Wildwest
>файлы разделяются нулями, список заканчивается двойным нулём
а многотомные архивы WinRar *.r00?
Re: Общесистемный буфер обмена
Posted: Thu Feb 21, 2008 5:28 pm
by Serge
Wildwest
Обычными нулями, а не '0'
Re: Общесистемный буфер обмена
Posted: Thu Feb 21, 2008 7:11 pm
by Gluk
на тип содержимого хватит и одного байта, зачем dword? не думаю что будет больше 256-ти типов содержимого
Re: Общесистемный буфер обмена
Posted: Thu Feb 21, 2008 7:13 pm
by Gluk
а так - поддерживаю вариант системной функции..
Re: Общесистемный буфер обмена
Posted: Thu Feb 21, 2008 8:28 pm
by Albom
Gluk
я конечно понимаю, что некоторые хотят сэкономить аж целых 3 байта
, но по-моему, в данном случае dword смотрится красивее и использовав его вместо байта, потери производительности не произойдёт. зато размер структуры - 16 байт, а это IMHO красиво.
к тому же при использовании 32-разр. регистров dword использовать проще. а насчёт запаса форматов, то почему обязательно нумеровать их так: 0, 1, 2, 3? можно же и так: ...00000b, ...00001b, ...00010b, ...00100b?
Re: Общесистемный буфер обмена
Posted: Thu Feb 21, 2008 8:38 pm
by Gluk
просто потом мы можем придумать как заюзать эти три байта, а пока оставить пустыми..
Re: Общесистемный буфер обмена
Posted: Fri Feb 22, 2008 7:45 pm
by SHREDER
Народ, если это будет функция ядра, тогда и буфер будет хранится в пространстве ядра.
Может просто стандартный демон клибоарда и системная функции для обращиний к нему?
Есть еще одна идея в общесистемном буфере только хранить пид последнего процесса положившего в свой внутренний буфер некую инфу, и тип буфера коий может быть например - текстовые данные, битмап, или просто двоичные даные.
Тогда процесс обратившийся с запросом - "дайте мне буфер" просто вызывает функцию пересылки данных через канал у процесса который последний положил инфу свой буфер.
Таким нехитрым образом можно будет поддерживать много буферов, например у редакторов RTF свой, у нотпадов свой, у граф редакторов свой и т.д.
Преимущества такие:
- локальные операции (CTRL+C, CTRL+V) будут занимать меньше времени, ибо данные хранятся во внутреннем буфере
самого процесса.
- Обращение к буферу текстового редактора, не затрет содержимое буфера скажем граф редактора.
Недостаток один (и то решаемый) внутренний буфер предпоследнего процесса положившего инфу в буфер не очищается, что ведет к перерасходу памяти. Решить можно с помощью посылки сообщения всем процессам с данным типом буфера (кроме последнего положившего в буфер данные естественно) очистить внутренний буфер.
Re: Общесистемный буфер обмена
Posted: Fri Feb 22, 2008 9:52 pm
by Gluk
последнее означает, что скопировав в animage картинку, мы потеряем текст из tinipad'a, лежащий в буфере?
Re: Общесистемный буфер обмена
Posted: Mon Feb 25, 2008 5:26 pm
by SHREDER
Gluk wrote:последнее означает, что скопировав в animage картинку, мы потеряем текст из tinipad'a, лежащий в буфере?
Нет? Я-же написал в общеистемном буфере хранить инфу о процессе который последний положил в свой внутренний буфер инфу и тип буфера (текстовый, RTF, Image и т.д.) Положив текст из тинипада, потеряем текст во всех тинипадах и т.п. (у кого тектовый буфер) и получим доступ только к последнему тинипаду положившему инфу во внутренний буфер при этом всех у кого Image это не касается.
Re: Общесистемный буфер обмена
Posted: Thu Apr 03, 2008 11:15 pm
by shurf
Serge:Кстати для работы черес IPC надо знать PID сервиса.
PID процесса можно найти по имени процесса, используя функцию 9 (информация
о потоке выполнения) в цикле.
Например, таким способом выводится список процессов по команде PS в приложении CMD.
Соответственно, процесс буфера обмена назвать @CLIP.
Re: Общесистемный буфер обмена
Posted: Sat Apr 05, 2008 7:50 pm
by DonPedro
ИМХО не надо делать буфер, храня только PID процесса. Копируем большой текст, и вдруг закрываем прогу. И результат как минимум не приятен.
Re: Общесистемный буфер обмена
Posted: Sun Apr 06, 2008 12:20 am
by Gluk
DonPedro, под PID процесса подразумевался PID самого менеджера буфера обмена.
Re: Общесистемный буфер обмена
Posted: Sun Apr 06, 2008 11:43 am
by DonPedro
Перечитал, понял)
Re: Общесистемный буфер обмена
Posted: Sat Aug 23, 2008 1:19 pm
by barsuk
Вот моя реализация буфера обмена через процесс-демон и IPC-сообщения. Размер буфера ограничен 16 Мб, одновременно поддерживается до 16 буферов с id размером в 2 байта. Подробности в архиве.
id формата предлагаю резервировать здесь, в этой ветке. Сейчас id=1 занят для обычного текста, остальные до 65534 свободны.
Имхо, может иметь смысл также добавить в демон горячую клавишу (например Ctrl-Alt-V) для вставки текста в приложения, которые не поддерживают работу с буфером. По этой клавише будет нужно отправить содержимое буфера с id=1 (текст) через сообщения о нажатии клавиши.
Re: Общесистемный буфер обмена
Posted: Mon Aug 25, 2008 3:13 am
by E-water
А может лучше, своего рода, контейнер файлов? Ну типа папка, только её файлы в RAM.
Наподобии врЕменной папки в far'e. Горячие клавишы: скопировать в эту папку, и загрузить из неё последний скопированный в нее элемент.
И даже демоны не нужны.
Что бы поудалять что-нибудь, нет нужны писать специальную прогу, это можно сделать в файловом менеджере.
Данные можно будет загрузить в прогу не умеюшую работать с буф.
Ну, а если все таки через демон, то все равно как файлы хранить.
Для текста, хорошо бы прогу, которая могла бы эммулируя нажатия клавиш впечатывать текст(тогда не нужно делать поддержку буффера в прогах, для того что бы вставить текст)