もう解決済みになっていますが、このスクリプトのままでは
デスクトップ画面がアクティブになったときにウィンドウが非表示になってしまいます。
そのため、explorer.exe所有のウィンドウを無視するように修正しました。
#module
#include "kernel32.as"
#uselib "psapi.dll"
#func GetProcessImageFileName "GetProcessImageFileNameA" int, int, int
//プロセスIDから実行ファイルへのパスを取得する関数 by inonote
#defcfunc GetImageFileNameFromPID int pid
sdim path, 0x200
sdim DeviceName
sdim buf, 20
dim hProcess
dim index
//プロセスハンドルを取得
hProcces = OpenProcess(0x001FFFFF/*PROCESS_ALL_ACCESS*/, 0, pid)
if (hProcces == "") : return ""
//イメージファイル名を取得
GetProcessImageFileName hProcces, varptr(path), 0x200 - 1
if (bDeviceNameTable_Initialized==0){
//デバイス名をドライブレターに変換するテーブルを作成
sdim DeviceNameTable, 0x50, 32
buf="*:"
repeat 32
poke buf, 0, 'A' + cnt
QueryDosDevice varptr(buf), varptr(DeviceNameTable(cnt)), 0x50 - 1
loop
bDeviceNameTable_Initialized = 1
}
//デバイス名をドライブレターに変換
//デバイス名を切り出し
index = 0
repeat 3
index += instr(path, index, "\\")
index++
loop
if (index!=-1){
DeviceName = strmid(path, 0, index - 1)
repeat 32
if (DeviceName == DeviceNameTable(cnt)){
//置き換え
path = "*:\\" + strmid(path, index, strlen(path)-index)
poke path, 0, 'A' + cnt
break
}
loop
}
//後始末
CloseHandle(hProcces)
return getpath(path, 16)
#global
#include "user32.as"
#define PATH_EXPLORER (getpath(dir_win+"\\explorer.exe", 16))
#define GWL_STYLE (-16)
#define WS_DLGFRAME 0x00400000
dim rc, 4
dim dwPID
repeat
hnd = GetForegroundWindow() //アクティブウィンドウへのウィンドウハンドル取得
GetWindowRect hnd, varptr(rc) //ウィンドウサイズ取得
GetWindowThreadProcessId hnd, varptr(dwPID) //ウィンドウが属するプロセスのID取得
//ウィンドウスタイルのWS_DLGFRAMEフラグが立っていないかつ、ウィンドウが画面いっぱいに表示されているときに全画面と判断
//追加 : explorer.exe の全画面を無視
if ((GetWindowLong(hnd, GWL_STYLE) & WS_DLGFRAME)==0 && rc(0)<=0 && rc(1)<=0 && rc(2)>=ginfo_dispx && rc(3)>=ginfo_dispy && GetImageFileNameFromPID(dwPID)!=PATH_EXPLORER){
//全画面表示モード時の処理
gsel 0, -1
}else{
//非全画面モード時の処理
gsel 0, 2
}
wait 10
loop
stop