質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

1552閲覧

フォームの最前面表示

hogesugi

総合スコア10

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2022/02/22 02:24

VB.NETでフォームを最前面に表示させるアプリ「A」を作成しました。
(Me.TopMost = True で実現しています)

他に最前面で表示させるアプリ「B」があります。
「B」の起動後、「A」を直接起動させると「A」が前面に表示されますが、
例えばバッチファイルなど外部から「B」「A」の順に起動させると「A」が背面に隠れてしまいます。
(「B」の表示が完了してから「A」を起動するようにしています)

これはどういう事なのでしょうか。
直接起動と外部からの起動で何が違うのか...

やりたい事は、外部から「A」「B」を起動させて「A」を前面に表示させたいのです。
見識のある方がいらっしゃいましたら、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

「SetForegroundWindow function (winuser.h)」
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setforegroundwindow

上の URL にウインドウを最前面にできる条件が書いてあるのですが、「A を直接起動させる」というのは

・The process was started by the foreground process.
(プロセスがフォアグラウンドプロセスによって開始された)

に該当するのではないかと思います。

バッチから起動した場合、おそらく B がフォアグラウンドプロセスになっているため、条件を満たせず最前面にならないのではないかと思います。

対策としては

(1) B のプロセスで、 AllowSetForegroundWindow を実行する
(2) ForegroundLockTimeout をゼロにする
SystemParametersInfo の SPI_SETFOREGROUNDLOCKTIMEOUT を実行する、あるいはレジストリの
HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundLockTimeout を設定する

ことが考えられます。

投稿2022/02/22 15:06

KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogesugi

2022/02/25 03:29

>>バッチから起動した場合、おそらく B がフォアグラウンドプロセスになっているため、 >>条件を満たせず最前面にならないのではないかと思います。 ありがとうございます、確かにそういう事なら納得です!
guest

0

「A」プロセスのIDが分かれば明示的に前面に表示できるのではないでしょうか。
http://vbdotnetc.blogspot.com/2016/04/blog-post_375.html

投稿2022/02/22 05:45

cure_fontaine

総合スコア137

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogesugi

2022/02/25 03:29

ありがとうございます、試してみます。
guest

0

最前面のフォームが複数ある場合は、どちらが前面になるかは保証されません

#って、たとえ同時に起動したとしてもフォームの描画がいつ完了するかはわかりません

投稿2022/02/22 02:43

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問