tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。