タイトル : Re^3: 画面遷移 投稿日 : 2015/08/18(Tue) 00:37 投稿者 : 魔界の仮面弁士
> 1番目の案は、いろいろと許可申請等の問題があり保留となり > 2番目の案「SPI_GETFOREGROUNDLOCKTIMEOUT」を組込み実行しました。 保留かどうかはさておき、1番目の方法で解決できるかどうかの検証さえも 実施することができないのでしょうか。 今回の現象が1番目の件が原因ではなかった場合、2番目の方法は 意味をなさないので、組み込んでも無駄になってしまうかと思いますよ。 (そもそも、最初の「延々に入れ替わってしまう」という説明が どういう状況を示しているのか、動作イメージが連想できないです…) で、私の ForegroundLockTimeout 案は、「起動ウィンドウが手前に表示されない」 という状況を改善するためのものです。つまり、外部アプリケーションが対象なので、 提示頂いたコードだと、呼び出すべき個所が違っているように思えます。 なお当方では、ForegroundLockTimeout の修正によって、 「A.EXE から B.EXE を起動したときに、B が A の背後に表示されてしまう状況」 を改善することができています。 (実際に試したときは、A 側は *.HTA で、B は Excel.exe でした) > 下記にソースを記載します。 パラメーターの指定が間違っているようです。 SPI_GETFOREGROUNDLOCKTIMEOUT の pvParam は LPDWORD ですが、 SPI_SETFOREGROUNDLOCKTIMEOUT の pvParam は DWORD ですよ。 [VB.NET / C# 版] http://dobon.net/vb/dotnet/process/appactivate.html [VB6版] http://www.vb-user.net/yaplog/Source/SetForegroundWindow.txt 下記は、指定したウィンドウ(別プロセスのウィンドウを想定)を フォアグラウンドにし、そのウィンドウを強制的にアクティブにするというものです。 SetForegroundWindow を呼ぶ前に、AttachThreadInput するのが肝ですが、 これについては AllowSetForegroundWindow の方が良いかもしれません。 > 1. 元の値を退避しておくで(oldValueの値)を確認したのですが > 常に0でした。 API の呼び出しが間違っていることで、既に値が破壊されている可能性もあります。 以下、やや複雑な話ですが、参考情報として: http://bbs.wankuma.com/index.cgi?mode=al2&namber=63230&KLOG=107 |