OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 27 Май, 2020 17:52

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Буфер обмена
СообщениеДобавлено: Четверг, 26 Март, 2020 13:47 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 52
Как извлечь текст из буфера обмена? В сети нашёл, что надо сначала открыть (WinApi.OpenClipboard (0);) затем получить адрес дескриптора для конкретного типа данных, хранящиеся в буфере (des := WinApi.GetClipboardData (WinApi.CF_TEXT);), затем зачем-то зафиксировать эти данные (desLock := WinApi.GlobalLock (des);). Как дальше подключиться к данным по этому дескриптору не знаю.

Нашёл что после этого надо в обратном порядке: WinApi.GlobalUnlock (des); WinApi.CloseClipboard ();.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Буфер обмена
СообщениеДобавлено: Четверг, 26 Март, 2020 17:20 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2341
Откуда: Россия, Томск
Александр К писал(а):
Как извлечь текст из буфера обмена? В сети нашёл, что надо сначала открыть (WinApi.OpenClipboard (0);) затем получить адрес дескриптора для конкретного типа данных, хранящиеся в буфере (des := WinApi.GetClipboardData (WinApi.CF_TEXT);), затем зачем-то зафиксировать эти данные (desLock := WinApi.GlobalLock (des);). Как дальше подключиться к данным по этому дескриптору не знаю.

Нашёл что после этого надо в обратном порядке: WinApi.GlobalUnlock (des); WinApi.CloseClipboard ();.

WinApi.GlobalLock возвращает указатель на первый байт данных, дальше можете оттуда читать. Делается это для того, чтобы данные не были перезаписаны другим приложением, копирующим в буфер обмена, до того, как вы закончите работу с этим буфером.

https://docs.microsoft.com/en-us/window ... globallock

Читайте данные побайтно, пока не встретите ноль.

https://docs.microsoft.com/en-us/window ... rd-formats


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Буфер обмена
СообщениеДобавлено: Пятница, 27 Март, 2020 12:59 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 52
Александр Ильин писал(а):
...дальше можете оттуда читать.
Как это? Приведите пожалуйста пример.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Буфер обмена
СообщениеДобавлено: Суббота, 28 Март, 2020 22:06 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2341
Откуда: Россия, Томск
Александр К писал(а):
Александр Ильин писал(а):
...дальше можете оттуда читать.
Как это? Приведите пожалуйста пример.
Тут пусть кто другой пособит. Я с Винапи дело ещё как-то имею, а с КП/ББ уже давно не доводилось. Подзабыл синтаксис.
Наверное, надо привести к типу POINTER TO SHORTCHAR с помощью SYSTEM.VAL, прочитать значение по указателю, куда-то к себе скопировать, инкрементировать указатель. Повторять, пока прочитанное не равно 0X.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Буфер обмена
СообщениеДобавлено: Воскресенье, 29 Март, 2020 14:39 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2748
Вот так работает
Код:
MODULE DemoClip;

IMPORT SYSTEM, WinApi, Log;

PROCEDURE Do*;
VAR des, desLock, i: INTEGER; str: WinApi.PtrSTR;
BEGIN
   des := WinApi.OpenClipboard(0);
   des := WinApi.GetClipboardData (WinApi.CF_TEXT);
   desLock := WinApi.GlobalLock(des);
   str := SYSTEM.VAL(WinApi.PtrSTR, desLock);
   
   i := 0;
   WHILE str[i] # 0X DO
      Log.Char(str[i]); INC(i)
   END;
   
   desLock := WinApi.GlobalUnlock(des);
   des := WinApi.CloseClipboard();
END Do;

END DemoClip.



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Буфер обмена
СообщениеДобавлено: Воскресенье, 29 Март, 2020 22:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8328
Откуда: Троицк, Москва
Ценно, спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB