<?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=2541&amp;type=atom" />
	<updated>2008-12-04T09:44:08Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=2541</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: получение списка процессов через API с DynamicWrapperX]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=16657#p16657" />
			<content type="html"><![CDATA[<p>Вариант предыдущего с использованием GlobalAlloc.<br /></p><div class="codebox"><pre><code>Set DX = CreateObject(&quot;DynamicWrapperX&quot;)
Set WSShell = CreateObject(&quot;WScript.Shell&quot;)

TH32CS_SNAPPROCESS = 2
MAX_PATH = 260
WM_SETTEXT = 12
GPTR = 64

&#039; Смещения членов структуры PROCESSENTRY32:
dwSize = 0                &#039; Размер данной структуры.
cntUsage = 4              &#039; Больше не используется.
th32ProcessID = 8         &#039; Идентификатор процесса (PID).
th32DefaultHeapID = 12    &#039; Больше не используется.
th32ModuleID = 16         &#039; Больше не используется.
cntThreads = 20           &#039; Количество потоков в процессе.
th32ParentProcessID = 24  &#039; PID родительского процесса.
pcPriClassBase = 28       &#039; Базовый приоритет потоков процесса.
dwFlags = 32              &#039; Больше не используется.
szExeFile = 36    &#039; Здесь буфер для имени exe-файла процесса, длиной MAX_PATH.

DX.Register &quot;kernel32&quot;, &quot;CreateToolhelp32Snapshot&quot;, &quot;i=uu&quot;,   &quot;r=h&quot;
DX.Register &quot;kernel32&quot;, &quot;Process32First&quot;,           &quot;i=hp&quot;,   &quot;r=l&quot;
DX.Register &quot;kernel32&quot;, &quot;Process32Next&quot;,            &quot;i=hp&quot;,   &quot;r=l&quot;
DX.Register &quot;kernel32&quot;, &quot;CloseHandle&quot;,              &quot;i=h&quot;,    &quot;r=l&quot;
DX.Register &quot;user32&quot;,   &quot;FindWindowW&quot;,              &quot;i=ww&quot;,   &quot;r=h&quot;
DX.Register &quot;user32&quot;,   &quot;FindWindowExW&quot;,            &quot;i=hhwl&quot;, &quot;r=h&quot;
DX.Register &quot;user32&quot;,   &quot;SendMessageW&quot;,             &quot;i=huuw&quot;, &quot;r=l&quot;
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;,    &quot;r=p&quot;

Size = 9 * 4 + MAX_PATH &#039; Размер структуры в байтах.
pStruct = DX.GlobalAlloc(GPTR, Size) &#039; Запрос памяти под структуру, получаем
                                     &#039; указатель на неё.
DX.NumPut Size, pStruct, dwSize, &quot;u&quot; &#039; Пишем размер структуры в её начало.

hSnap = DX.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

DX.Process32First hSnap, pStruct &#039; Первый процесс.

pExeName = pStruct + szExeFile &#039; Адрес строки с именем exe-файла процесса.

List = &quot;PID&quot;       &amp; vbTab &amp;_
       &quot;Потоки&quot;    &amp; vbTab &amp;_
       &quot;Имя файла&quot; &amp; vbCrLf

List = List &amp; vbCrLf &amp;_
       DX.NumGet(pStruct, th32ProcessID, &quot;u&quot;) &amp; vbTab &amp;_
       DX.NumGet(pStruct, cntThreads, &quot;u&quot;)    &amp; vbTab &amp;_
       DX.StrGet(pExeName, &quot;s&quot;)
n = 1 &#039; Счётчик процессов.

While DX.Process32Next(hSnap, pStruct)
  List = List &amp; vbCrLf &amp;_
         DX.NumGet(pStruct, th32ProcessID, &quot;u&quot;) &amp; vbTab &amp;_
         DX.NumGet(pStruct, cntThreads, &quot;u&quot;)    &amp; vbTab &amp;_
         DX.StrGet(pExeName, &quot;s&quot;)
  n = n + 1
Wend

DX.CloseHandle hSnap  &#039; Освобождение хэндла.
DX.GlobalFree pStruct &#039; Освобождение памяти.

List = &quot;Всего процессов: &quot; &amp; n &amp; vbCrLf &amp; vbCrLf &amp; List


&#039; ============= Вывод данных в окно Блокнота ==============

WSShell.Run &quot;Notepad.exe&quot;

hNotepad = 0

While hNotepad = 0
  WScript.Sleep 300
  hNotepad = DX.FindWindowW(&quot;Notepad&quot;, &quot;Безымянный - Блокнот&quot;)
Wend

hEdit = DX.FindWindowExW(hNotepad, 0, &quot;Edit&quot;, 0)

DX.SendMessageW hEdit, WM_SETTEXT, 0, List</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:44:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=16657#p16657</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: получение списка процессов через API с DynamicWrapperX]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=16656#p16656" />
			<content type="html"><![CDATA[<p>Почти то же самое, но с выводом в Блокнот.<br /></p><div class="codebox"><pre><code>Set DX = CreateObject(&quot;DynamicWrapperX&quot;)
Set WSShell = CreateObject(&quot;WScript.Shell&quot;)

TH32CS_SNAPPROCESS = 2
MAX_PATH = 260
WM_SETTEXT = 12

&#039; Смещения членов структуры PROCESSENTRY32:
dwSize = 0                &#039; Размер данной структуры.
cntUsage = 4              &#039; Больше не используется.
th32ProcessID = 8         &#039; Идентификатор процесса (PID).
th32DefaultHeapID = 12    &#039; Больше не используется.
th32ModuleID = 16         &#039; Больше не используется.
cntThreads = 20           &#039; Количество потоков в процессе.
th32ParentProcessID = 24  &#039; PID родительского процесса.
pcPriClassBase = 28       &#039; Базовый приоритет потоков процесса.
dwFlags = 32              &#039; Больше не используется.
szExeFile = 36    &#039; Здесь буфер для имени exe-файла процесса, длиной MAX_PATH.

Size = 9 * 4 + MAX_PATH &#039; Размер структуры в байтах.

Struct = DX.Space(Size / 2, &quot;&quot;) &#039; Фактически здесь создаётся юникодовская
                                &#039; строка, поэтому размер надо задавать в двухбайтных
                                &#039; символах, отсюда деление на 2. Пустая строка
                                &#039; во втором параметре заполняет структуру нулями.

DX.NumPut Size, Struct, dwSize, &quot;u&quot; &#039; Пишем размер структуры в её начало.

DX.Register &quot;kernel32&quot;, &quot;CreateToolhelp32Snapshot&quot;, &quot;i=uu&quot;,   &quot;r=h&quot;
DX.Register &quot;kernel32&quot;, &quot;Process32First&quot;,           &quot;i=hp&quot;,   &quot;r=l&quot;
DX.Register &quot;kernel32&quot;, &quot;Process32Next&quot;,            &quot;i=hp&quot;,   &quot;r=l&quot;
DX.Register &quot;kernel32&quot;, &quot;CloseHandle&quot;,              &quot;i=h&quot;,    &quot;r=l&quot;
DX.Register &quot;user32&quot;,   &quot;FindWindowW&quot;,              &quot;i=ww&quot;,   &quot;r=h&quot;
DX.Register &quot;user32&quot;,   &quot;FindWindowExW&quot;,            &quot;i=hhwl&quot;, &quot;r=h&quot;
DX.Register &quot;user32&quot;,   &quot;SendMessageW&quot;,             &quot;i=huuw&quot;, &quot;r=l&quot;

hSnap = DX.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

DX.Process32First hSnap, Struct &#039; Первый процесс.

pExeName = DX.StrPtr(Struct) + szExeFile &#039; Адрес строки с именем exe-файла процесса.

List = &quot;PID&quot;       &amp; vbTab &amp;_
       &quot;Потоки&quot;    &amp; vbTab &amp;_
       &quot;Имя файла&quot; &amp; vbCrLf

List = List &amp; vbCrLf &amp;_
       DX.NumGet(Struct, th32ProcessID, &quot;u&quot;) &amp; vbTab &amp;_
       DX.NumGet(Struct, cntThreads, &quot;u&quot;)    &amp; vbTab &amp;_
       DX.StrGet(pExeName, &quot;s&quot;)
n = 1 &#039; Счётчик процессов.

While DX.Process32Next(hSnap, Struct)
  List = List &amp; vbCrLf &amp;_
         DX.NumGet(Struct, th32ProcessID, &quot;u&quot;) &amp; vbTab &amp;_
         DX.NumGet(Struct, cntThreads, &quot;u&quot;)    &amp; vbTab &amp;_
         DX.StrGet(pExeName, &quot;s&quot;)
  n = n + 1
Wend

DX.CloseHandle hSnap

List = &quot;Всего процессов: &quot; &amp; n &amp; vbCrLf &amp; vbCrLf &amp; List


&#039; ============= Вывод данных в окно Блокнота ==============

WSShell.Run &quot;Notepad.exe&quot;

hNotepad = 0

While hNotepad = 0
  WScript.Sleep 300
  hNotepad = DX.FindWindowW(&quot;Notepad&quot;, &quot;Безымянный - Блокнот&quot;)
Wend

hEdit = DX.FindWindowExW(hNotepad, 0, &quot;Edit&quot;, 0)

DX.SendMessageW hEdit, WM_SETTEXT, 0, List</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:41:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=16656#p16656</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: получение списка процессов через API с DynamicWrapperX]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=16655#p16655" />
			<content type="html"><![CDATA[<p>Пример выводит список запущенных процессов в системе.<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;)

TH32CS_SNAPPROCESS = 2
MAX_PATH = 260

&#039; Смещения членов структуры PROCESSENTRY32:
dwSize = 0
cntUsage = 4
th32ProcessID = 8
th32DefaultHeapID = 12
th32ModuleID = 16
cntThreads = 20
th32ParentProcessID = 24
pcPriClassBase = 28
dwFlags = 32
szExeFile = 36    &#039; Здесь буфер для имени процесса, длиной MAX_PATH.

Size = 9 * 4 + MAX_PATH &#039; Размер структуры в байтах.
Struct = DX.Space(Size / 2, &quot;&quot;) &#039; Здесь размер надо задавать в двухбайтных символах,
                                &#039; поэтому деление на 2. Пустая строка обнуляет структуру.
DX.NumPut Size, Struct, dwSize, &quot;u&quot; &#039; Пишем размер структуры в её начало.

DX.Register &quot;kernel32&quot;, &quot;CreateToolhelp32Snapshot&quot;, &quot;i=uu&quot;, &quot;r=h&quot;
DX.Register &quot;kernel32&quot;, &quot;Process32First&quot;,           &quot;i=hp&quot;, &quot;r=l&quot;
DX.Register &quot;kernel32&quot;, &quot;Process32Next&quot;,            &quot;i=hp&quot;, &quot;r=l&quot;
DX.Register &quot;kernel32&quot;, &quot;CloseHandle&quot;,              &quot;i=h&quot;,  &quot;r=l&quot;

hSnap = DX.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

DX.Process32First hSnap, Struct &#039; Первый процесс.

pExeName = DX.StrPtr(Struct) + szExeFile &#039; Адрес строки с именем exe-файла процесса.

List = DX.StrGet(pExeName, &quot;s&quot;) &#039; Читаем имя в список.
n = 1 &#039; Счётчик процессов.

While DX.Process32Next(hSnap, Struct)
  List = List &amp; vbCrLf &amp; DX.StrGet(pExeName, &quot;s&quot;)
  n = n + 1
Wend

DX.CloseHandle hSnap

WScript.Echo &quot;Всего процессов: &quot; &amp; n &amp; vbCrLf &amp; vbCrLf &amp; List</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:38:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=16655#p16655</id>
		</entry>
</feed>
