2017-03-22 94 views
0

我在寫一個簡單的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

我不在乎。不能這樣做,我也沒有足夠的聲譽。等等,我可以舉報,不接受投票......我只是將它標記爲僞裝。 – LPChip

回答

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