将焦点设置到任务栏

时间:2017-03-22 07:39:52

标签: vb.net taskbar

我正在编写一个简单的Visual Basic应用程序来帮助我按下任务栏按钮启动全局热键。

为此,我基本上将应用程序设置为最小化回到任务栏。然后我想激活任务栏本身(不是以前的活动程序),所以我可以使用SendKeys来执行这些按键。在我的测试中,按键被注册。它只是我似乎无法找到如何从我的程序中实际激活任务栏。

如果我使用AppActivate,我需要processID或窗口标题。

所以最好使用Windows API来做到这一点,但是我没有得到结果,我要么做错了。

这是我的代码:

Public Class Form1
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

    Private Sub Form1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus
        Me.WindowState = FormWindowState.Minimized
        Dim intReturn As Integer = FindWindow("Shell_traywnd", "")
        AppActivate(intReturn)
        SendKeys.Send("%1")
        MsgBox("test")

    End Sub

End Class

我得到的错误是这个ID没有运行过程。

1 个答案:

答案 0 :(得分:0)

FindWindow将返回一个hwnd句柄,而不是一个processID。您需要使用函数SetForegroundWindow来激活它。

您的代码如下:

Public Class Form1
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Integer) As Integer

    Private Sub Form1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus
        Me.WindowState = FormWindowState.Minimized
        Dim intReturn As Integer = FindWindow("Shell_traywnd", "")
        SetForegroundWindow(intReturn)
        SendKeys.Send("%1")
        MsgBox("test")

    End Sub

End Class