Bonjour, mon soucis est que, dans ma Form1, il y a un Timer qui s’exécute après un bout de temps, il exécute alors mon code :
Dim Hotkey As Boolean = True
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vkey As Long) As Integer
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Hotkey = GetAsyncKeyState(Keys.F5)
If Hotkey = True Then
Capturerbutton()
End If
End Sub
Je voudrais que dans ma Form3, j'est une Combobox me listant les touches du claviers, et que lorsque j'en est sélectionner une, que lorsque j’appuie sur mon bouton1, la touche s'enregistre dans les settings pour qu'elle puisse remplacer la touche F5 dans mon code.
le setting
project properties -> setting
tu déclare ta variable qui représente la touche
scoop user
ex mykeycode integer user
pour enregistrer
My.Settings.mykeycode = ?
je ne sais comment tu vas procéder parce que je
ne sais pas comment tu as lister tes keys
j'ai testé avec ça
Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
My.Settings.mykeycode = e.KeyCode
End Sub
Private Sub Button1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseClick
If Convert.ToBoolean(GetAsyncKeyState(My.Settings.mykeycode)) Then
MessageBox.Show("you stroke hot key")
End If
end sub
pour qu'elle puisse remplacer la touche F5 dans mon code.
Je me demandes par ailleurs quelle est la nécessité d'utiliser un timer, alors que tu peux jouer avec les messages de ton appli.
Transpose ceci en VB.Net (pas dur ... les long passant en integer) :
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 POINTAPI
x As Long
y As Long
End Type
Private Type Msg
hWnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
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 couic As Boolean
Private Sub ProcessMessages()
Dim Message As Msg
Do While Not couic
WaitMessage
If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
MsgBox "tu viens d'utiliser la hotkey que tu as définie"
End If
DoEvents
Loop
End Sub
Private Sub Form_Unload(Cancel As Integer)
couic = True
Call UnregisterHotKey(Me.hWnd, &HBFFF&)
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Call UnregisterHotKey(Me.hWnd, &HBFFF&)
Dim ret As Long
couic = False
ret = RegisterHotKey(Me.hWnd, &HBFFF&, 0, KeyCode)
ProcessMessages
End Sub
Frappe une touche (une seule) dans la textbox
Ce sera ta hotkey
Essaye-la ensuite n'importe où dans ton appli ===>> tu vas comprendre.
____________________
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
Oublie "lister les touches" , basiquement je voudrais que dans mon combobox, si je clique sur une des touches présentes (F5, Ftruc...), cette touche soit enregistrer en tant que settings et quel remplace mon F5 dans mon code, tu ne voit toujours pas ?
Assez peu clair, en effet.
Je crois avoir deviné qu'il veut remplacer F5 par son choix dans la combo dans
Hotkey = GetAsyncKeyState(Keys.F5)
(mais n'en suis pas certain).
____________________
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
Et "lister" voudrait peu-être dire "peupler la combo"
____________________
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
Et si c'est dans le but que je devine, il ferait mieux de laisser ce choix à l'utilisateur (une simple textbox où l'utilisateur serait invité à frapper sa touche, alors analysable et mise en mémoire).
____________________
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
Non !
Selon ce que je pense :
Décider que la hotkey de l'appli est celle choisie dans la combo (qui, elle, contiendrait toutes les possibilités de choix de hotkey).
____________________
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
Je me suis débrouiller, j'y suis arrivez en modifiant le code de ShayW (Merki ^^), j'arrive avec un settings type "Long", à enregistrer le numéro de la touche qui est tapez dans la Textbox, puis de l'utiliser, je me pose ensuite la question, lorsque l'utilisateur tape sa lettre dans la Textbox, serait-il possible de faire l'inverse du code de ShayW ? C'est à dire retrouver la touche, à partir du code du textbox, je sais que si on tape la touche normalement sa marche, le problème c'est que si l'utilisateur clique sur les touches, comme dans mon code, bas F5, Ftruc... Bas sa ne fait rien .
Je ne vois pas de message signé "Us". Il se peut alors que tu aies frappé Us à la place de Uc.
Lève cette ambiguïté, de sorte à ce que nous sachions avec certitude vers quoi s'orienter et t'orienter.
____________________
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
Mais en te relisant lentement : plus de doute : tu te référais bien à ce que je disais
Il te suffit d'une variable publique (appelons-la racc):
Dans l'évènement Keydown pou KeyUpp de la textbox dédiéez à ce choix :
- relève le keycode
- attribue sa valeur à racc
- désenregistre toute hotkey éventuellement présente
- crée ta nouvelle hotkey en lui passant racc comme argument (c'est là et pas dans le timer, que tu dois faire cela).
dans ton évènement timer : uniquement
If Hotkey = True Then
Capturerbutton()
End If
Je ne suis pas VB.Nettiste, mais peux te faire cela en VB6 (et ce sera facilement transposable).
tu dis ...
____________________
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
Re-bonjour "Uc", je me suis éfféctivement trompé, j'ai écrit Us au lieu de Uc Désoler , sinon pour ma part je me suis débrouillez d'une autre façon beaucoup plus adéquate, qui remplace mon Text dans ma combobox pour qu'il soit plus simple de compréhension .
Merci à vous pour l'aide apporté et bonne continuation!