[API] SendMessageLong pour le bouton [TABULATION]

inconnuanonyme Messages postés 28 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 19 avril 2004 - 10 déc. 2003 à 17:48
inconnuanonyme Messages postés 28 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 19 avril 2004 - 12 déc. 2003 à 19:37
Salut à tous

J'ai un joli problème :
je souhaite envoyer la commande bouton TAB à une fenètre par le biais de l'api SendMessageLong

Pour cela j'utilise au préalable l'api FindWindow pour trouver le handle de ma fenètre, et ensuite je fais ça :

Call SendMessageLong(MONHANDLE&, &H102, &H9, 0&)

&H9 correspondant au code vbKeyTab,

ce qui n'aboutit pas.

Pour le coup, lorsque j'envois la commande Enter avec :

Call SendMessageLong(MONHANDLE&, &H102, &HD, 0&)

&HD correspondant au code Enter,

je n'ai aucun soucis et la fenètre recoit bien la commande Enter.

Voyez vous ma faute par rapport au bouton TAB ?

Merci du coup de main et bonne continuation.

L'inconnu anonyme

10 réponses

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
10 déc. 2003 à 18:43
Dans ce cas precis tu peut utiliser SetFocus et SendKeys
comme ceci

SetFocus MonHandle
SendKeys "{TAB}"

@+

E.B.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 déc. 2003 à 19:00
Achtung, SetFocus ne fonctionne en interprocessus qu'apres avoir attache son propre thread a la file d'interruptions du thread proprietaire de la fenetre cible.
Se fait par AttachThreadInput().
BruNews, ciao...
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
10 déc. 2003 à 19:53
c'est vrais, suis je bete

pas d'interprocess avec focus;caret;activewindow etc...
essai le code ci-dessous :

Option Explicit
Const HWND_TOP = 0
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const SWP_SHOWWINDOW = &H40

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub Command1_Click()
Dim mhwnd As Long
mhwnd = FindWindow(vbNullString, "Sans titre - Bloc-notes")
If mhwnd Then
SetWindowPos mhwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW
DoEvents
SendKeys "{TAB}"
End If
End Sub

@+

E.B.
0
inconnuanonyme Messages postés 28 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 19 avril 2004
10 déc. 2003 à 19:56
héhé merci pour les réponses...

mais en fait je veux éviter tout ce qui est setfocus, SetWindowPos, et tout ce qui met l'application désirée en premier plan.

pour la simple et bonne raison que je souhaite effectuer les commandes en "arrière plan", c'est pour cela que je passe par l'api SendMessageLong

L'inconnu anonyme
0

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

Posez votre question
inconnuanonyme Messages postés 28 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 19 avril 2004
10 déc. 2003 à 20:02
et c'est pourquoi je ne peux pas employer la méthode sendkeys (sauf si elle peut s'effectuer en arrière plan mais j'en doute..)
L'inconnu anonyme
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 déc. 2003 à 20:08
Mets le bouton a declencher en bouton par defaut et regle le en nro 1 dans l'ordre de tabulation, ne pose pas de probleme vu que ta fenetre est masquee, ok ?
Ensuite quand tu veux declencher:
PostMessage(hwnd, WM_COMMAND, IDOK, 0);
BruNews, ciao...
0
inconnuanonyme Messages postés 28 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 19 avril 2004
10 déc. 2003 à 20:15
et non ! là est le problème

car le "bouton par défaut" comme tu le dis n'est pas dans mon programme

en fait je m'explique un peu mieux :

- une fenètre internet explorer avec une jolie page web dedans
- des boutons dans cette page, que tu peux cliquer si tu n'as pas de souris en appuyant plusieurs fois sur TAB jusqu'à ce que ledit bouton soit sélectionné
- hop t'appuies sur ENTER pour ouvrir le lien

du coup je ne peux pas configurer les boutons

L'inconnu anonyme
0
inconnuanonyme Messages postés 28 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 19 avril 2004
10 déc. 2003 à 20:29
exemple (qui ne marche pas)

Dim mhwnd As Long, mhwnd2 As Long, mhwnd3 As Long
mhwnd = FindWindow(vbNullString, "VBFrance.Com  | Message Forum: Re : [API] SendMessageLong pour le bouton [TABULATION] (inconnua - Microsoft Internet Explorer f")
mhwnd2 = FindWindowEx(mhwnd&, 0&, "Shell DocObject View", vbNullString)
mhwnd3 = FindWindowEx(mhwnd2&, 0&, "Internet Explorer_Server", vbNullString)
If mhwnd3 Then
Call SendMessageLong(mhwnd3, &H102, vbKeyTab, 0&)
Call SendMessageLong(mhwnd3, &H102, &HD, 0&)
End If

cet exemple ne marche pas avec internet explorer

Mais si je change d'objectif et que je me place dans le blocnote, aucun problème ! la commande TAB est bien lancée

quelle est ma diabolique faute... ?
L'inconnu anonyme
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 déc. 2003 à 20:48
Tu connais l'ordre de tabulation de la fenetre que tu cibles ? Je parle de celle contenant le bouton qui t'interesse.
Si oui, regarde combien de tabulations tu as besoin pour mettre le focus sur le bouton.
nfois = NbrDeFois;
while(nfois--) SendMessage(hwnd, WM_NEXTDLGCTL, 0, 0);
BruNews, ciao...
0
inconnuanonyme Messages postés 28 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 19 avril 2004
12 déc. 2003 à 19:37
ne marche pas...

en fait le véritable problème c'est :

comment envoyer l'instruction TAB (bouton clavier) à une fenètre internet explorer sans passer par les sendkeys ?

L'inconnu anonyme
0
Rejoignez-nous