Assigner une touche de raccourci à la fermeture d'un programme

Présentation
Permet de sélectionner, un programme à fermer lors de l'action sur la touche ESC quelque soit l'application active.
Téléchargement
0  0 
Téléchargé 9 fois Voir les 10 commentaires
Détails
Catégories : Sécurité
Avatar de Francis MILLET
Rédacteur / Modérateur
Voir tous les téléchargements de l'auteur
Licence : Non renseignée
Date de mise en ligne : 14 novembre 2010




Avatar de Delbeke Delbeke - Membre expert https://www.developpez.com
le 30/09/2006 à 19:10
Avec les api de windows , ca devrait pouvoir se faire. En vb, recuperer un evenement sur l'appui d'une touche sans que vb aie le focus me paraît pour le moins difficile.
Avatar de ProgElecT ProgElecT - Rédacteur/Modérateur https://www.developpez.com
le 30/09/2006 à 20:58
Bonsoir

sur une Form
créer un popmenu avec Créateur de menus comme suit
caption = Arret du prog
Name = Cmds ...
... caption = Touche Ctrl+W
... Name = Cmd
... Shortcut = Ctrl+W

Code : Sélectionner tout
1
2
3
Private Sub Cmd_Click()
Unload Me
End Sub
Lancer le prog, appuis des touches Ctrl+W, le prog prend fin.

Il faut que le prog ai le focus au moment de l'appui sur les touches
Avatar de ProgElecT ProgElecT - Rédacteur/Modérateur https://www.developpez.com
le 30/09/2006 à 21:17
Une autre solution sachant que,
Source MSDN
KeyPreview, propriété

Renvoie ou définit une valeur qui détermine si les événements du clavier pour les feuilles sont appelés avant ceux destinés aux contrôles. Les événements du clavier sont KeyDown, KeyUp et KeyPress.

Syntaxe

object.KeyPreview [= boolean]

La syntaxe de la propriété KeyPreview comprend les éléments suivants :

Élément Description
object Expression d'objet qui prend la valeur d'un objet figurant dans la liste "Application".
boolean Expression booléenne qui spécifie la façon dont les événements sont reçus, comme indiqué dans la section Valeurs.

Valeurs

L'élément boolean peut prendre les valeurs suivantes :

Valeur Description
True La feuille reçoit les événements du clavier avant le contrôle actif.
False (Valeur par défaut) Le contrôle actif reçoit les événements du clavier, mais pas la feuille.

Remarques

Vous pouvez utiliser la propriété KeyPreview pour créer une procédure de gestion du clavier destinée à une feuille. Par exemple, lorsqu'une application met en œuvre des touches de fonction, il est préférable de traiter les frappes de touches au niveau de la feuille, au lieu d'écrire un code pour chaque contrôle susceptible de recevoir les événements du clavier.

Si une feuille n'a pas de contrôles visibles et actifs, elle reçoit automatiquement tous les événements du clavier.

Pour gérer les événements du clavier au niveau de la feuille uniquement et empêcher que les contrôles reçoivent ces événements, affectez la valeur 0 à KeyAscii dans l'événement KeyPress de la feuille et à KeyCode dans l'événement KeyDown de la feuille.

Note Certains contrôles interceptent les événements du clavier, de sorte que la feuille ne les reçoit pas. C'est le cas, par exemple, de la touche ENTRÉE lorsque le focus est sur un contrôle CommandButton, et des touches de direction lorsque le focus est sur un contrôle ListBox.
Mettre donc Form.KeyPreview = True dans le projet
et le code suivant

Code : Sélectionner tout
1
2
3
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then  Unload Me ' Escape
End Sub
Avatar de Delbeke Delbeke - Membre expert https://www.developpez.com
le 30/09/2006 à 22:39
Je suis d'accord avec toi, ProgElec, mais çà ne resouldra pas le problème de Morgan 47 à savoir : affecter une touche au masquage d'un programme de jeu, pas toucher au programme vb lol
C'est le programme de jeu qui a le focus, donc le prog vb ne recoit pas les evenements clavier
Avatar de ProgElecT ProgElecT - Rédacteur/Modérateur https://www.developpez.com
le 01/10/2006 à 0:00

J'ai mal interpreté la demande, par contre il faut que je recherche dans mes sources car j'ai deja fait ce type de prog pour fermer des progs qui etaient lancés par un colégue indelicat pour surveiller mon pc (au boulot), mais je devai passer par les fonction EnumWindows, GetWindowText et SendMessage

Ce soir je n'ai plus toute ma tête , mais promis je vai retrouver
Bonsoir
Avatar de morgan47 morgan47 - Membre actif https://www.developpez.com
le 01/10/2006 à 2:53
merci de vos réponces a tous
vous devez vous dire quel branleur ce jeune, lol je vous le fair pas dire.
Mais quand on passe 8 heure par jous devant l'ordi faut bien se détendre entre les interclasse :-P
Avatar de ThierryAIM ThierryAIM - Expert éminent https://www.developpez.com
le 01/10/2006 à 12:08
Citation Envoyé par Delbeke
En vb, recuperer un evenement sur l'appui d'une touche sans que vb aie le focus me paraît pour le moins difficile.
Une form et un module :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'-- Code module
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

Declare Function SetTimer Lib "User32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "User32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Long) As Integer

Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    If GetAsyncKeyState(vbKeyEscape) <> 0 Then
        SetWindowPos Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
        SetWindowPos Form1.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    End If
End Sub


'-- Code Form
Private Sub Form_Load()
   SetTimer Me.hWnd, 0, 1, AddressOf TimerProc ' on crée un timer
End Sub

Private Sub Form_Unload(Cancel As Integer)
    KillTimer Me.hWnd, 0 '-- arreter le timer
End Sub
Lancer l'appli
Aller ou l'on veut et appuyer sur la touche Escape
Avatar de ProgElecT ProgElecT - Rédacteur/Modérateur https://www.developpez.com
le 01/10/2006 à 14:19
Merci ThierryAIM
Bien que je ne suis pas le demandeur, pour le Fun
KillRacourci.zip (2.9Ko)
Avatar de ThierryAIM ThierryAIM - Expert éminent https://www.developpez.com
le 01/10/2006 à 14:37
et dire qu'on va donner des solutions à ces jeunes "branleurs" (dixit morgan47 ) pour flouer le prof d'info, c'est pas moral, tiens !!
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.