OberonCore https://forum.oberoncore.ru/ |
|
Буфер обмена https://forum.oberoncore.ru/viewtopic.php?f=29&t=6591 |
Страница 1 из 1 |
Автор: | Александр К [ Четверг, 26 Март, 2020 13:47 ] |
Заголовок сообщения: | Буфер обмена |
Как извлечь текст из буфера обмена? В сети нашёл, что надо сначала открыть (WinApi.OpenClipboard (0);) затем получить адрес дескриптора для конкретного типа данных, хранящиеся в буфере (des := WinApi.GetClipboardData (WinApi.CF_TEXT);), затем зачем-то зафиксировать эти данные (desLock := WinApi.GlobalLock (des);). Как дальше подключиться к данным по этому дескриптору не знаю. Нашёл что после этого надо в обратном порядке: WinApi.GlobalUnlock (des); WinApi.CloseClipboard ();. |
Автор: | Александр Ильин [ Четверг, 26 Март, 2020 17:20 ] |
Заголовок сообщения: | Re: Буфер обмена |
Александр К писал(а): Как извлечь текст из буфера обмена? В сети нашёл, что надо сначала открыть (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 |
Автор: | Александр К [ Пятница, 27 Март, 2020 12:59 ] |
Заголовок сообщения: | Re: Буфер обмена |
Александр Ильин писал(а): ...дальше можете оттуда читать. Как это? Приведите пожалуйста пример.
|
Автор: | Александр Ильин [ Суббота, 28 Март, 2020 22:06 ] |
Заголовок сообщения: | Re: Буфер обмена |
Александр К писал(а): Александр Ильин писал(а): ...дальше можете оттуда читать. Как это? Приведите пожалуйста пример.Наверное, надо привести к типу POINTER TO SHORTCHAR с помощью SYSTEM.VAL, прочитать значение по указателю, куда-то к себе скопировать, инкрементировать указатель. Повторять, пока прочитанное не равно 0X. |
Автор: | Иван Денисов [ Воскресенье, 29 Март, 2020 14:39 ] |
Заголовок сообщения: | Re: Буфер обмена |
Вот так работает Код: 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. |
Автор: | Info21 [ Воскресенье, 29 Март, 2020 22:53 ] |
Заголовок сообщения: | Re: Буфер обмена |
Ценно, спасибо. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |