別プロセスのウィンドウを表示・非表示          <TOP>


FindWindow クラス名またはキャプションを与えてウィンドウのハンドルを取得
ShowWindowAsync 別のスレッドによって作成されたウィンドウの表示状態を設定
 

メモ帳を起動し、ウィンドウの表示・非表示を設定します。

 

'================================================================
'= 別プロセスのウィンドウを表示・非表示
'=     (ShowWindowAsync.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_HIDE 0                       '指定のウィンドウを非表示にし他のウィンドウをアクティブ化
#define SW_SHOW 5                       'ウィンドウをアクティブ化し現在の位置とサイズで表示

Var Shared Combo1 As Object
Var Shared Button1 As Object

Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Combo1.AddString "表示"
    Combo1.AddString "非表示"
End Sub

'================================================================
'=
'================================================================
Declare Sub Combo1_Change edecl ()
Sub Combo1_Change()
    Var ClassName As String
    Var WinHandle As Long
    Var sw As Long
    Var Ret As Long

    'クラス名でウィンドウハンドルを取得
    ClassName = "Notepad"
    WinHandle = Api_FindWindow(ClassName, ByVal 0)

    'ウィンドウハンドルを取得できたときは
    If WinHandle <> 0 Then
        If Combo1.GetCursel <> 0 Then sw = SW_HIDE Else sw = SW_SHOW
 
        'ウィンドウの表示状態を設定
        Ret = Api_ShowWindowAsync(WinHandle, sw)
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()

    'コマンドボタンを無効に設定
    Button1.EnableWindow 0

    'メモ帳を起動
    Shell "Notepad.exe", , 5
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End