终止其他应用程序 Window
Killing other applications Window
我有问题,我在一个网络中,每个人都通过 msg 发送消息。通过它真的很烦人,我想过杀死消息框进程。 运行 在 csrss.exe 下那是不可能的。当我查看我注意到的任务管理器时,当打开 csrss.exe 的树结构时,有一个消息框,我可以杀死它。有谁知道如何在 Visual Basic 中做到这一点。
一个简单的网络搜索让我找到了 this question,其中已经有一些很好的答案。
经过一些努力,我想出了这个解决方案。它按名称 (csrss) 查找进程,然后按 window 标题过滤(来自 的消息)。
Sub Main()
killProcesses("csrss", "Message from")
End Sub
Private Sub killProcesses(processName As String, mainWindowTitle As String)
Dim processes = Process.GetProcesses().
Where(Function(p) p.ProcessName.Contains(processName)).
Where(Function(p) p.MainWindowTitle.Contains(mainWindowTitle))
' (Where clauses can be combined into one of course)
For Each p In processes
p.CloseMainWindow()
Next
End Sub
它是这样工作的。发送消息
C:\Users\djv>msg djv hey whats up
收到消息
这是任务
以及代码所见
它在 p.CloseMainWindow()
调用时关闭。它还将关闭与描述匹配的任何其他 window,因为它不限于一个。这应该可以满足您的要求。
为了让问题有一个正确的答案,我找到了一个使用 win32 api (PInvokes) 的解决方案,特别是 user32.dll。它提供了GetWindow
、GetWindowThreadProcessId
和CloseWindow
等方法,解决了我的问题。
我有问题,我在一个网络中,每个人都通过 msg 发送消息。通过它真的很烦人,我想过杀死消息框进程。 运行 在 csrss.exe 下那是不可能的。当我查看我注意到的任务管理器时,当打开 csrss.exe 的树结构时,有一个消息框,我可以杀死它。有谁知道如何在 Visual Basic 中做到这一点。
一个简单的网络搜索让我找到了 this question,其中已经有一些很好的答案。
经过一些努力,我想出了这个解决方案。它按名称 (csrss) 查找进程,然后按 window 标题过滤(来自 的消息)。
Sub Main()
killProcesses("csrss", "Message from")
End Sub
Private Sub killProcesses(processName As String, mainWindowTitle As String)
Dim processes = Process.GetProcesses().
Where(Function(p) p.ProcessName.Contains(processName)).
Where(Function(p) p.MainWindowTitle.Contains(mainWindowTitle))
' (Where clauses can be combined into one of course)
For Each p In processes
p.CloseMainWindow()
Next
End Sub
它是这样工作的。发送消息
C:\Users\djv>msg djv hey whats up
收到消息
这是任务
以及代码所见
它在 p.CloseMainWindow()
调用时关闭。它还将关闭与描述匹配的任何其他 window,因为它不限于一个。这应该可以满足您的要求。
为了让问题有一个正确的答案,我找到了一个使用 win32 api (PInvokes) 的解决方案,特别是 user32.dll。它提供了GetWindow
、GetWindowThreadProcessId
和CloseWindow
等方法,解决了我的问题。