ポップアップウィンドウの表示・非表示          <TOP>


FindWindow クラス名またはキャプションを与えてウィンドウのハンドルを取得
ShowOwnedPopups 指定したウィンドウが所有するすべてのポップアップウィンドウを表示したり隠したりする
SendMessage ウィンドウにメッセージを送信


例では、メモ帳の持っている検索ポップアップウィンドウを表示・非表示させています。

 

'================================================================
'= ポップアップウィンドウの表示・非表示
'=    (ShowOwnedPopups.bas)
'================================================================
#include "Windows.bi"

' クラス名またはキャプションを与えてウィンドウのハンドルを取得
Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)

' 指定したウィンドウが所有するすべてのポップアップウィンドウを表示したり隠したりする
Declare Function Api_ShowOwnedPopups& Lib "user32" Alias "ShowOwnedPopups" (ByVal hwnd&, ByVal fShow&)

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define WM_CLOSE &H10                   'ウィンドウ或いはアプリケーションをクローズされた

Var Shared Combo1 As Object
Var Shared Button1 As Object

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

Var Shared hWnd As Long

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long

    'コマンドボタンの無効を設定
    Button1.EnableWindow False

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

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

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

    'ウィンドウハンドルを取得できたときは
    If hWnd <> 0 Then
        Index = 1 - Combo1.GetCursel
        
        'ポップアップウィンドウの表示状態を設定
        Ret = Api_ShowOwnedPopups(hWnd, Index)
    End If

End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    Var Ret As Long

    'メモ帳を終了させる
    Ret = Api_SendMessage(hWnd, WM_CLOSE, 0, 0)
End Sub

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