ウィンドウのメッセージキューにメッセージを送る          <TOP>


ウィンドウのメッセージキューにメッセージをおくります。

PostMessage 指定のウィンドウにメッセージを送る

FindWindow クラス名またはキャプションを与えてウィンドウのハンドルを取得

GetModuleFileName ロードされている事項モジュールのフルパス名を取得

 

左ボタン:電卓を見つけた場合そのウィンドウにCLOSE命令を送る。    右ボタン:自アプリケーションにCLOSE命令を送る。

 

'================================================================
'= ウィンドウのメッセージキューにメッセージを送る
'=    (PostMessage.bas)
'================================================================
#include "Windows.bi"

' 指定のウィンドウのメッセージキューにメッセージを送る
Declare Function Api_PostMessage& Lib "user32" Alias "PostMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

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

' ロードされている実行モジュールのフルパス名を取得
Declare Function Api_GetModuleFileName& Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule&, ByVal lpFileName$, ByVal nSize&)

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

Var Shared Button1 As Object
Var Shared Button2 As Object

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

'================================================================
'= 電卓が見つかった場合、電卓を終了
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hWnd As Long
    Var Ret As Long

    hWnd = Api_FindWindow(ByVal 0, "電卓")
    If hWnd <> 0 Then
        A% = MessageBox(GetWindowText, "電卓を終了しますか?", 1, 1)
    else
        A% = MessageBox(GetWindowText, "電卓は見つかりません!", 0, 2)
        Exit Sub
    End If
    If A% = 1 Then Exit Sub

    Ret = Api_PostMessage(hWnd, WM_CLOSE, 0, ByVal 0)
End Sub

'================================================================
'= 自アプリケーションを終了
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Ret As Long
    Var ExePath As String * 128
    
    Ret = Api_GetModuleFileName(GethInst, ExePath, Len(ExePath))

    A% = MessageBox(ExePath, "自アプリケーションを終了しますか?", 1, 1)
    If A% = 1 Then Exit Sub

    Ret = Api_PostMessage(GethWnd, WM_CLOSE, 0, ByVal 0)
End Sub

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