将焦点设置到任务栏
Set focus to the taskbar
我正在编写一个简单的 Visual Basic 应用程序来帮助我通过按任务栏按钮启动全局热键。
为此,我基本上将应用程序设置为最小化回到任务栏。然后我想激活任务栏本身(不是以前激活的程序),这样我就可以使用 SendKeys 来执行这些按键操作。在我的测试中,按键被注册了。只是我似乎无法找到如何从我的程序中实际激活任务栏。
如果我使用 AppActivate,我需要进程 ID 或 window 标题。
所以似乎最好使用 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 运行 的进程。
FindWindow 将 return 一个 hwnd 句柄,而不是一个进程 ID。您需要使用函数 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
我正在编写一个简单的 Visual Basic 应用程序来帮助我通过按任务栏按钮启动全局热键。
为此,我基本上将应用程序设置为最小化回到任务栏。然后我想激活任务栏本身(不是以前激活的程序),这样我就可以使用 SendKeys 来执行这些按键操作。在我的测试中,按键被注册了。只是我似乎无法找到如何从我的程序中实际激活任务栏。
如果我使用 AppActivate,我需要进程 ID 或 window 标题。
所以似乎最好使用 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 运行 的进程。
FindWindow 将 return 一个 hwnd 句柄,而不是一个进程 ID。您需要使用函数 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