我正在编写一个简单的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没有运行过程。
答案 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