開発環境:
Windows10 Pro
Visual Studio Community 2019
開発言語:
VB.NET FrameWork4.7.2
まだ、梅雨なのに朝から暑かった。
ミーは一日エアコンの中だから、いいけど。
帰った時、ミー部屋は涼しかったので、思わず寝そうになった。
ミーは夕方涼しくなってから、お散歩に・・・。
外部アプリがどんな状態であってもアクティブ化しないといけないアプリの開発を受けてしまいました。
起動やアクティブ化は.NETで実現可能ですが、最小化されているかどうかの判断と最小化されている場合、元のサイズに戻す処理には、Windows APIを使う必要がありました。
'''API宣言 <dllimport("user32.dll")> Private Shared Function SetForegroundWindow(hWnd As IntPtr) As <marshalas(unmanagedtype.bool)> Boolean End Function <dllimport("user32.dll")> Private Shared Function IsIconic(hWnd As IntPtr) As <marshalas(unmanagedtype.bool)> Boolean End Function 'アイコン化されたウィンドウのサイズと位置を直前の状態に戻す(P96) <dllimport("user32.dll")> Private Shared Function OpenIcon(ByVal hWnd As Long) As Long End Function '''操作部 'すべてのプロセスを列挙する Dim Ret As Boolean = False For Each p As System.Diagnostics.Process In System.Diagnostics.Process.GetProcesses() '"Google Chrome"がメインウィンドウのタイトルに含まれているか調べる If 0 <= p.MainWindowTitle.IndexOf("Google Chrome") Then Dim retValue As Long '最小化されているか調査 retValue = IsIconic(p.MainWindowHandle) If retValue Then '最小化の状態なら元のサイズに戻す retValue = OpenIcon(p.MainWindowHandle) End If 'ウィンドウをアクティブにする SetForegroundWindow(p.MainWindowHandle) Ret = True Exit For End If Next If Ret = False Then Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start("chrome.exe") End If
Debug時には、動作が不安定になる旨メッセージは出ますが、
動くには動きます。