確か、別スレッドのウィンドウがアクティブになっている時に
自分のウィンドウをgselで再びアクティブにすることはできなかったはずです。
それを回避するためのgsel命令の強化版みたいなのを以前作っていたので、貼っておきます。
これを使えば再アクティブ化できると思います。
#module
#uselib "USER32.DLL"
#func GetWindowThreadProcessId "GetWindowThreadProcessId" sptr,sptr
#func GetForegroundWindow "GetForegroundWindow"
#func BringWindowToTop "BringWindowToTop" sptr
#func AttachThreadInput "AttachThreadInput" sptr,sptr,sptr
#func ShowWindow "ShowWindow" sptr,sptr
#func SetWindowPos "SetWindowPos" sptr,sptr,sptr,sptr,sptr,sptr,sptr
// 強制力の強いgsel
#deffunc gsel2 int id, int sw
gsel id, 0
if (sw < 0) {
gsel id, -1
} else : if (sw != 0) {
GetWindowThreadProcessId hwnd, 0
targetThreadId = stat
GetForegroundWindow
GetWindowThreadProcessId stat, 0
currentThreadId = stat
if (targetThreadId == currentThreadId) {
BringWindowToTop hwnd
} else {
AttachThreadInput targetThreadId, currentThreadId, 1
BringWindowToTop hwnd
AttachThreadInput targetThreadId, currentThreadId, 0
}
ShowWindow hwnd, 5
if (sw == 2) {
SetWindowPos hwnd, -1, 0, 0, 0, 0, 3
}
}
return
#global
// 実行してみる
input a
input b
gsel 0,2
wait 500
gsel2 0,2
objsel 1