BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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...
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
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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...
inconnuanonyme
Messages postés28Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention19 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
inconnuanonyme
Messages postés28Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention19 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
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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...