【HSP3】HSP3でのEnumWindowsを使用したウィンドウ列挙(ウィンドウハンドル)

参考: ちょくとのページ http://chokuto.ifdef.jp/urawaza/mcn/vc_enumwnd2.html VirtualProtect関数ではなくVirtualAlloc関数使用。一部環境でsdim等で確保した領域をVirtualProtect関数で実行属性を付加しても動作しないため(原因はよくわからん)即席で間違ってるかも。

参考: ちょくとのページ http://chokuto.ifdef.jp/urawaza/mcn/vc_enumwnd2.html VirtualProtect関数ではなくVirtualAlloc関数使用。一部環境でsdim等で確保した領域をVirtualProtect関数で実行属性を付加しても動作しないため(原因はよくわからん)即席で間違ってるかも。

// HSP3でのウィンドウ列挙(ウィンドウハンドル)
// 参考: ちょくとのページ
// http://chokuto.ifdef.jp/urawaza/mcn/vc_enumwnd2.html
// VirtualProtect関数ではなくVirtualAlloc関数使用
// 一部環境でsdim等で確保した領域をVirtualProtect関数で実行属性を付加しても動作しないため
// (原因はよくわからん)
#include "kernel32.as"
#include "user32.as"
#module
#deffunc GetWindowList var list, int _max
	if _max == 0 : max = 4096 : else : max = _max
	VirtualAlloc 0, 12*4, 0x2000/*MEM_RESERVE*/, 0x40/*PAGE_EXECUTE_READWRITE*/
	VirtualAlloc stat, 12*4, 0x1000/*MEM_COMMIT*/, 0x40/*PAGE_EXECUTE_READWRITE*/
	pbm = stat
	dupptr bm, pbm, 12*4, 4
	bm.0 = $0824448b, $8b08488b, $ca3b0450, $c033057c, $8b0008c2, $748b5610
	bm.6 = $34890824, $08488b8a, $48895e41, $0001b808, $08c20000, $00000000
	dim list, max
	ENUMWND_DATA = varptr(list), max, 0
	EnumWindows pbm, varptr(ENUMWND_DATA)
	dim bm
	VirtualFree pbm, 12*4, 0x4000 /*MEM_DECOMMIT*/
	VirtualFree pbm, 0, 0x8000 /*MEM_RELEASE*/
return
#global

GetWindowList list, 4096