クラス名を指定し、アプリケーションの起動の確認と終了 <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