参考: ちょくとのページ 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