Press Key !!

attaque Messages postés 26 Date d'inscription vendredi 23 septembre 2005 Statut Membre Dernière intervention 4 novembre 2009 - 3 août 2008 à 16:47
attaque Messages postés 26 Date d'inscription vendredi 23 septembre 2005 Statut Membre Dernière intervention 4 novembre 2009 - 4 août 2008 à 21:33
Bonjour a tous,

Voila enfaite j'aimerai faire un petit programme, mais je suis bloqué a un endroit
Le probleme cest que j'aimerai que le clavier appui tout seul sur un touche du clavier
Par exemple:  il press la touche "F" toute les 3 secondes.
J'ai chercher partout sur le site VbFrance les seuls sources que je trouve ne fonctionne pas ou alors ce sont des exemple de valeur de touche...

Dans l'attente d'une réponse je reste a votre disposition pour de plus ample informations.

Merci

14 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
3 août 2008 à 17:23
Salut,

"J'ai chercher partout sur le site VbFrance les seuls sources que je trouve ne fonctionne pas" : c'est que tu n'as pas dû bien chercher... renseigne toi sur l'API mouse_event par exemple...
______________________________________
DarK Sidious
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
3 août 2008 à 17:30
sendkeys ??

bonjour chez vous!
< body>
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 août 2008 à 19:11
salut,

nouveau projet, pose un timer sur une form

Option Explicit
Private Const VK_F              As Long = 70&
Private Const KEYEVENTF_KEYUP   As Long = &H2
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Form_Load()
    Me.KeyPreview = True
    Me.AutoRedraw = True
    Timer1.Interval = 3000
End Sub

Private Sub Timer1_Timer()
    keybd_event VK_F, 0&, 0&, 0&
    keybd_event VK_F, 0&, KEYEVENTF_KEYUP, 0&
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
    Me.Print Time & "
: La touche '" & Chr$(KeyAscii) & "' a été pressée"
End Sub

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 août 2008 à 00:22
Salut PCPT,
Impeccable !
Je patoje deuis un certain temps avec la combinaison
Shift+Alt pour agir sur la barre de langue.
D' après l' exemple, je suppose que VK_F correspond à
la touche T.Tu ne connaitrais pas quelqu' un qui connait
quelqu' un qui connait ...ce que à quoi correspond Shift+Alt ?

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 août 2008 à 00:59
salut LIBRE_MAX,

shift :
vbKeyShift, 16, Touche MAJ

Alt :
vbKeyMenu, 18, Touche MENU

VK_F est bien la touche F oui, déclarée en haut :
Private Const VK_F              As Long = 70&
70 étant sa valeur ASCII

donc même principe :
Private Sub Timer1_Timer()
    keybd_event vbKeyShift, 0&, 0&, 0&
    keybd_event vbKeyMenu, 0&, 0&, 0&
    keybd_event VK_F, 0&, 0&, 0&
    keybd_event VK_F, 0&, KEYEVENTF_KEYUP, 0&
    keybd_event vbKeyMenu, 0&, KEYEVENTF_KEYUP, 0&
    keybd_event vbKeyShift, 0&, KEYEVENTF_KEYUP, 0&
End Sub

par contre là il faut jouer sur le KeyDown ou Up et non  plus le Press
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = VK_F And Shift = 5 Then MsgBox "Shift+Alt+'F'"
End Sub

 ++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 août 2008 à 01:18
Tu m' a sauvé d' une déprime imminente

Private Const KEYEVENTF_KEYUP  As Long = &H2
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)


Private Sub Timer1_Timer()
    keybd_event vbKeyShift, 0&, 0&, 0&
    keybd_event vbKeyMenu, 0&, 0&, 0&
    keybd_event vbKeyMenu, 0&, KEYEVENTF_KEYUP, 0&
    keybd_event vbKeyShift, 0&, KEYEVENTF_KEYUP, 0&
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)    If KeyCode vbKeyMenu And Shift 5 Then MsgBox "Shift+Alt"
End Sub

Et c' est ce que je voulais.
La barre de langue bascule de la langue d' entrée vers la seconde langue.
Reviens à la langue d' entrée.
Reviens à la secnde..
Ainsi de suite.

Pour ce qui m' interresse, il suffit donc de lancer
keybd_event vbKeyShift, 0&, 0&, 0&
keybd_event vbKeyMenu, 0&, 0&, 0&
keybd_event vbKeyMenu, 0&, KEYEVENTF_KEYUP, 0&
keybd_event vbKeyShift, 0&, KEYEVENTF_KEYUP, 0&

pour basculer vers la seconde langue .
Et la même chose si je veux revenir à la langue d' entrée.

Merci infiniment et bonne soirée.
Tu peux dormir tranquille.Tu as fait ta BA du jour





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 août 2008 à 09:16
simuler des touches est le dernier recours, lorsqu'il s'agit de piloter quelque chose...

que souhaites tu faire, exactement ?
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 août 2008 à 11:53
Bonjour Renfield,
Je ne sais pas à qui est adressée la question.
A moi ou à attaque ?!!
En ce qui me concene, j' ai une application qui pilote Excel depuis VB6.Je voudrais donc que lorsqu' Excel est lancé, basculer automatiquement vers la seconde langue pour pouvoir saisir directement en arabe.
Et faire de même avec un formulaire(vb6) dans lequel j' ai des champs en français et d' autres en arabe.
L' idée serait de basculer vers l' un ou l' autre selon que l' utilisateur tente de faire une entrée dans un champ en français ou en arabe.
voilà tout.

PS:Je me souviens que tu me l' a déjà fait remarqué.
Mais quelque fois on ne peut (ou on choisit de ne pas) faire autrement ;)

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 août 2008 à 12:05
joues plutot avec les APIs qui vont bien, c'est bien moins aléatoire.

