SHELL で起動したアプリケーションの閉じ方は?


だん  2006-09-12 09:25:12  No: 133206

アプリケーション内で
Shell を使い実行したプログラムを
同アプリケーション内で終了させる
にはどのようにしたら良いですか?


VBレスキュー(花ちゃん)  URL  2006-09-12 15:50:10  No: 133207

下記ではどうでしょう?
ttp://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips100.htm


我龍院忠太  2006-09-12 18:21:37  No: 133208

TerminateProcessは強制終了なので少々具合の悪い場合があります。
(編集通のテキストなどがいきなり閉じてしまう。)
基本的には、PostMassage又SendMessageを使う方法が良いのですが、
アプリによってはハンドルが取れない場合がありその場合は
美しくないのですが、Sendkeysを使います。
メモ帳での両方のサンプルを簡単に書いておきます。

Private Declare Function SendMessageA Lib "user32" _
    (ByVal hwd As Long, ByVal Msg As Long, ByVal wpara As Long, _
    ByVal lpara As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetExitCodeProcess Lib "Kernel32" _
    (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" _
    (ByVal dwAccess As Long, ByVal fInherit As Integer, _
    ByVal hObject As Long) As Long
Private Declare Function CloseHandle Lib "Kernel32" _
    (ByVal hObject As Long) As Long
Private Const STILL_ACTIVE = &H103&
Private Const PROCESS_QUERY_INFORMATION = &H400&
Private Const WM_CLOSE = 16
Private lngProcessID As Long
Private hProcess As Long
Private Sub Command1_Click()
    '開く
    lngProcessID = Shell("notepad.exe", vbNormalFocus)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, lngProcessID)
End Sub
Private Sub Command2_Click()
    'SendKeyで閉じる
    Dim lngEndCode As Long
    Dim lngEndRet   As Long
    lngEndRet = GetExitCodeProcess(hProcess, lngEndCode)
    If lngEndRet <> 0 And lngEndCode = STILL_ACTIVE Then
        AppActivate lngProcessID
        SendKeys "%FX", True
        DoEvents
        lngEndRet = CloseHandle(hProcess)
    End If
End Sub
Private Sub Command3_Click()
    'SendMessageで閉じる
    Dim lngHwd As Long
    lngHwd = FindWindow("notepad", vbNullString)
    SendMessageA lngHwd, WM_CLOSE, 0, 0
End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加