他のEXEのハンドルを取得 |
他のEXEのハンドルを取得しVBから終了する (073) | |
フォームの General Declarations セクションに記入 Option Explicit 'SampleNo=073 WindowsXP VB6.0(SP5) 2002.05.16 'クラス名又はキャプションタイトルを与えて 'ウィンドウのハンドルを取得する(P81) Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long '指定のウィンドウにメッセージを送る(P750) Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long 'アプリケーションをクローズする時 'ウィンドウに送られるメッセージ(P835) Private Const WM_CLOSE As Long = &H10 Dim strClassName As String 'クラス名 Dim strCaptionName As String 'キャプション名 Private Sub hwndAcquire() 'ハンドル取得及び終了処理のサブプロシージャ Dim hwnd As Long Dim ret As Long If Len(strClassName) Then 'クラス名を与えてハンドルを取得 '起動中ならハンドルが返り、起動していなければ 0 が返る hwnd = FindWindow(strClassName, vbNullString) ElseIf Len(strCaptionName) Then 'キャプション名を与えてハンドルを取得する場合 'strCaptionName = "Microsoft Excel - Book1" '電卓の場合 "電卓" hwnd = FindWindow(vbNullString, strCaptionName) End If '指定のハンドルに終了のメッセージを送る ret = SendMessage(hwnd, WM_CLOSE, 0&, 0&) End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 'クラス名の取得 Excel="XLMAIN" 電卓=SciCalc strClassName = Text1.Text hwndAcquire strClassName = "" End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 'キャプション名の取得 (Microsoft Excel - Book1 電卓) strCaptionName = Text2.Text hwndAcquire strCaptionName = "" End If End Sub |
|
電卓等はキャプション名が固定されているが、Excel 等はブック名等が付加されるためその都度変わります。 変わるものは、クラス名で、変わらないものはキャプション名で取得した方が便利です。 クラス名等の取得のサンプルプログラムはMSのここにあります。 このサンプルでは、次のウィンドウ情報を取得できます。 |
2002/05/16