どちらもID取得関連のバグです。
1.
hsed_gettabidとhsed_getfootyidで、指定した変数に-1が代入されていると
必ず-1が返ってきます。
一度不正なIDを指定して-1が返ってくると、
次に呼び出した時も-1しか返って来ず、正常な値が取得できません。
以下はhsedsdk.asの中身ですが、sendmsgの次の行は
if ret < 0{
ではなく正しくは
if stat < 0{
であると思われます。
#deffunc hsed_getfootyid var ret, int nTabID hsed_capture if stat: ret = -1: return 1 sendmsg hIF, _HSED_GETFOOTYID, nTabID if ret < 0{ ret = -1 return 2 } else { ret = stat return 0 }
対処法としては、呼び出す前に必ず変数に0でも代入しておけばいいので、
そこまで深刻なバグではありません。
2.
タブを閉じたときにIDが取得できないことがあったので、
以下のようなコードを組んで調べてみました
#include "hsedsdk.as" notesel text repeat a=0 b=0 c=0 d=0 hsed_getactfootyid a hsed_getacttabid c hsed_getfootyid b,c hsed_gettabid d,a noteadd ""+a+" "+b+" "+c + " " + d getkey key,27 if key{ notesave "res.txt" end } await 10 loop
タブを閉じてエラーが発生したとき、
出力されたテキストファイルの一部は以下のようになっていました。
4 4 2 2 4 4 2 2 4 4 2 2 4 2 2 -1 2 2 2 2 2 2 2 2 2 2 2 2
一列目がactFootyID、二列目がactTabIDから取得したFootyID
三列目がactTabID、四列目がactFootyIDから取得したTabIDです。
FootyIDが4、TabIDが2のタブを消した後、
その右にあったFootyID2のタブがTabID2になり、アクティブになった時のデータです。
タブが閉じた瞬間(上から四行目)、二列目と四列目の値が
おかしくなっているのがわかると思います。
これはおそらく、
タブを閉じた処理が反映されるタイミングが違うことによって起こっていると思われます。
actFootyIDとactTabIDは四行目ではまだ変化していませんが、
hsed_getfootyidとhsed_gettabidによって取得できる値は四行目の時点ですでに変わっており、
FootyID4のタブはすでに閉じられているので四列目の値はエラーになり、
TabID2のタブは、すでにFootyID2の新しくアクティブになるタブに代わっているので
二列目の値は2になっています。
特にhsed_getactfootyidによってすでに存在しないタブを取得してしまうのは重大なバグであり、
その値を他の命令に渡したりするとエラーの原因になります。