<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: получение списка окон через API с DynamicWrapperX]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2542&amp;type=atom" />
	<updated>2008-12-04T09:56:15Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=2542</id>
		<entry>
			<title type="html"><![CDATA[VBScript: получение списка окон через API с DynamicWrapperX]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=16658#p16658" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-12-04T09:56:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=16658#p16658</id>
		</entry>
</feed>
