クラス名を指定し、アプリケーションの起動の確認と終了             <TOP>


あらかじめ知られているアプリケーションのクラス名を指定しておきます。

EXCEL→XLMAIN  WORD→OpusApp  メモ帳→Notepad  関数電卓→SciCalc

ラジオボタンをチェックしボタンをクリックします。

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

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

GetWindowRect サイズ等を取得する

 

起動されている場合そのフォーム幅、高さを表示します。

  

 

'================================================================
'= クラス名で起動の確認と終了
'=    (FindWindow4.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

' ウィンドウの座標をスクリーン座標系で取得
Declare Function Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT)

' クラス名またはキャプションを与えてウィンドウのハンドルを取得
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&, lParam As Any)

#define WM_CLOSE &H10                   'ウィンドウ或いはアプリケーションをクローズされた
#define vbNullString byval 0            '値0の文字列。値0を持つ文字列。空文字列ではない

Var Shared Radio(3) As Object
Var Shared Text(1) As Object
Var Shared Button(2) As Object

For i = 0 To 3
    If i < 2 Then Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14
    If i < 3 Then Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1))) : Button(i).SetFontSize 14
    Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) : Radio(i).SetFontSize 14
Next

Var Shared rd(3) As String
Var Shared Flg As byte
Var Shared hWnd As Long
Var Shared FileName As String

'================================================================
'= クラス名で起動の確認と終了
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    rd(0) = "XLMAIN"
    rd(1) = "OpusApp"
    rd(2) = "Notepad"
    rd(3) = "SciCalc"

    Flg = 0
    FileName = "Excel.exe"
    Button(1).EnableWindow 0
End Sub

'================================================================
'= クラス名で起動の確認と終了
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var rct As RECT
    Var Ret As Long

    'クラス名を与えてAPPのハンドルを取得
    '起動中ならハンドルが返り、起動していなければ0が返る
    hWnd = Api_FindWindow(rd(Flg), vbNullString)
    Ret = Api_GetWindowRect(hWnd, rct)

    If hWnd = 0 Then
        Text(1).ShowWindow 0
        Text(0).SetWindowText "【" & rd(Flg) & "】は起動されていません。"
        Button(0).EnableWindow -1
        Button(1).EnableWindow 0
    Else
        Text(1).ShowWindow -1
        Text(0).SetWindowText "【" & rd(Flg) & "】は起動されています。"
        Text(1).SetWindowText "FormWidth=" & Trim$(Str$(rct.Right - rct.Left)) & " / FormHeight=" & Trim$(Str$(rct.Bottom - rct.Top))

        Button(0).EnableWindow 0
        Button(1).EnableWindow -1
    End If
End Sub

'================================================================
'= 確認と終了
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    'エクセル(アプリ)が起動中なら終了する場合
    '指定のハンドルに終了のメッセージを送る
    Ret = Api_SendMessage(hWnd, WM_CLOSE, 0, 0)
    Text(0).SetWindowText "【" & rd(Flg) & "】は終了しました。"
    Text(1).SetWindowText ""
    Wait 100
    Button(0).EnableWindow -1
    Button(1).EnableWindow 0
    Text(0).SetWindowText ""
End Sub

'================================================================
'= 起動
'================================================================
Declare Sub Button3_on edecl ()
Sub Button3_on()
    Shell FileName, , 5
End Sub

'================================================================
'= 
'================================================================
Declare Sub Radio1_on edecl ()
Sub Radio1_on()
    Flg = 0
    FileName = "Excel.exe"
End Sub

Declare Sub Radio2_on edecl ()
Sub Radio2_on()
    Flg = 1
    FileName  = "Winword.exe"
End Sub

Declare Sub Radio3_on edecl ()
Sub Radio3_on()
    Flg = 2
    FileName  = "Notepad.exe"
End Sub

Declare Sub Radio4_on edecl ()
Sub Radio4_on()
    Flg = 3
    FileName  = "Calc.exe"
End Sub

'================================================================
'= クラス名で起動の確認と終了
'================================================================
While 1
    WaitEvent
Wend
STop
End