2017-03-22 4 views
0

J'écris une simple application Visual Basic pour m'aider à lancer des raccourcis clavier globaux en appuyant sur un bouton de la barre des tâches. Pour ce faire, je définis fondamentalement l'application pour se réduire à la barre des tâches. Je veux ensuite activer la barre des tâches elle-même (pas le programme précédemment actif) afin que je puisse utiliser SendKeys pour faire ces touches. Dans mon test, les touches sont enregistrées. C'est juste que je n'arrive pas à trouver comment activer la barre des tâches de mon programme.Mettre l'accent sur la barre des tâches

Si j'utilise AppActivate, j'ai besoin de l'identificateur de processus ou du titre de la fenêtre.

Il semble donc préférable d'utiliser Windows API pour le faire, mais je ne reçois pas le résultat que je suis après et je dois faire quelque chose de mal.

Voici mon code:

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 

L'erreur que je reçois est qu'il n'y a pas de processus en cours d'exécution de cette ID.

+1

bien avec moi. Je ne peux pas me faire ça et je n'ai pas assez de réputation. Attendez, je peux signaler, ne pas voter à proximité ... Je l'ai juste signalé comme dupe. – LPChip

Répondre

0

FindWindow renvoie un handle hwnd et non un ID de processus. Vous devrez utiliser la fonction SetForegroundWindow pour l'activer.

Votre code est le suivant:

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