外部アプリケーションの終了             <TOP>


電卓を起動しBUTTON2クリック時あらかじめ解っているクラス名から、アップリケーションのハンドルを取得、WM_CLOSE SendMessageして終了させています。

FindWindow ウインドウハンドル取得

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


例では、フォーム背景色をVisualBasic風の色に塗り潰しています。
 
マニフェストを作成し、WindowsXPスタイルで・・・

 

'================================================================
'= 外部アプリケーションの終了
'=    (FindWindow.bas)
'================================================================
#include "Windows.bi"

' システムの背景色を取得
Declare Function Api_GetSysColor& Lib "user32" Alias "GetSysColor" (ByVal nIndex&)

' 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウ(親を持たないウィンドウ)のハンドルを返す
Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)

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

#define COLOR_BTNFACE 15 '3Dオブジェクトの表面色
#define WM_CLOSE &H10 'ウインドウ或いはアプリケーションをクローズされた

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var rgbColor As Long

    'Buttonの表面色を取得(EDE9EC)
    rgbColor = Api_GetSysColor(COLOR_BTNFACE)

    'Mainformを取得色で塗り
    SetBackColor rgbColor

    '画面を消去し
    cls

    'Mainformを表示
    ShowWindow -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Shell "Calc.exe"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var lpClassName$ As String
    Var lpCaption$ As String
    Var hWnd As Long
    Var Res As Long

    lpClassName$ = "SciCalc"
   'lpClassName$ = "CalcFrame"  'Windows 7
    lpCaption$ = "電卓"

    '電卓ウインドウのハンドルを取得
    hWnd = Api_FindWindow(lpClassName$, lpCaption$)

    '電卓を終了させる
    Res = Api_SendMessage(hWnd, WM_CLOSE, 0, 0)
End Sub

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