Главная страница
    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-1177673583
Kerk
2007-04-27 15:33
2007.06.03
Умер Патриарх Алексий второй


1-1176188387
Pattern
2007-04-10 10:59
2007.06.03
Код сочетания клавиш


1-1176046112
mr.sokolOFF
2007-04-08 19:28
2007.06.03
TTreeView


6-1164146047
frozen_eye1
2006-11-22 00:54
2007.06.03
В WebBrowser из Memo


15-1178279473
db2admin
2007-05-04 15:51
2007.06.03
Буран и ЦПКиО им. Горького в Москве





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский