Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Pb avec SendKeys [ Divers / General ] (akim77)

jeudi 1 mars 2007 à 22:35:27 | Pb avec SendKeys

akim77

Salut a tous,

Quand je créé un exe avec ce qui suit, si la led "Caps Lock" est allumée
j'obtiens ççççç et pas 99999
Qui peut me dire pourquoi ?
Vous l'aurez compris, je ne veux avoir que des chiffres, dans tous les cas .

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long

Const VK_CAPITAL = &H14 ' CapsLock

Private Sub Timer1_Timer()
    If (GetKeyState(VK_CAPITAL) > 0) Then
        SendKeys "9", False
    Else
        SendKeys "+9", False
    End If
End Sub

Merci de votre aide!


jeudi 1 mars 2007 à 22:57:46 | Re : Pb avec SendKeys

jmfmarques

Membre Club

Bonsoir,

"Quand je créé un exe avec ce qui suit, si la led "Caps Lock" est allumée
j'obtiens ççççç et pas 99999"

1) Euh... je pense que tu as voulu dire le contraire !...

2) ce sera ainsi non seulement pour VB mais pour tout !

3) Si j'ai bien compris, tu souhaites faire un programme qui, lancé et tournant constamment en arrière plan, transformerait systématiquement la frappe des touches alphanimériques/numériques en frappe de touches numériques.

Quid alors de la nécessité  d'utiliser réellement la partie "inférieure" de ces touches ?
Il te faudrait alors créer un bouton pour "basculer" d'un état à l'autre ? Mais... c'est exactement le rôle des touches Caps et Capslock ! (alors : un geste ou l'autre, ce sera toujours un geste, non ?)


vendredi 2 mars 2007 à 07:17:09 | Re : Pb avec SendKeys

akim77

Bonjour,

Merci de t'interesser à ce petit casse-tête.

1) Non je n'ai pas voulu dire le contraire , c'est ce que je constate.

2) Tu as raison, dans la vraie vie, si caps lock est éteinte si tu presse shift + 9 tu obtiens 9,
mais dans mon  exe 
soit  SendKeys "+9"     envoi la même chose que     SendKeys "9",
(en debogage j'obtiens toujours 9)
soit la détection de la touche CapsLock ne fonctionne pas.

3) En fait, j'ai un peu simplifié le code , je reçois d'un lecteur de badge une série de chiffres que je renvoi à la fenêtre active.
çà  fonctionne bien mais uniquement si CapsLock est déactivée.

vendredi 2 mars 2007 à 07:43:47 | Re : Pb avec SendKeys

jmfmarques

Membre Club

 en majuscules et un çBonjour,

Je ne comprends toujours pas où tu veux en arriver ...

Je vais donc uniquement te répmondre sur ce que je vois !

Sendkeys "+9" envoie 9 en majuscules et non l'appui de la touche capslol puis cette de 9

pour simuler l'appui de Capslock, il faut écrire :
SendKeys "{CAPSLOCK}"

je ne sais pas de quel clavier tu disposes Je pense que tu parles de l'emploi de la touche qui envoie un ç en minuscules

dans ce cas :

SendKeys "{CAPSLOCK}"
SendKeys "ç"

ce qui peut donc également s'écrire : SendKeys "{CAPSLOCK}" & "ç"

enverra un 9 et non un ç

Si c'est ce que tu cherchais, tu aurais pu dire simplement :

"Comment simuler l'emploi de la touche CapsLock ?"


vendredi 2 mars 2007 à 08:11:22 | Re : Pb avec SendKeys

jmfmarques

Membre Club

Je te fais remarquer, toutefois, que le prochain emploi de :
SendKeys "{CAPSLOCK}"
repassera (exactement comme ce serait le cas avec ton doigt) en situalition "normale"

Il te faudra donc gérer en ayant d'abord "regarder" quel est l'état actuel de cette touche de ton clavier et n'envoyer CapsLock que si cette touche n'est pas déjà dans l '"état enfoncé" .... (ce qui est possible, mais... tu te lances là dans la construction d'une usine à gaz assez surprenante...)


vendredi 2 mars 2007 à 08:28:02 | Re : Pb avec SendKeys

jmfmarques

Membre Club
Réponse acceptée !
Re
1) l'utilisation de la fonction GetKeyboardState de la librairie user32 de l'Api de windows te permet de connaître l'état en cours de ton clavier

2) tu pourrais de surcroît te servir, plutôt que de Sendkeys, de la fonction SetKeyboardState de la même librairie pour modifier l'état de ton clavier

vendredi 2 mars 2007 à 08:36:10 | Re : Pb avec SendKeys

akim77

Je ne veux surtout pas changer l'etat de CapsLock, mais que quelque soit l'état de CapsLock obtenir uniquement 9 et jamais ç

Après avoir lu ta réponse j'ai tenté de remplacer "9" par "ç" et cà fonctionne
    If (GetKeyState(VK_CAPITAL) > 0) Then
        SendKeys "ç", False
    Else
        SendKeys "+ç", False   'envoi de Shift ç
    End If

Evidemment je dois le faire pour tout les chiffres et j'aimerai que çà fonctionne pour les types de claviers.
Une usine à gaz disais-tu ? c'est bien possible, mais je vais tenter de faire plus simple.

Merci en tout cas .


