別プロセスのウィンドウを元に戻す <TOP>
FindWindow
クラス名またはキャプションを与えてウィンドウのハンドルを取得
ShowWindowAsync 別のスレッドによって作成されたウィンドウの表示状態を設定
SW_RESTORE(9)
ウィンドウをアクティブ化し表示。ウィンドウがアイコン化または最大化されているときは元の位置とサイズに
例では、メモ帳を最小化または、最大化する直前の状態に戻します。
'================================================================ '= 別プロセスのウィンドウを元に戻す '= (ShowWindowAsync2.bas) '================================================================ #include "Windows.bi" ' クラス名またはキャプションを与えてウィンドウのハンドルを取得 Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$) ' 別のスレッドによって作成されたウィンドウの表示状態を設定 Declare Function Api_ShowWindowAsync& Lib "user32" Alias "ShowWindowAsync" (ByVal hWnd&, ByVal nCmdShow&) #define SW_RESTORE 9 'ウィンドウをアクティブ化し表示。ウィンドウがアイコン化または最大化されているときは元の位置とサイズに #define vbNullString ByVal 0 '値0の文字列。値0を持つ文字列。空文字列ではない Var Shared Text1 As Object Var Shared Button1 As Object Var Shared Button2 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() 'コマンドボタンを無効に設定 Button1.EnableWindow 0 'メモ帳を起動 Shell "Notepad.exe",,5 Text1.ShowWindow -1 End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var ClassName As String Var hWindow As Long Var Ret As Long 'クラス名でウィンドウハンドルを取得 ClassName = "Notepad" hWindow = Api_FindWindow(ClassName, vbNullString) 'ウィンドウハンドルを取得できたときは If hWindow <> 0 Then 'ウィンドウの表示状態を設定 Ret = Api_ShowWindowAsync(hWindow, SW_RESTORE) End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End