voir

ActivateKeyboardLayout, LoadKeyboardLayout, GetKeyboardLayoutName, UnloadKeyboardLayout, ...

http://msdn.microsoft.com/en-us/library/ms646289(VS.85).aspx
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 août 2008 à 12:39
Voilà qui répond à mes attentes.
En effet j' étais confronté à un problème:
Comment savoir quelle langue est active ?
Sans parler qu' avec Excel, la methode PCPT ne semble
pas avoir d' effet.Mais on verra ça plus tard.Pour l' instant
je travaille sur le formuliare.
Je viens de voir le lien, mais j' y trouve pas d' exemple d' appel.
j' essaierai de me débrouiller avec ce qu' il y a comme indication.
Si t' as un exemple, c' est pas de refus.
Mais tu peux toujours me laisser mijoter un peu avant
Travailler ça me fera du bien


Merci du tuyau.





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 août 2008 à 12:45
pas d'exemple, mais ca ne doit pas etre très complexe.

voir par exemple:
Private Declare Function GetKeyboardLayoutName Lib "user32.dll" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 août 2008 à 12:52
Presque

Pour l' instant j' ai trouvé ça:

'parameters for api's
ConstKL_NAMELENGTHAsLong=9'length of the keyboardbuffer
ConstKLF_ACTIVATEAsLong=&H1'activate the layout

'the language constants
ConstLANG_NL_STDAsString="00000413"
ConstLANG_EN_USAsString="00000409"
ConstLANG_DU_STDAsString="00000407"
ConstLANG_FR_STDAsString="0000040C"

'api's to adjust the keyboardlayout
PrivateDeclareFunctionGetKeyboardLayoutNameLib"user32"Alias"GetKeyboardLayoutNameA" (ByValpwszKLIDAsString) AsLong
PrivateDeclareFunctionLoadKeyboardLayoutLib"user32"Alias"LoadKeyboardLayoutA" (ByValpwszKLIDAsString, ByValflagsAsLong) AsLong

PublicFunctionSetKbLayout(strLocaleIdAsString) AsBoolean
'Changes the KeyboardLayout
'Returns TRUE when the KeyboardLayout was adjusted properly, FALSE otherwise
'If the KeyboardLayout isn't installed, this function will install it for you
OnErrorResumeNext
DimstrLocIdAsString'used to retrieve current KeyboardLayout
DimstrMsgAsString'used as buffer
DimlngErrNrAsLong'receives the API-error number

'create a buffer
strLocId=String(KL_NAMELENGTH, 0)
'retrieve the current KeyboardLayout
GetKeyboardLayoutNamestrLocId
'Check whether the current KeyboardLayout and the
'new one are the same
IfstrLocId= (strLocaleId&Chr(0)) Then
'If they're the same, we return immediately
SetKbLayout=True
Else
'create buffer
strLocId=String(KL_NAMELENGTH, 0)
'load and activate the layout for the current thread
strLocId=LoadKeyboardLayout((strLocaleId&Chr(0)), KLF_ACTIVATE)
IfIsNull(strLocId) Then'returns NULL when it fails
SetKbLayout=False
Else'check again
'create buffer
strLocId=String(KL_NAMELENGTH, 0)
'retrieve the current layout
GetKeyboardLayoutNamestrLocId
IfstrLocId= (strLocaleId&Chr(0)) Then
SetKbLayout=True
Else
SetKbLayout=False
EndIf
EndIf
EndIf
EndFunction

PrivateSubForm_Load()
'change the current keybour layout to 'English - US'
SetKbLayoutLANG_EN_US
EndSub

je teste à l' instant.
. <hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 août 2008 à 14:56
Problème résolu.
Mais j' ai du chercher lontemps..
Surtout que j' ai eu deux gros pépins.
1° Il manquait l' arabe pour la const LANG.
    En cherchant une je suis tombé sur une douzaine.
    Une pour chaque nationnalité ou presque.


2° LoadKeyboardLayout avec KLF_ACTIVATE m' ajoute
    l' anglais en troisième langue et l' active à la place de la deuxième langue.
    Initialement je n' ai que le français et l' arabe. 


Au final j' ai opté pour ça:


Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long


Public Sub ActiverAr()
Dim XLoadLangue As Long
Dim XActivLangue As Long
Dim KLF_REORDER As Long
Dim KLF_ACTIVATE As Long


'XLoadLangue = LoadKeyboardLayout("00000401", KLF_REORDER)  'désactiver pour ne pas l' ajouter
XActivLangue = ActivateKeyboardLayout(XLoadLangue, KLF_ACTIVATE)
End Sub


Public Sub ActiverFr()
Dim XLoadLangue As Long
Dim XActivLangue As Long
Dim KLF_REORDER As Long
Dim KLF_ACTIVATE As Long


'XLoadLangue = LoadKeyboardLayout("0000040c", KLF_REORDER) 'désactiver pour ne pas l' ajouter
XActivLangue = ActivateKeyboardLayout(XLoadLangue, KLF_ACTIVATE)
End Sub


exemple d' appel:
Private Sub Text1_GotFocus()
Text1.Alignment = 1    'RightToLeft
ActiverAr
End Sub

Auteur : Zine, le vendredi 7 juin 2002 à 14:41:11.
http://www.commentcamarche.net/forum/affich-9640-comment-basucler-d-une-langue-a-une-autre-sou-vb

Bonne fin de journée.





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
attaque Messages postés 26 Date d'inscription vendredi 23 septembre 2005 Statut Membre Dernière intervention 4 novembre 2009
4 août 2008 à 21:33
Ok merci a tous je vais testé cela de suite !
0
Rejoignez-nous