C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 関連ファイルを開いて閉じる


(過去ログ 104 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■62007 / inTopicNo.1)  関連ファイルを開いて閉じる
  
□投稿者/ TEPPEN (2回)-(2011/09/15(Thu) 12:33:25)

分類:[VB6 以前] 

ファイルを開いて閉じる事もやりたいのですが、可能でしょうか?
もしVB6で出来ないならばVisual Basic 2008でも構いませんので、
お願い致します。
下の様に二つ以上のファイルを開いて、フォームのボタン等を押せば
全部閉じる処理です。
Call Shell("notepad.exe a1.txt", vbNormalFocus)
Call Shell("notepad.exe a2.txt", vbNormalFocus)

引用返信 編集キー/
■62021 / inTopicNo.2)  Re[1]: 関連ファイルを開いて閉じる
□投稿者/ shu (995回)-(2011/09/15(Thu) 21:38:44)
No62007 (TEPPEN さん) に返信

VB.NET2008 でもよいということで

    Private proclist As New List(Of Process)

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim pr = Process.Start("notepad.exe", "ファイル名")
        pr.EnableRaisingEvents = True
        AddHandler pr.Exited, AddressOf Process_Exited
        proclist.Add(pr)
    End Sub

    Private Sub Process_Exited(ByVal sender As Object, ByVal e As EventArgs)
        Dim pr = DirectCast(sender, Process)
        proclist.Remove(pr)
    End Sub

    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        For Each pr In proclist
            pr.CloseMainWindow()
        Next
    End Sub

引用返信 編集キー/
■62027 / inTopicNo.3)  Re[1]: 関連ファイルを開いて閉じる
□投稿者/ 魔界の仮面弁士 (2355回)-(2011/09/15(Thu) 23:35:44)
No62007 (TEPPEN さん) に返信
> 関連ファイルを開いて閉じる
ここでいう「関連ファイル」というのは、何の事でしょうか?

> ファイルを開いて閉じる事もやりたいのですが、可能でしょうか?

VB6 であれば、有名なのはこの方法ですね。

  文書番号: 129797 - [VB] Win32 アプリケーションを起動させ、終了させる方法
  http://support.microsoft.com/kb/129797/ja

これ以外の手法としては、WM_CLOSE を PostMessage する方法が知られています。


また、API を使いたくないのであればこんな方法もあります。

Option Explicit

Private mProcesses As Collection

'メモ帳を起動する
Private Sub Command1_Click()
    Set mProcesses = New Collection
    mProcesses.Add Shell("notepad.exe C:\a.txt", vbNormalFocus)
    mProcesses.Add Shell("notepad.exe C:\b.txt", vbNormalFocus)
End Sub

'TaskKill コマンドを使って閉じる
Private Sub Command2_Click()
    If mProcesses Is Nothing Then Exit Sub
    If mProcesses.Count = 0 Then Exit Sub

    Dim procId As Variant
    For Each procId In mProcesses
        Shell "TASKKILL /PID " & CStr(procId), vbHide
    Next
    Set mProcesses = Nothing
End Sub

'別案。Win32_Process.Terminate メソッドを使っての強制終了。
Private Sub Command2_Click()
    If mProcesses Is Nothing Then Exit Sub
    If mProcesses.Count = 0 Then Exit Sub

    Dim wql As String, procId As Variant
    wql = ""
    For Each procId In mProcesses
        wql = wql & " OR ProcessId=" & CStr(procId)
    Next
    wql = "SELECT * FROM Win32_Process WHERE " & Mid(wql, 4)

    Dim oProc As Object, ret As Variant
    For Each oProc In GetObject("winmgmts:").ExecQuery(wql)
        ret = oProc.Terminate(0)
        Debug.Print "Terminate="; ret, "CommandLine="; oProc.CommandLine
    Next
    Set mProcesses = Nothing
End Sub

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -