別プロセスのウィンドウを元に戻す          <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