Exécuter une action grâce aux touches

Résolu
Utilisateur anonyme - 21 mars 2012 à 14:44
 Utilisateur anonyme - 22 mars 2012 à 18:57
Bonjour,
je vous contacte en ce beau jour pour vous demandez de l'aide :D.

J'aimerai que lorsque j'appuie sur la touche "a" par exemple une action se fasse. Et que tout cela soit dans 1 timer car j'en aurai besoin sans que l'application soit active.

Merci beaucoup,
Sorpia.

13 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 mars 2012 à 06:37
je pense à l'API
GetAsyncKeyState

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 mars 2012 à 16:06
Bonjour, Sorpia,

Et que tout cela soit dans 1 timer car j'en aurai besoin sans que l'application soit active.


Et dans quoi (quelle application inactive) mets-tu donc tant le Timer que les instructions à exécuter ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
21 mars 2012 à 16:27
En fait je me suis fait une petite horloge et j'aimerai avoir des raccourcis clavier pour la faire apparaître/disparaître. Donc si je la fait disparaître et il faut un timer qui continue à tourner pour repéré quand j'appuie sur la touche "a".
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 mars 2012 à 16:44
Donc ==>> relis mon message et réponds-y clairement, s'il te plait


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
21 mars 2012 à 17:07
Ici j'appelle l'application inactive l'horloge. J’espère avoir bien compris ta réponse cette fois. ;D
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 mars 2012 à 17:17
Bien
Et depuis quelle appli (forcément active) appelles-tu l'appli horloge "inactive" (tant que non activée) ?
Ce sont ces précisions, qui manquent !
Comme dit plus haut : il faut nécessairement que le code à exécuter soit dans une appli.
Décrit en peu de mots techniques tout le mécanisme que tu envisages
Etat 1 : rien n'est actif
Etat 2 : quelle appli contenant quelles instructions doit lancer quoi ?
etc ...

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
21 mars 2012 à 20:27
Bon, je recommence à zéro on oublie tous.

On va dire que j'ai une form, ici form1 qui par exemple a un bouton dessus qui permet de cacher la form1 :
me.hide


Et j'ai un timer, ici timer1.
Le code que je dois trouvez doit se mettre dans le timer1 :
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
'ici
    End Sub


Ce code qui m'est encore inconnue doit, lorsque le logiciel est "caché", si j'appuie sur la touche "a" ou autre (de préférences une lettre) "montrer" le logiciel :
me.show



Voici le code au total :

Public Class Form1

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        ' code à trouvez pour que si j'appuie sur la touche "a" ou autre, la fenêtre est montrer.
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.Hide()
    End Sub
End Class



Merci de ton aide en avance en espérant que cette fois j'ai été assez précis.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 mars 2012 à 20:39
Ru n'as alors, pour ce faire, aucun besoin d'utiliser un Timer !
Il te suffit de :
- 1) définir une hotkey (cela se fait en utilisant la fonction RegisterHotKey de la librairie user32 de l'Api de Windows , dont tu trouveras un exemple d'utilisation sur le site Tapez le texte de l'url ici.
(a mettre en oeuvre dans ton appli tournant en tâche de fond)
- 2) à chaque pression de la touche ainsi définie en hotkey :
--- si l'appli à lancer (ton horloge) ne l'est pas encore (lancée) ===>> la lancer
--- si déjà lancée : la fermer
(ces deux actions nécessitent l'utilisation de la fonction FindWindow de l'Api de Windows (à voir également sur le site précité).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 mars 2012 à 20:56
Salut Sorpia
C'est l'horloge de BigBen

  Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        If e.KeyChar "a" Or e.KeyChar "A" Then
            Me.Show()
        End If
    End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 mars 2012 à 08:04
Bonjour, RenField,
Quelque-chose de gênant avec RegisterHotKey ?
Je viens d'essayer ceci avec VB6 (à modifier très légèrement pour VB.Net).
Ici, après avoir lancé le projet :
- une pression sur A montre la calculatrice
- une nouvelle pression la cache
- etc...
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312
Private Type Msg
    hWnd As Long
    Message As Long
    wParam As Long
    lParam As Long
End Type
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Sub ProcessMessages()
  Dim Message As Msg
  Do
     WaitMessage
     If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
       toto = FindWindow(vbNullString, "Calculatrice")
       If toto = 0 Then
         Shell ("calc.exe"), vbNormalFocus
       Else
         PostMessage toto, &H10, 0&, 0&
       End If
    End If
    DoEvents
 Loop
End Sub

Private Sub Form_Activate()
    Me.Hide
    RegisterHotKey Me.hWnd, &HBFFF&, 0, vbKeyA
    ProcessMessages
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call UnregisterHotKey(Me.hWnd, &HBFFF&)
End Sub


Rien n'interdit, bien sûr, de remplacer le DO ... Loop par des instructions dans un timer, si l'on craint une trop grande "gourmandise". Mais je ne vois rien d'alarmant de dénoncé sur ma machine, y compris avec ce do ... loop.

Bien sur : il sera plus prudent de ne pas choisir une lettre (ici la toyuche A), mais une touche de fonction ou une séquence de 2 touches.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 mars 2012 à 11:07
non, le procédé du RegisterHotKey est là pour, no soucy ^^

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Utilisateur anonyme
22 mars 2012 à 14:03
Re-bonjour.
Renfield pourrais-tu s'il te plaît me faire en exemple pour utilisez GetAsyncKeyState car j'avais déjà fait des essais mais ils n'étaient pas concluant.

ucfoutu je regarde ça en rentrant chez moi ce soir car hier soir j'était trop crevé ^^.

ShayW j'y avait pensé aussi mais si je sors de l'application elle ne saura plus si j'appuie sur la touche A ou a. C'est pour cela qu'il me fallait un timer.

Je vous remerci pour vos réponse,
Au revoir.
0
Utilisateur anonyme
22 mars 2012 à 18:57
Voili voilou j'ai trouvé !

Voici le code :
Public Class Form1

    Private Declare Function key Lib "User32" Alias "GetAsyncKeyState" (ByVal Key As Keys) As Keys

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick

        If key(Keys.A) Then
            Me.TopMost = True
            Me.TopMost = False
        End If

    End Sub
End Class


Comme vous pouvez le voir j'ai mis :
 Me.TopMost = True
            Me.TopMost = False


Il n'y aurai pas une manière plus pratique ?

Merci,
Sorpia.
0
Rejoignez-nous