IE(複数起動)の終了          <TOP>


IEが複数起動されている場合一度に終了させています。

GetWindow ウィンドウハンドルを取得

GetClassName クラス名を取得

SendMessage ウィンドウにメッセージを送信

 

参照

複数のウィンドウを検索

 

'================================================================
'= IE(複数)を終了させる
'=    (IEClose.bas)
'================================================================
#include "Windows.bi"

' 指定されたウィンドウと指定された関係にあるウィンドウのハンドルを取得
Declare Function Api_GetWindow& Lib "user32" Alias "GetWindow" (ByVal hWnd&, ByVal wCmd&)

' ウィンドウのクラス名を取得
Declare Function Api_GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal hWnd&, ByVal lpClassName$, ByVal nMaxCount&)

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define WM_SYSCOMMAND &H112             'システムメニューが操作された
#define SC_CLOSE &HF060                 '閉じる
#define GW_HWNDFIRST 0                  '最前面のウィンドウを検索
#define GW_HWNDNEXT 2                   '基準となるウィンドウの次のウィンドウを検索

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var ClassName As String
    Var hWnd As Long
    Var Ret As Long
  
    '最前面のウィンドウハンドルを取得
    hWnd = Api_GetWindow(GethWnd, GW_HWNDFIRST)

    '見つかったなら、クラス名が"IEFrame"出あれば「終了」を繰り返す
    Do While hWnd <> 0
        ClassName = String$(256, " ")

        'クラス名を取得
        Ret = Api_GetClassName(hWnd, ClassName, 255)
        ClassName = Left$(ClassName, InStr(ClassName, Chr$(0)) - 1)

        If ClassName = "IEFrame" Then
            Ret = Api_SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0)
        End If

        hWnd = Api_GetWindow(hWnd, GW_HWNDNEXT)
    Loop
End Sub

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