【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
// VirtualProtectVirtualAlloc使
// sdimVirtualProtect
//
#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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX