<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: получение списка окон через API с DynamicWrapperX]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=2542</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2542&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: получение списка окон через API с DynamicWrapperX».]]></description>
		<lastBuildDate>Thu, 04 Dec 2008 09:56:15 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBScript: получение списка окон через API с DynamicWrapperX]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=16658#p16658</link>
			<description><![CDATA[<p>Пример выводит список окон верхнего уровня в системе, их заголовки и hwnd, с помощью API EnumWindows. Демонстрация использования callback-функции в VBScript.<br />Потребуется библиотека <a href="http://www.script-coding.com/dynwrapx.html">DynamicWrapperX</a>.<br /></p><div class="codebox"><pre><code>Set DX = CreateObject(&quot;DynamicWrapperX&quot;)

GPTR = 64 &#039; Тип памяти - фиксированная и обнулённая.

DX.Register &quot;user32&quot;,   &quot;EnumWindows&quot;,    &quot;i=pl&quot;
DX.Register &quot;user32&quot;,   &quot;GetWindowTextW&quot;, &quot;i=hpl&quot;     &#039; Вариант Unicode.
DX.Register &quot;kernel32&quot;, &quot;GlobalAlloc&quot;,    &quot;i=uu&quot;, &quot;r=p&quot;
DX.Register &quot;kernel32&quot;, &quot;GlobalFree&quot;,     &quot;i=p&quot;

Set Ref = GetRef(&quot;CbkEnumWin&quot;)  &#039; Получение ссылки на функцию.

pCbkFunc = DX.RegisterCallback(Ref, &quot;i=hl&quot;, &quot;r=l&quot;)  &#039; Регистрация CbkEnumWin
                                                    &#039; как функции обратного вызова
                                                    &#039; и получение указателя.
n = 0 : m = 0 : WinList = &quot;&quot;

pBuffer = DX.GlobalAlloc(GPTR, 512) &#039; Буфер под заголовок окна.

DX.EnumWindows pCbkFunc, 0      &#039; Вызов EnumWindows с передачей ей указателя на
                                &#039; callback-функцию.

WScript.Echo &quot;Всего окон: &quot; &amp; m &amp; vbCrLf &amp; &quot;С заголовками: &quot; &amp; n &amp; _
              vbCrLf &amp; vbCrLf &amp; WinList

DX.GlobalFree pBuffer &#039; Освобождение памяти.

&#039; ................ Собственно callback-функция .......................

Function CbkEnumWin(hwnd, lparam)
  DX.GetWindowTextW hwnd, pBuffer, 256
  Title = DX.StrGet(pBuffer) &#039; Чтение строки из буфера.
  If Len(Title) &gt; 0 Then  &#039; Если длина заголовка больше 0, заносим в список.
    WinList = WinList &amp; hwnd &amp; vbTab &amp; Title &amp; vbCrLf
    n = n+1
  End If
  m = m+1
  CbkEnumWin = 1          &#039; Если вернуть 0, вызовы прекратятся.
End Function</code></pre></div><p>Автор примера - <strong>YMP</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Thu, 04 Dec 2008 09:56:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=16658#p16658</guid>
		</item>
	</channel>
</rss>
