Exécuter une action grâce aux touches [Résolu]

- - Dernière réponse :  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.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
je pense à l'API
GetAsyncKeyState

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
0
Merci
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".
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
0
Merci
Ici j'appelle l'application inactive l'horloge. J’espère avoir bien compris ta réponse cette fois. ;D
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
0
Merci
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
Commenter la réponse de cs_ShayW
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
non, le procédé du RegisterHotKey est là pour, no soucy ^^

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
0
Merci
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.
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.