【问题标题】:Minimize all other applications except my application最小化除我的应用程序之外的所有其他应用程序
【发布时间】:2015-08-24 12:38:34
【问题描述】:

我想最小化除我自己以外的所有应用程序,但使用下面的代码,我的应用程序不再显示。

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_LWIN = &H5B


Sub minimizeAllOthers()
Me.WindowState=WindowState.Minimized
keybd_event(VK_LWIN, 0, 0, 0)
keybd_event(77, 0, 0, 0)
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)

While Me.WindowState=WindowState.Minimized
Me.WindowState=WindowState.Normal
Me.windowstate=WindowState.Maximized
Threading.Thread.Sleep(400)
End Sub

【问题讨论】:

  • 通常,在这种情况下最好的方法是 Me.TopMost = true。用户将独立于其他正在运行的应用程序看到您应用程序的活动窗口。
  • @varocarbas 我正在从我的应用程序启动其他窗口
  • 不确定我是否理解您的观点,但 Me.TopMost 比 Me.WindowState 更“强大”。如果您使用 Me.TopMost,您的应用程序的活动窗口肯定会位于任何其他窗口的顶部。
  • @varocarbas Me.TopMostMe.WindowState 完全不同!
  • @Drarig29 OP 表示原始海报。这是一个首字母缩略词,在大多数论坛中用于指代撰写初始帖子(或在此处提问)的人。我已经看到了您的修改,但不确定它是否提供了预期的效果。还是等OP的反馈吧。

标签: vb.net windows window


【解决方案1】:

要检测表单何时被最小化,here's 是一个很好的解决方案(阅读解决方案的“在 之后做出反应”部分)。

所以这是一个有效的代码:

Dim Minimizing As Boolean = False
Dim Normalizing As Boolean = False

Sub minimizeAllOthers()
    Minimizing = True
    keybd_event(VK_LWIN, 0, 0, 0)
    keybd_event(77, 0, 0, 0)
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    minimizeAllOthers()
End Sub

Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
    If Minimizing AndAlso Me.WindowState = FormWindowState.Minimized Then
        Me.WindowState = FormWindowState.Normal
        If Normalizing Then
            Minimizing = False
        End If
        If Normalizing Then Normalizing = False Else Normalizing = True
    End If
End Sub

我希望它会有所帮助,并且我已经正确理解了您的问题...

【讨论】:

  • Minimized 对您意味着什么?对我来说,that's 是一个最小化的软件。我这么说是因为它非常适合我。
  • 这意味着当你按下“-”按钮时会发生什么。我希望我的应用仍然显示,但这不会发生,它只是最小化所有内容,然后我的应用在屏幕上闪烁,最后也被最小化。
  • @geek1011 你能在你的问题中添加你所有的代码吗? (然后是keybd_event sub、Const VK_LWINConst KEYEVENTF_KEYUP
  • 你在哪里声明 MinimizingNormalizing 布尔值?使用我编辑的代码重试。
  • 还是不行,我试过你的代码。希望我没有给你带来太多麻烦。
【解决方案2】:

你可以试试这个^_^

Imports System.Runtime.InteropServices

Module ManipulateWindows

    Const SW_HIDE As Integer = 0
    Const SW_RESTORE As Integer = 1
    Const SW_MINIMIZE As Integer = 2
    Const SW_MAXIMIZE As Integer = 3

    <DllImport("User32")> _
    Private Function ShowWindow(ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
    End Function

    Public Sub Main()

        'iterate through all the open processes.
        For Each p As Process In Process.GetProcesses    

            'Get the Window Handle
            Dim hWnd as integer = CType(p.MainWindowHandle, Integer)

            'Write out the title of the main window for the process.
            System.Console.WriteLine(p.MainWindowTitle)

            'Minimize the Window
            ShowWindow(hWnd, SW_MINIMIZE)
        Next p    
    End Sub    
End Module

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多