2

タイトルで特定のウィンドウを閉じる方法を探しています。

で試しましたProcess.GetProcessesByName; しかし、このケースでは特に機能していません。

API または類似のメソッドを検索しています (C# ではなく、いくつかのコードが表示されますが、vb.net では正常に動作しません)

ありがとう!


アップデート

返信いただきありがとうございます。しかし、あなたが以下に説明する解決策にはまだ問題があります。2 つのウィンドウを制御する唯一のプロセスがあります。次に、ウィンドウ #2 を閉じる (または強制終了する) と、すぐに最初のウィンドウを閉じます (画像を参照)。

このため、API メソッドを最初から使用することにしました。

2番目のウィンドウを閉じたいだけです。

スクリーンショット

4

2 に答える 2

6

このようなものを使用してみてください。を使用Process.MainWindowTitleしてタイトル テキストを取得Process.CloseMainWindowし、UI を閉じます。プロセスを強制終了するよりも少し優雅です。

注: 含むは大文字と小文字を区別して検索します

Imports System.Diagnostics
Module Module1

    Sub Main()
        Dim myProcesses() As Process = Process.GetProcesses

        For Each p As Process In myProcesses
            If p.MainWindowTitle.Contains("Notepad") Then
                p.CloseMainWindow()
            End If
        Next

    End Sub

End Module

Win API関数がこのようなことを試みる限り。親ウィンドウを閉じると、子ウィンドウも閉じることに注意してください。

Module Module1
    Private Declare Auto Function FindWindowEx Lib "user32" (ByVal parentHandle As Integer, _
                                               ByVal childAfter As Integer, _
                                               ByVal lclassName As String, _
                                               ByVal windowTitle As String) As Integer

    Private Declare Auto Function PostMessage Lib "user32" (ByVal hwnd As Integer, _
                                                            ByVal message As UInteger, _
                                                            ByVal wParam As Integer, _
                                                            ByVal lParam As Integer) As Boolean

    Dim WM_QUIT As UInteger = &H12
    Dim WM_CLOSE As UInteger = &H10


    Sub Main()
        Dim handle As Integer = FindWindowEx(0, 0, Nothing, "YourFormsTitle")
        PostMessage(handle, WM_CLOSE, 0, 0)
    End Sub

End Module
于 2012-06-29T02:05:06.033 に答える
0

コード スニペットを見せてくれませんでした。おそらく、これを試すことができます。

Dim processList() As Process
processList = Process.GetProcessesByName(ListBox1.Items(ListBox1.SelectedIndex).ToString)

For Each proc As Process In processList
    If MsgBox("Terminate " & proc.ProcessName & "?", MsgBoxStyle.YesNo, "Terminate?") = MsgBoxResult.Yes Then
        Try
            proc.Kill()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End If
Next

上記のスニペットでは、 にウィンドウ タイトルのリストがありますlistBox。スニペットは、ウィンドウ タイトルのリストボックスを反復処理し、タイトルが見つかった場合は、プロセスを終了するかどうかをメッセージで尋ねます。

于 2012-06-29T02:04:34.557 に答える