【问题标题】:Killing other applications Window杀死其他应用程序窗口
【发布时间】:2023-03-09 23:40:01
【问题描述】:

我有问题,我在一个网络中,每个人都通过msg 发送消息。通过它真的很烦人,我想杀死消息框进程。在 csrss.exe 下运行是不可能的。当我查看任务管理器时,我注意到,当打开 csrss.exe 的树结构时,有消息框,我可以杀死它。有谁知道如何在 Visual Basic 中做到这一点。

【问题讨论】:

  • msg 到底是什么?
  • 您可以尝试使用 UI 自动化,使用 WindowPattern.WindowOpenedEvent。获取csrss.exe 进程的进程ID,当您收到新窗口打开的通知时,将窗口进程ID 与您存储的进程ID 进行比较,如果匹配则关闭窗口。要关闭窗口,您需要获取自动化元素的 WindowPatter 并使用其 Close() 方法(例如,Dim pattern As object = Nothing) If [Element].TryGetCurrentPattern(WindowPattern.Pattern, pattern) Then dim wPattern = DirectCast(pattern, WindowPattern) wPattern.Close() end if
  • 您可以找到here 一个WindowPattern.WindowOpenedEvent 通知的VB.Net 实现。顺便说一句,我从未在这种情况下进行过测试,所以按原样

标签: vb.net windows-server


【解决方案1】:

一个简单的网络搜索让我找到了this question,它已经有了一些很好的答案。

通过一些工作,我想出了这个解决方案。它按名称(csrss)查找进程,然后按窗口标题(Message from)过滤。

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 嘿怎么了

收到消息

这是任务

以及代码看到的内容

它在p.CloseMainWindow() 调用时关闭。它还将关闭与描述匹配的任何其他窗口,因为它不限于一个。这应该满足您的要求。

【讨论】:

    【解决方案2】:

    这个问题有一个正确的答案,我找到了一个使用 win32 api (PInvokes) 特别是 user32.dll 的解决方案。它提供了GetWindowGetWindowThreadProcessIdCloseWindow等方法,解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2012-02-16
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多