vendredi 2 mars 2007 à 09:09:24 | Re : Pb avec SendKeys

jmfmarques

Membre Club
Je crois que tu devrais plutôt exposer ton problème directement et simplement, sans même parler de Capslock ni de sendkeys.

En exposant très simplement la situation, telle qu'elle se présente, car je ne la vois pas !

Si tu dois envoyer des chiffres par sendkeys, tu peux le faire sans utiliser nécessairement le Capslock !
Si c'est l'utilisateur qui frappe au clavier (donc pas de sendkeys),  dis-nous dans quel contrôe et dans quelles circonstances...
Il se peut enfin que, pour la frappe dans un contrôle de saisie, tu souhaites faciliter la vie de l'utilisateur (d'un portable sans pavé numérique par exemple)...

Enfin bref : si tu nous exposes clairement le problème que tu veux résoudre, nous t'indiquerons la solution la meilleure (il y en a quasiment toujours une).

A toi d'expliquer de sorte à nous mettre en situation de parfaite connaissance de cause.

vendredi 2 mars 2007 à 09:50:21 | Re : Pb avec SendKeys

Renfield

Administrateur CodeS-SourceS
Réponse acceptée !

 

Une autre solution, c'est de simuler la saisie du code Ascii des touches...

Comme ca, si NumLock est allumé ou pas, tu sortira toujours le même caractère (et non plus touche)

SendKeys fonctionne par touche, lui...

 

Option Explicit

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 Declare Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_LMENU As Long = &HA4
Private Const VK_NUMPAD0 = &H60

Private Sub SendChars(ByRef vsChars As String)
Dim i As Long
Dim sAsc As String
Dim iAsc As Long
Dim nKey As Long
  For i = 1 To Len(vsChars)
      keybd_event VK_LMENU, 0, 0, 0
     
      sAsc = "0" & Asc(Mid$(vsChars, i, 1))
      For iAsc = 1 To Len(sAsc)
          nKey = VK_NUMPAD0 + Mid$(sAsc, iAsc, 1)
          keybd_event nKey, MapVirtualKey(nKey, 0), 0, 0
          keybd_event nKey, MapVirtualKey(nKey, 0), KEYEVENTF_KEYUP, 0
      Next iAsc

      keybd_event VK_LMENU, 0, KEYEVENTF_KEYUP, 0
  Next i
End Sub

Private Sub Form_Click()
  SendChars "92148"
End Sub
By Renfield



Renfield
Admin CodeS-SourceS - MVP Visual Basic

vendredi 2 mars 2007 à 09:55:48 | Re : Pb avec SendKeys

Renfield

Administrateur CodeS-SourceS
Vous retrouverez cette fonction ici :

http://www.codyx.org/snippet_sendchars-envoyer-caracteres-vs-sendkeys_319.aspx

Renfield
Admin CodeS-SourceS- MVP Visual Basic


1 2

Cette discussion est classé dans : pb, long, private, sendkeys, getkeystate


Répondre à ce message

Sujets en rapport avec ce message

!! Avis aux boss des Api !!!!!!! [ par schouly ] Comment capter le click de la souris sur un bouton dans un popupmenu créé par : CreatePopupMenu, TrackPopupMenu, AppendMenuMerci Schoulyex : (allapi.n pb recuperation de l'adresse mac sous winNT [ par andrea ] Bonjour, J'ai un probleme lorsque j'essaie de recuperer l'adresse mac d'un ordinateur qui est sous NT cela me renvoie toujours la valeur suivant 0.0.0 Mac adresse et NT [ par Andrea ] Bonjour ,Le code qui suit me permet d'afficher la mac address d'une carte reseau installee sur un PC .Ce code fonctionne parfaitement sur Windows 95/9 extraire icone [ par Flyer ] Salut tout le monde. J'arrive effectivement a extraire les icones d'une association windows avec le code ci-dessous.Private Declare Function ExtractAs Convertir un WMF en EMF [ par daveCrocket ] Bonjour à tous,j'ai récupérer ce source pour transformer un wmf en emf, mais je ne sais pas comment je dois l'utiliser. Pouvez-vous m'aider ?********* WMI (2em) avec le Code du prog [ par AsselusBorealiss ] pourriez vous m'aider et me dire pourquoi chez moi, le prog marche pas(juste une form et pas de module )Une Form1,1 Bouton, et une Listeview1Msg Erreu api pour showintaskbar [ par Stephane ] salut a tousj'ai un probleme, il me faudrai savoir comment enlever un rectangle(dont je connai le hwnd) dans la barre des taches a partir d'un hwnd, e Service NT [ par ricopetitdejeuner ] Bonjour a tous!J'ai une pitite question sur les service NT. J'arrive bien a creer mon service, mais lorsque je veux le lancer, il n'y arrive pas (aucu pb: pour changer l'image du bureau [ par didine ] ca ne marche pas comme caPrivate Sub Command1_Click()SystemParametersInfo SPI_SETDESKWALLPAPER, 0, file1.list, 1End SubPrivate Sub Dir1_Change()File1. Fonction de sauvegarde inconnu !!! [ par zebest3000 ] Je souhaite enregistrer une image en JPG, mais la fonction devient vite bizarre !Quand je tappe ceci, cela enregistre en JPG une capture d'une de mes


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,718 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.