Page 1 sur 1
[R] Savoir quelle touche est pressée
Posté : mar. 05 nov. 2013 20:16
par Armaldio
Bonjour tout le monde
J'ai une interface graphique comme ceci :
Et je recherche une petite fonction qui me servirait à récupérer la touche pressée, quelle qu'elle soit

Voilà
PS: J'ai fouillé internet et tout ce que j'ai trouvé, c’est détecter si une touche a été pressée, mais sans renvoyer laquelle :/
Merci d'avance pour votre aide
Edit :
► Afficher le texte
Code : Tout sélectionner
$listeDesTouches = "LeftMouseButton|RightMouseButton|MiddleMouseButton|MouseScrollUp|MouseScrollDown|Enter" & _
"Escape|Spacebar|Left|Up|Right|Down|" & _
"1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|" & _
"one|two|three|four|five|six|seven|eight|nine|zero|F1|F2|F3|F4|F5|F6|" & _
"F7|F8|F9|F11|F12|LeftShift|RightShift|LeftControl|RightControl|LeftAlt|RightAlt"
Global $Button1 = GUICtrlCreateCombo("Spacebar", 80, 8, 120, 29)
GUICtrlSetData(-1, $listeDesTouches)
Re: [..]Savoir quelle touche est pressée
Posté : mar. 05 nov. 2013 20:40
par cbourree
Par touche, tu entends touche correspondante du clavier ou appui sur le bouton ?
Dans le premier cas je te conseille d'utiliser la fonction HotKeySet
Tu peux aussi aller voir du côté de _IsPressed() (voir la doc)
Re: [..]Savoir quelle touche est pressée
Posté : mar. 05 nov. 2013 20:45
par Amesamana
Bonjour,
_IsPressed
► Afficher le texte
Code : Tout sélectionner
Function Reference
--------------------------------------------------------------------------------
_IsPressed
Check if key has been pressed
#include <Misc.au3>
_IsPressed($sHexKey [, $vDLL = 'user32.dll'])
Parameters
$sHexKey Key to check for
$vDLL [optional] Handle to dll or default to user32.dll
Return Value
True: 1
False: 0
Remarks
If calling this function repeatedly, you should open 'user32.dll' and pass the handle.
Make sure to close the handle at end of script using DllClose.
_IsPressed() will return 1 until the key is released.
Even brief key presses can result in multiple returns within a loop.
If the code called does not include a blocking function (such as MsgBox) and the user does not require multiple returns, the script should wait until _IsPressed() returns 0 before continuing.
01 Left mouse button
02 Right mouse button
04 Middle mouse button (three-button mouse)
05 Windows 2000/XP: X1 mouse button
06 Windows 2000/XP: X2 mouse button
08 BACKSPACE key
09 TAB key
0C CLEAR key
0D ENTER key
10 SHIFT key
11 CTRL key
12 ALT key
13 PAUSE key
14 CAPS LOCK key
1B ESC key
20 SPACEBAR
21 PAGE UP key
22 PAGE DOWN key
23 END key
24 HOME key
25 LEFT ARROW key
26 UP ARROW key
27 RIGHT ARROW key
28 DOWN ARROW key
29 SELECT key
2A PRINT key
2B EXECUTE key
2C PRINT SCREEN key
2D INS key
2E DEL key
30 0 key
31 1 key
32 2 key
33 3 key
34 4 key
35 5 key
36 6 key
37 7 key
38 8 key
39 9 key
41 A key
42 B key
43 C key
44 D key
45 E key
46 F key
47 G key
48 H key
49 I key
4A J key
4B K key
4C L key
4D M key
4E N key
4F O key
50 P key
51 Q key
52 R key
53 S key
54 T key
55 U key
56 V key
57 W key
58 X key
59 Y key
5A Z key
5B Left Windows key
5C Right Windows key
60 Numeric keypad 0 key
61 Numeric keypad 1 key
62 Numeric keypad 2 key
63 Numeric keypad 3 key
64 Numeric keypad 4 key
65 Numeric keypad 5 key
66 Numeric keypad 6 key
67 Numeric keypad 7 key
68 Numeric keypad 8 key
69 Numeric keypad 9 key
6A Multiply key
6B Add key
6C Separator key
6D Subtract key
6E Decimal key
6F Divide key
70 F1 key
71 F2 key
72 F3 key
73 F4 key
74 F5 key
75 F6 key
76 F7 key
77 F8 key
78 F9 key
79 F10 key
7A F11 key
7B F12 key
7C-7F F13 key - F16 key
80H-87H F17 key - F24 key
90 NUM LOCK key
91 SCROLL LOCK key
A0 Left SHIFT key
A1 Right SHIFT key
A2 Left CONTROL key
A3 Right CONTROL key
A4 Left MENU key
A5 Right MENU key
BA ;
BB =
BC ,
BD -
BE .
BF /
C0 `
DB [
DC \
DD ]
Related
Example
#include <Misc.au3>
Local $hDLL = DllOpen("user32.dll")
While 1
If _IsPressed("10", $hDLL) Then
ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
; Wait until key is released.
While _IsPressed("10", $hDLL)
Sleep(250)
WEnd
ConsoleWrite("_IsPressed - Shift Key was released." & @CRLF)
ElseIf _IsPressed("1B", $hDLL) Then
MsgBox(0, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.")
ExitLoop
EndIf
Sleep(250)
WEnd
DllClose($hDLL)
Re: [..]Savoir quelle touche est pressée
Posté : mar. 05 nov. 2013 20:51
par Armaldio
J'entends "touche correspondante du clavier" ^^
Malheureusement, aussi bien avec _IsPressed qu'avec un HotKey, je devrais définir une condition ou une action pour CHAQUE lettre :/
Moi je voudrais une fonction de ce genre :
Code : Tout sélectionner
While 1
If _KeyIsPressed($variableDansLaquelleEstRetournéeLaValeur) Then
;Truc A faire
Endif
WEnd
Voila

Re: [..]Savoir quelle touche est pressée
Posté : mar. 05 nov. 2013 21:16
par cbourree
Cette fonction n'existe malheureusement pas à ma connaissance, et croie moi : toute fonction fabriquer sera beaucoup plus compliqué que juste mettre un HotKey à chaque fois.
Re: [..]Savoir quelle touche est pressée
Posté : mar. 05 nov. 2013 21:41
par mikell
Armaldio a écrit : je recherche une petite fonction qui me servirait à récupérer la touche pressée, quelle qu'elle soit
Donc tu cherches un keylogger, quoi
Mais bon c'est acceptable tant que c'est subordonné à une gui
@cbourree : ça existe, et c'est pas bien compliqué en plus
Code : Tout sélectionner
$gui = GUICreate("test")
GuiSetState()
GUIRegisterMsg(0x0100, "WM_KEYDOWN")
While GuiGetMsg()<>-3
Sleep(10)
WEnd
Func WM_KEYDOWN($hWnd, $msg, $wParam, $lParam)
Msgbox(0,"", Chr(BitAND($wParam, 0xFF)) )
EndFunc
Re: [..] Savoir quelle touche est pressée
Posté : mar. 05 nov. 2013 22:29
par Armaldio
Donc tu cherches un keylogger, quoi
Je savais que ce message allait sortir ^^
J'ai déjà vu cela sur plusieurs sites :/
Mon but n'est absolument pas de faire un keylogger, bot, ou je ne sais quoi, je recherche juste a faire un petit utilitaire de configuration de touches, pour les controles d'un jeu vous savez

Je cherche aussi, et cela m'amene a modifier un peu ma question,
Si par exemple ma fonction me renvoie "LeftMouseButton", mais que le jeu ne comprends que "leftMouse" Comment doit-je procéder ?
(sachant que chaque touche est paramétrable dans un fichier ini)
mikell a écrit :
@cbourree : ça existe, et c'est pas bien compliqué en plus
Code : Tout sélectionner
$gui = GUICreate("test")
GuiSetState()
GUIRegisterMsg(0x0100, "WM_KEYDOWN")
While GuiGetMsg()<>-3
Sleep(10)
WEnd
Func WM_KEYDOWN($hWnd, $msg, $wParam, $lParam)
Msgbox(0,"", Chr(BitAND($wParam, 0xFF)) )
EndFunc
J'ai testé, malheureusement cela me donne des résultats assez surprenants pour les touches commes F1, F2, le pavé numérique et autres ^^
Edit: Je pense que je vais utiliser une boucle ou je ne sais quoi avec un _ispressed pour pouvoir remplacer par le texte que je veut ^^
Mais si vous avez des idées je suis quand meme preneur

)
Re: [..] Savoir quelle touche est pressée
Posté : mer. 06 nov. 2013 11:45
par mikell
Bah oui pour capter réellement toutes les touches le code est pas mal plus compliqué
Mais tu n'as pas besoin de ça pour ce que tu veux faire, il suffit d'une petite gui de config avec des inputs (ou des combos) pour entrer le nom des touches à utiliser et après validation de placer ensuite des _IsPressed sur juste ces touches (ou boutons de souris)
Re: [..] Savoir quelle touche est pressée
Posté : mer. 06 nov. 2013 19:18
par Armaldio
:O Je n'avais pas du tout pensé aux combobox ...
C'est une sérieuse piste :/
Bon je met en résolu, vu que j'ai deux solutions à tester

J'éditerais le 1er message pour poster la solution que j'ai utilisée (pour que ça serve aux autres

)
Merci a vous ;D