<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: помещение текстовых данных в буфер обмена через Win32 API]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=442&amp;type=atom" />
	<updated>2007-05-01T12:19:02Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=442</id>
		<entry>
			<title type="html"><![CDATA[VBScript: помещение текстовых данных в буфер обмена через Win32 API]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=2725#p2725" />
			<content type="html"><![CDATA[<p>Автор примера - <strong>Poltergeyst</strong>.<br />Здесь достаточно известный API-метод помещения текстовых данных в буфер обмена, адаптированный к VBScript. Работает под Win98 и WinXP. Потребуется библиотека <a href="http://www.script-coding.com/dynwrap.html">dynwrap.dll</a>.<br /></p><div class="codebox"><pre><code>&#039;Нет гарантий!Используете на свой страх и риск.
&#039;--------------------------------------------------------------
&#039;Language:    VBScript
&#039;Используется библиотека dynwrap.dll
&#039;-------------------------------------------------------------------------------
&#039;ОС Win98 4.10.2222
&#039;-------------------------------------------------------------------------------
&#039;Резервирование памяти
const GMEM_FIXED=0

&#039;Форматы буфера обмена
const CF_TEXT   =1
&#039;-------------------------------------------------------------------------------

setDataToCLP()

function setDataToCLP()
text=inputBox(&quot;Укажите строку для помещения в буфер обмена:&quot;, _
&quot;Буфер обмена.&quot;)

    if text=&quot;&quot; then WScript.Quit(1)
    text=Cstr(text)
&#039;-------------------------------------------------------------------------------
&#039;[Выделение памяти]
set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
if not IsObject(dllWrap) then erroHnd(&quot;Невозможно создать объект DynamicWrapper&quot;)

&#039;Регистрация вызова API
dllWrap.Register _
    &quot;KERNEL32.DLL&quot;, _
    &quot;GlobalAlloc&quot;, _
    &quot;i=uu&quot;, _
    &quot;f=s&quot;, _
    &quot;r=l&quot;
hGl=dllWrap.GlobalAlloc(GMEM_FIXED,Cint(len(text)+1))
    set dllWrap=Nothing
if hGl=0 then erroHnd(&quot;Невозможно выделить память&quot;)
&#039;-------------------------------------------------------------------------------
&#039;[Блокировка памяти]
set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
&#039;Регистрация вызова API
dllWrap.Register _
    &quot;KERNEL32.DLL&quot;, _
    &quot;GlobalLock&quot;, _
    &quot;i=l&quot;, _
    &quot;f=s&quot;, _
    &quot;r=l&quot;
&#039;Вызов API
hGl=dllWrap.GlobalLock(hGl)
    set dllWrap=Nothing
if hGl=0 then erroHnd(&quot;Невозможно резервировать память&quot;)
&#039;-------------------------------------------------------------------------------
&#039;[Копирование строки в память]
set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
&#039;Регистрация вызова API
dllWrap.Register _
    &quot;KERNEL32.DLL&quot;, _
    &quot;lstrcpy&quot;, _
    &quot;i=hs&quot;, _
    &quot;f=s&quot;, _
    &quot;r=h&quot;
&#039;Вызов API
hGl=dllWrap.lstrcpy(hGl,CStr(text))
    set dllWrap=Nothing
if hGl=0 then erroHnd(&quot;Невозможно скопировать данные в память&quot;)
&#039;-------------------------------------------------------------------------------
&#039;&#039;[Разблокировка памяти]
&#039;set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
&#039;&#039;Регистрация вызова API
&#039;dllWrap.Register _
&#039;    &quot;KERNEL32.DLL&quot;, _
&#039;    &quot;GlobalUnlock&quot;, _
&#039;    &quot;i=h&quot;, _
&#039;    &quot;f=s&quot;, _
&#039;    &quot;r=l&quot;
&#039;&#039;Вызов API
&#039;res=dllWrap.GlobalUnlock(hGl)
&#039;    set dllWrap=Nothing
&#039;if res&lt;&gt;0 then erroHnd(&quot;Невозможно разблокировать память&quot;)
&#039;-------------------------------------------------------------------------------
&#039;[Открытие буфера обмена]
set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
&#039;Регистрация вызова API
dllWrap.Register _
    &quot;USER32.DLL&quot;, _
    &quot;OpenClipboard&quot;, _
    &quot;i=h&quot;, _
    &quot;f=s&quot;, _
    &quot;r=l&quot;
&#039;Вызов API
res=dllWrap.OpenClipboard(0)
    set dllWrap=Nothing
if res=0 then erroHnd(&quot;Невозможно открыть буфер обмена&quot;)
&#039;-------------------------------------------------------------------------------
&#039;[Очистка буфера обмена]
set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
&#039;Регистрация вызова API
dllWrap.Register _
    &quot;USER32.DLL&quot;, _
    &quot;EmptyClipboard&quot;, _
    &quot;f=s&quot;, _
    &quot;r=l&quot;
&#039;Вызов API
res=dllWrap.EmptyClipboard()
    set dllWrap=Nothing
if res=0 then erroHnd(&quot;Невозможно очистить буфер обмена&quot;)
&#039;-------------------------------------------------------------------------------
&#039;[Установка содержимого буфера]
set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
&#039;Регистрация вызова API
dllWrap.Register _
    &quot;USER32.DLL&quot;, _
    &quot;SetClipboardData&quot;, _
    &quot;i=uh&quot;, _
    &quot;f=s&quot;, _
    &quot;r=l&quot;
&#039;Вызов API
res=dllWrap.SetClipboardData(CF_TEXT,hGl)
    set dllWrap=Nothing
if res=0 then erroHnd(&quot;Невозможно поместить данные в буфер&quot;)
&#039;-------------------------------------------------------------------------------
&#039;[Закрытие буфера(освобождение)]
set dllWrap=CreateObject(&quot;DynamicWrapper&quot;)
&#039;Регистрация вызова API
dllWrap.Register _
    &quot;USER32.DLL&quot;, _
    &quot;CloseClipboard&quot;, _
    &quot;f=s&quot;, _
    &quot;r=l&quot;
&#039;Вызов API
res=dllWrap.CloseClipboard()
    set dllWrap=Nothing
if res=0 then erroHnd(&quot;Невозмоно закрыть буфер&quot;)
&#039;-------------------------------------------------------------------------------
    MsgBox &quot;Данные помещены в буфер&quot;,vbInformation,&quot;Буфер обмена&quot;
end Function

function erroHnd(text)
    MsgBox text,vbExclamation,&quot;Произошла ошибка&quot;
    WScript.Quit(-1)
end Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2007-05-01T12:19:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=2725#p2725</id>
		</entry>
</feed>
