Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Вниз

Как извлечь из буфера обмена первые N символов текста.   Найти похожие ветки 

 
MasteroK   (2006-12-26 17:12) [0]

Или как извлечь текст из буфера средствами API. TClipboard - таких возможностей не даёт.


 
Джо ©   (2006-12-26 17:26) [1]

Получить весь. Затем обрезать ненужное или скопировать нужное.


 
ors_archangel ©   (2006-12-26 19:48) [2]

Средствами Win32 API:

function PasteFromClipboard: string;
var
 hmem: THandle;
 p: pointer;
begin
 if IsClipboardFormatAvailable(CF_TEXT) and OpenClipboard(GetClipboardOwner) then begin
   hmem := GetClipboardData(CF_TEXT);
   if hmem = 0 then
     result := ""
   else begin
     p := GlobalLock(hmem);
     result := String(PAnsiChar(p));
     GlobalUnlock(hmem);
   end;
   CloseClipboard;
 end;
end;


 
MasteroK   (2006-12-27 02:22) [3]

hmem := GetClipboardData(CF_TEXT);//не знаю чо происходит здесь
p := GlobalLock(hmem);//но в этом месте есть подозрения, что выделяется новая пямять по размеру буфера и туда копируется всё его содержимое.

Мне нужны только первые 100 байт.

Если буфер будет слишком большим - моя прога тормозить не будет, если я не буду гонять туда сюда большие куски памяти.


 
Джо ©   (2006-12-27 03:07) [4]

> [3] MasteroK   (27.12.06 02:22)
> Мне нужны только первые 100 байт.

Так тебе никто все и не предлагает. Память выделена системой в своей собственной системной куче. Ты получаешь на нее ссылку, а оттуда уже копируешь. В общем, как в [1] я и сказал. Хоть с помощью TClipboard, хоть на WinAPI как в [2].


 
Джо ©   (2006-12-27 03:08) [5]

Только не нужно ли в [2] копировать данные явно?


 
ors_archangel ©   (2006-12-27 03:37) [6]


> Только не нужно ли в [2] копировать данные явно?

SOLUTION - Пусть явно скопирует N байт!


 
ors_archangel ©   (2006-12-27 03:37) [7]

GlobalLock ведь не не не копирует память!! тру-ля-ля, тру-ля-ля


 
ors_archangel ©   (2006-12-27 03:41) [8]

RTFM, вобщем, и все понты, а что там в кармане такого большого может быть?
Да винда вообще только память-гонянием и занимается, так что не помешает и нам (а то будешь блой вороной!), вот моя позиция, товарищи, Ленин! Партия! Комсомол! Борланд! Майкрософт! Но если Ленин уже, то Майрософт только must


 
Джо ©   (2006-12-27 03:52) [9]

> [6] ors_archangel ©   (27.12.06 03:37)
>
> > Только не нужно ли в [2] копировать данные явно?
>
> SOLUTION - Пусть явно скопирует N байт!

Так я вот о чем и говорю.


 
Джо ©   (2006-12-27 03:56) [10]

А впрочем, не нужно. Ведь result := String(PAnsiChar(p)); приведет к вызову _LStrFromChar, если не ошибаюсь, так что все OK.


 
ors_archangel ©   (2006-12-27 06:14) [11]

Хитро, неяно... ....значит нужно копировать перед преведением к string


 
MasteroK   (2006-12-27 16:54) [12]

А если буфер меньше 100 байт - как не скопировать лишнее?
p := GlobalLock(hmem); - какого формата? PChar?
Хочу узнать размер буфера перед копированием.


 
MasteroK   (2006-12-27 16:55) [13]

Нашёл:
len:=GlobalSize(hMem);



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.045 c
15-1178175143
DVM
2007-05-03 10:52
2007.06.03
Выбо USB ключа аппаратной защиты программ.


5-1155200245
Priest
2006-08-10 12:57
2007.06.03
TComponent и IInterface


2-1178972587
SKIPtr
2007-05-12 16:23
2007.06.03
Как запустить процедуру


15-1178467183
ArtemESC
2007-05-06 19:59
2007.06.03
OpenSuse 10.2


15-1178542088
iXT
2007-05-07 16:48
2007.06.03
мой WinXP заболел :( ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский