<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D1%81lipboard</id>
		<title>FAQ:WinAPI VCPP:сlipboard - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D1%81lipboard"/>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D1%81lipboard&amp;action=history"/>
		<updated>2026-05-27T09:38:58Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D1%81lipboard&amp;diff=743&amp;oldid=prev</id>
		<title>RXL: Новая: ===Как работать с буфером обмена (Clipboard)?===  '''Копирование в буфер обмена.'''  Алгоритм: # Готовим данные #* В...</title>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D1%81lipboard&amp;diff=743&amp;oldid=prev"/>
				<updated>2009-10-03T13:03:10Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: ===Как работать с буфером обмена (Clipboard)?===  &amp;#039;&amp;#039;&amp;#039;Копирование в буфер обмена.&amp;#039;&amp;#039;&amp;#039;  Алгоритм: # Готовим данные #* В...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Как работать с буфером обмена (Clipboard)?===&lt;br /&gt;
&lt;br /&gt;
'''Копирование в буфер обмена.'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
# Готовим данные&lt;br /&gt;
#* Выделяем память из кучи,  вызывая GlobalAlloc()&lt;br /&gt;
#* Получаем указатель на выделенную память, вызывая GlobalLock()&lt;br /&gt;
#* Заполняем данные&lt;br /&gt;
#* Освобождаем указатель, вызывая GlobalUnlock();&lt;br /&gt;
# Открываем буфер обмена, вызывая OpenClipboard();&lt;br /&gt;
# Очищаем буфер, вызывая EmptyClipboard();&lt;br /&gt;
# Вызываем SetClipboardData() один раз для каждого формата вставляемых данных (имеется в виду - если одни и те же данные представлены в разных форматах, и приложение может эти форматы создать)&lt;br /&gt;
# Закрываем буфер, вызывая CloseClipboard();&lt;br /&gt;
# ВЫЗЫВАТЬ GlobalFree() НЕ НУЖНО, в этом случае это предоставлено системе&lt;br /&gt;
&lt;br /&gt;
Скажем, хотим поместить в буфер обмена текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// готовим данные&lt;br /&gt;
// выделяем из кучи память для данных&lt;br /&gt;
HANDLE hglbCopy = GlobalAlloc(GMEM_MOVEABLE,10);&lt;br /&gt;
&lt;br /&gt;
if (!hglbCopy)&lt;br /&gt;
	return;&lt;br /&gt;
&lt;br /&gt;
// получаем указатель&lt;br /&gt;
void* lpStr = GlobalLock(hglbCopy);&lt;br /&gt;
&lt;br /&gt;
if (!lpStr)&lt;br /&gt;
	return;&lt;br /&gt;
&lt;br /&gt;
// заполняем данные&lt;br /&gt;
strcpy((char*)lpStr, &amp;quot;my text&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// освобождаем указатель&lt;br /&gt;
GlobalUnlock(hglbCopy);&lt;br /&gt;
lpStr = 0;&lt;br /&gt;
&lt;br /&gt;
// открываем буфер обмена&lt;br /&gt;
OpenClipboard();&lt;br /&gt;
// очищаем&lt;br /&gt;
EmptyClipboard();&lt;br /&gt;
&lt;br /&gt;
// текстовый формат&lt;br /&gt;
SetClipboardData(CF_TEXT, hglbCopy);&lt;br /&gt;
&lt;br /&gt;
// закрываем буфер&lt;br /&gt;
CloseClipboard();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Извлечение из буфера обмена.'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
# Проверяем, что поддерживается нужный формат данных, вызывая IsClipboardFormatAvailable()&lt;br /&gt;
# Открываем буфер обмена, вызывая OpenClipboard();&lt;br /&gt;
# Достаём данные&lt;br /&gt;
#* Получаем из буфера хендл требуемого формата, вызывая GetClipboardData()&lt;br /&gt;
#* Получаем указатель на выделенную память, вызывая GlobalLock()&lt;br /&gt;
#* Работаем с данными&lt;br /&gt;
#* Освобождаем указатель, вызывая GlobalUnlock();&lt;br /&gt;
# Закрываем буфер, вызывая CloseClipboard();&lt;br /&gt;
&lt;br /&gt;
Скажем, хотим извлечь из буфера обмена текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// Проверяем, что поддерживается нужный формат данных,&lt;br /&gt;
if (!IsClipboardFormatAvailable(CF_TEXT))&lt;br /&gt;
	return;&lt;br /&gt;
&lt;br /&gt;
// открываем буфер обмена&lt;br /&gt;
OpenClipboard();&lt;br /&gt;
&lt;br /&gt;
// достаём данные&lt;br /&gt;
&lt;br /&gt;
// текстовый формат&lt;br /&gt;
HANDLE hglbCopy = GetClipboardData(CF_TEXT);&lt;br /&gt;
&lt;br /&gt;
if (!hglbCopy)&lt;br /&gt;
	return;&lt;br /&gt;
&lt;br /&gt;
// получаем указатель&lt;br /&gt;
void* lpStr = GlobalLock(hglbCopy);&lt;br /&gt;
&lt;br /&gt;
if (!lpStr)&lt;br /&gt;
	return;&lt;br /&gt;
&lt;br /&gt;
// читаем данные&lt;br /&gt;
char data[10];&lt;br /&gt;
memmove(data, lpStr, sizeof(data));&lt;br /&gt;
&lt;br /&gt;
// освобождаем указатель&lt;br /&gt;
GlobalUnlock(hglbCopy);&lt;br /&gt;
lpStr = 0;&lt;br /&gt;
&lt;br /&gt;
// закрываем буфер&lt;br /&gt;
CloseClipboard();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ:WinAPI VCPP]]&lt;/div&gt;</summary>
		<author><name>RXL</name></author>	</entry>

	</feed>