Accueil > > > SENDKEYSEX => SIMULER UNE TOUCHE DANS UNE FENETRE PRÉCISE
SENDKEYSEX => SIMULER UNE TOUCHE DANS UNE FENETRE PRÉCISE
Information sur la source
Description
SendKeys, keybd_event & co c'est bien joli, seul souci majeur, on ne peut pas spécifier de fenêtre cible. C'est donc un moyen particulièrement dangereux pour piloter précisément quoi que ce soit. je crée souvent des applications de pilotage pour le boulot, j'ai donc décidé de me pencher sur le probleme...
Source
- Public Sub SendString(ByVal vhTargetWnd As Long, ByRef vsInput As String)
- Dim i As Long
- Dim nRc As Integer
- For i = 1 To Len(vsInput)
- nRc = VkKeyScan(AscW(Mid$(vsInput, i, 1)))
- If nRc <> -1 Then
- SendKeysEx vhTargetWnd, nRc And &HFF&, nRc \ &H100&
- End If
- Next i
- End Sub
-
- Public Sub SendKeysEx(ByVal vhTargetWnd As Long, ByVal veKey As VBRUN.KeyCodeConstants, Optional ByVal veShift As VBRUN.ShiftConstants, Optional ByVal vbExtendedKey As Boolean = False)
- Dim xbMemBuffer(255) As Byte
- Dim xbNewBuffer(255) As Byte
- Dim nKeyParam As Long
- Dim nTargetThreadID As Long
- '# Si la cible est valide...
- If IsWindow(vhTargetWnd) Then
- nTargetThreadID = GetWindowThreadProcessId(vhTargetWnd, ByVal 0&)
- AttachThreadInput GetCurrentThreadId, nTargetThreadID, 1&
-
- nKeyParam = MapVirtualKey(veKey, 0) * &H10000
- If vbExtendedKey Then
- nKeyParam = nKeyParam Or &H1000000 '# bit 24
- End If
-
- '# On mémorise l'etat du clavier
- GetKeyboardState xbMemBuffer(0)
-
- If (veShift And vbShiftMask) <> 0 Then
- xbNewBuffer(vbKeyShift) = &H80
- End If
- If (veShift And vbCtrlMask) <> 0 Then
- xbNewBuffer(vbKeyControl) = &H80
- End If
-
- '# On place notre image du clavier en mémoire
- SetKeyboardState xbNewBuffer(0)
-
- '# On prévient la cible que le clavier a été manipulé
- PostMessage vhTargetWnd, WM_KEYDOWN, veKey, nKeyParam
- PostMessage vhTargetWnd, WM_KEYUP, veKey, nKeyParam Or &HC0000000
-
- '# On 'force' la cible a prendre en compte les changements effectués
- Sleep 1
-
- '# Il ne nous reste plus alors qu'a restaurer l'image du clavier.
- SetKeyboardState xbMemBuffer(0)
- AttachThreadInput GetCurrentThreadId, nTargetThreadID, 0&
- End If
- End Sub
Public Sub SendString(ByVal vhTargetWnd As Long, ByRef vsInput As String)
Dim i As Long
Dim nRc As Integer
For i = 1 To Len(vsInput)
nRc = VkKeyScan(AscW(Mid$(vsInput, i, 1)))
If nRc <> -1 Then
SendKeysEx vhTargetWnd, nRc And &HFF&, nRc \ &H100&
End If
Next i
End Sub
Public Sub SendKeysEx(ByVal vhTargetWnd As Long, ByVal veKey As VBRUN.KeyCodeConstants, Optional ByVal veShift As VBRUN.ShiftConstants, Optional ByVal vbExtendedKey As Boolean = False)
Dim xbMemBuffer(255) As Byte
Dim xbNewBuffer(255) As Byte
Dim nKeyParam As Long
Dim nTargetThreadID As Long
'# Si la cible est valide...
If IsWindow(vhTargetWnd) Then
nTargetThreadID = GetWindowThreadProcessId(vhTargetWnd, ByVal 0&)
AttachThreadInput GetCurrentThreadId, nTargetThreadID, 1&
nKeyParam = MapVirtualKey(veKey, 0) * &H10000
If vbExtendedKey Then
nKeyParam = nKeyParam Or &H1000000 '# bit 24
End If
'# On mémorise l'etat du clavier
GetKeyboardState xbMemBuffer(0)
If (veShift And vbShiftMask) <> 0 Then
xbNewBuffer(vbKeyShift) = &H80
End If
If (veShift And vbCtrlMask) <> 0 Then
xbNewBuffer(vbKeyControl) = &H80
End If
'# On place notre image du clavier en mémoire
SetKeyboardState xbNewBuffer(0)
'# On prévient la cible que le clavier a été manipulé
PostMessage vhTargetWnd, WM_KEYDOWN, veKey, nKeyParam
PostMessage vhTargetWnd, WM_KEYUP, veKey, nKeyParam Or &HC0000000
'# On 'force' la cible a prendre en compte les changements effectués
Sleep 1
'# Il ne nous reste plus alors qu'a restaurer l'image du clavier.
SetKeyboardState xbMemBuffer(0)
AttachThreadInput GetCurrentThreadId, nTargetThreadID, 0&
End If
End Sub
Historique
- 28 mars 2007 00:06:16 :
- SendMessage en lieu et place de PostMessage (afin de s'assurer que l'action a bien été traitée par la cible quand l'image du clavier est restaurée)
- 28 mars 2007 01:26:42 :
- retour à PostMessage (j'aurais du tester, j'aurais du tester...)
- 28 mars 2007 01:40:51 :
- Ajout d'une Form de démonstration
- 28 mars 2007 10:45:28 :
- Ajout de la gestion des touches Shift, Control et des touches étendues (cf doc sur WM_KEYDOWN)
- 14 mai 2009 12:48:47 :
- Ajout de la procédure SendString, qui permet de simuler la pression des touches nécessaires pour saisir une phrase donnée en parametre.
- 14 mai 2009 12:50:59 :
- Changement de la description
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Récupérer le N° (hwnd) d'une application [ par luxpo ]
Comment faire pour récipérer le N° hwnd d'une fenêtre ?Merci
SendKeys vers une fenetre [ par milobac ]
Il y a un moyen d'envoyer un SendKeys directemnt vers une fenetre Windows qui n'est pas activée?Ex: On surfe avec Internet Explorer et pendant ce temp
recup des infos d'1 fenetre d'une autre application [ par FREDDY ]
Bonjour, J'essaye deseperement de recuperer sous visual basic 6 des informations qui défilent dans une fenetre d'un logiciel qui tourne sous window
Ouvrir une autre application dans une fenetre vb !! [ par mattheus ]
Hello !!Je souhaiterais ouvrir une autre application *.exe dans une form .Je sais comment l'ouvrir avec la commande SHELLmais je sais pas l'integrer d
Déplacement d'une application [ par Zeroc00l ]
Salut tout le monde merci de lire mon probleme Comment puis je faire pour que grace a MON application, je fasse bouger la fenetre d'une AUTRE applicat
hWnd As Long pour .Net [ par dragon ]
comment je fait pour avoir le Haddle d'une application que j'ai démarrer par Dim test As New Pass(Me)soft = New Access.Application???au pire, une autr
ControlBox [ par Charlie ]
Allo... j'ai une fenetre avec le petit X dans le coin supérieur droite de la fenetre (controlbox). J'aimerais que lorsqu'on clique sur le X, pouvoir i
shell et sendkeys sont méchants avec moi [ par lutinpitchoune ]
Mon problème est simple à la base : Je veux piloter depuis mon application excel, un programme qui tourne dansune session dos sous windows. En fait je
extract icon grace au HWND d'un fenetre [ par MarbleMad ]
salut,je cherche le moyen de recuperer l'icon 16x16 des applis en cours d'utilisation grace au HWND de la fenetre (appli dans la barre de tache).si q
appliquer Sendkeys sur une autre fenetre [ par David75000 ]
J'ai essayé :AppActivate titre_actif, TrueSendKeys "{ENTER}", TrueMais cela ne marche pasHistorique:Nous developpons une application dans le domaine d
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB6 + GRAPHVIZVB6 + GRAPHVIZ par nouirayosra
Cliquez pour lire la suite par nouirayosra
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|