今回のバージョンアップにより、個人的には kbgxscc.kpi はほぼ完成と 言えるレベルに到達出来たと思っていますが、あと1点だけ気になる点が あって、再生時にウィンドウのフォーカスが奪われてしまうんですよね。
どうやってもフォーカスを奪うのを阻止出来ないので、仕方ないので
ファイルを開く直前に GetForegroundWindow してフォアグラウンドの ウィンドウを取得しておき、再生が始まったら SetForegroundWindow してフォーカスを元のウィンドウに戻す
という処理をしています。なので他の作業をしながら連続再生してると曲の 切り替わり時に一瞬だけウィンドウが奪われて少し作業がしづらいです。 (フォーカスを戻す処理をしてるだけマシなんですが)
GXSCC が呼び出す API に対して以下の処置をしていますがそれでも 足りません。他に対策として思い浮かぶものがあったらご指摘下さい。
・CreateWindowEx の dwExStyle に WS_EX_NOACTIVATE を付け加える ・SetActiveWindow/SetForegroundWindow/SetWindowPos/BringWindowToTop/SetFocus をフックして実際には何もさせない(起動してから「オーサリング」が始まる までの間に実際に呼ばれるのは SetActiveWindow のみのようです)
他のプロセスがフォーカスを持ってるのにそれを奪い取るというと AttachThreadInput を使う必要があると思うんですが、GXSCC は AttachThreadInput を呼び出していません。
GXSCC が呼び出す API は Dependency Walker で確認しています。
もしかしてウィンドウプロシージャを乗っ取る必要があるのかな。 関連するメッセージが思いつきませんが。 |