|
Trouver une ressource
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 !
SENDKEYSEX => SIMULER UNE TOUCHE DANS UNE FENETRE PRÉCISE
Information sur la source
Description
SendKeys, keybd_event & co c'est bien joli, seul soucis majeur, on ne peut pas spécifier de fenêtre cible. 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 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 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
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
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)
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
|