Capter le Handle d'une Toolbar

Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017 - 18 déc. 2009 à 08:23
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017 - 18 déc. 2009 à 17:22
Comment peut-on faire pour capter le Handle d'une ToolBar, quand on connaît le Handle de la Form qui la contient, en vue de capter le Handle
du Menu Fichier de cette Toolbar?
L'utilisation de GetMenu(hWnd) ne marche pas.
Je rencontre ce problème dans mon source de carnet d'adresses pour WinMail.exe sous VISTA
=>http://www.vbfrance.com/codes/CARNET-ADRESSES-EXTERNE-OUTLOOK_50968.aspx
A voir également:

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 213
18 déc. 2009 à 08:34
Bonjour,

(et bien que je ne sois pas certain de ce que tu auras vraiment ce que tu cherches) :
donne le focus à ton contrôle, puis extrais-en le hwnd en utilisant la fonction Function GetFocus de la librairie user32 de l'Api de Windows.
PS : Mais quel contrôle est-ce exactement ? As-tu vérifié qu'il ne possédait pas déjà une propriété hwnd ?


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
18 déc. 2009 à 09:37
ucfoutu, je te remercie beaucoup de vouloir me venir en aide.
Pour comprendre ma demande, voici un petit code.
Tu mets 2 bouton et 3 TextBox =>
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
Dim hMenu As Long, hSubMenu As Long


Private Sub Command1_Click() 'Avec Wab.exe
Shell "C:\Program Files\Outlook Express\Wab.exe", vbNormalFocus

Sleep 100 'Laisser le temps au Prg de s'installer
'Trouver le Handle de Wab.exe
Dim hWnd As Long
hWnd = FindWindow("WABBrowseView", "Carnet d'adresses - Identité principale")
Text1.Text = hWnd

'Trouver le handle du menu de Wab.exe
hMenu = GetMenu(hWnd)
Text2.Text = hMenu

'Trouver le handle du Sous-Menu Fichier
hSubMenu = GetSubMenu(hMenu, 0)
Text3.Text = hSubMenu

End Sub

Private Sub Command2_Click() 'Avec msimn.exe(Outlook Express)
Shell "C:\Program Files\Outlook Express\msimn.exe", vbMinimizedFocus

Sleep 100 'Laisser le temps au Prg de s'installer
'Trouver le handle de msimn.exe (Outlook Express)
Dim hWout As Long
hWout = FindWindow("Outlook Express Browser Class", "Boîte de réception - Outlook Express - Identité principale")
Text1.Text = hWout

'Trouver le handle du menu de msimn.exe
hMenu = GetMenu(hWout)
Text2.Text = hMenu

'Trouver le handle du Sous-Menu Fichier
hSubMenu = GetSubMenu(hMenu, 0)
Text3.Text = hSubMenu
End Sub
'-------------------------
Tu verras qu'avec Wab.exe, tout va bien, mais avec Outlook, on trouve bien le Handle de la fenêtre, mais on n'a pas accès au Menu, car il est contenu dans une ToolBar.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 213
18 déc. 2009 à 09:52
Aïe,
Il s'agit donc d'une fenêtre externe à ton appli (ce n'est plus la même hose).
Etne n'est plus à mon avis du handle de la "toolbar", dont tu as besoin, mais de toute autre chose, qu'il va te falloir déterminer.
Que te suggérer ?
Peut-être utiliser (à part) le source que tu as déposé pour déterminer les caractéristiques d'une sous-fenêtre incluse dans la fenêtre principale ===>> en prendre note (sur un papier) ===>> puis utiliser ces informations pour aller à la pêche du handle qui t'intéresse.

Lis également mon dernier message dans cette discussion (c'est peut-être moins compliqué, comme méthode) :
http://www.vbfrance.com/forum/sujet-OUVRIR-AUTOMATIQUEMENT-LISTE-COMBOBOX_1387407.aspx?p=3
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
18 déc. 2009 à 10:01
Merci, je vais étudier ça.
0

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

Posez votre question
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
18 déc. 2009 à 17:22
Je suis arrivé à capturer le Handle de la ToolBar de Outlook avec ce code un peu tordu:
Dim outlookexpressbrowserclass&
Dim sizablerebar&
Dim rebarwindow&
Dim toolbarwindow&
outlookexpressbrowserclass& = FindWindow("outlook express browser class", vbNullString)
sizablerebar& = FindWindowEx(outlookexpressbrowserclass&, 0&, "sizablerebar", vbNullString)
rebarwindow& = FindWindowEx(sizablerebar&, 0&, "rebarwindow32", vbNullString)
toolbarwindow& = FindWindowEx(rebarwindow&, 0&, "toolbarwindow32", vbNullString)
toolbarwindow& = FindWindowEx(rebarwindow&, toolbarwindow&, "toolbarwindow32", vbNullString)
HandleToolBar = FindWindowEx(rebarwindow&, toolbarwindow&, "toolbarwindow32", vbNullString)
Ça marche bien, MAIS après, je n'arrive pas à capturer le menu de la ToolBar avec GetMenu puis GetSubMenu!!!
Une idée pour poursuivre?
0
Rejoignez-nous