patricktoulon
XLDnaute Barbatruc
Bonjour a tous
je voudrais faire une fonction findwindow sur!!!
en effet findwindow récupère me handle de la fenêtre par sa classe et sa caption
sauf que si( 1/2 ou plus(multiple instance)) fenêtres porte la même captions ben c'est toujours la première de la hiérarchie d'affichage (ou l'instance active )qui sera prise en compte
un petit exemple représentatif du probleme
1 userform instancié 2 fois
dans cet exemple c'est la 2d instance qui vas prendre la modification sur 2013 et sur W7 avec 2007 c'est la bonne la première de l'ordre d'affichage
c'est donc un problème
il est évident que si je change le titre de la caption l'ors du show je n'aurais pas de probleme bien sur
sauf que ce n'est pas destiné a des userform mais a une app plan 3D que je lance a partir de vba la modification de la caption est des lors pas envisageable
les userforms ne sont qu'un exemple représentatif de la situation
allez les Cracks ,des idées
je voudrais faire une fonction findwindow sur!!!
en effet findwindow récupère me handle de la fenêtre par sa classe et sa caption
sauf que si( 1/2 ou plus(multiple instance)) fenêtres porte la même captions ben c'est toujours la première de la hiérarchie d'affichage (ou l'instance active )qui sera prise en compte
un petit exemple représentatif du probleme
1 userform instancié 2 fois
VB:
#If VBA7 Then
#If Win64 Then
Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function SetWindowLongA Lib "user32" (ByVal Hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As Long
Dim HwndUsF As LongPtr
#Else
Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare PtrSafe Function SetWindowLongA Lib "user32" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Dim HwndUsF As Long
#End If
#Else
Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SetWindowLongA Lib "user32" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Dim HwndUsF As Long
#End If
Dim UF(3) As UserForm1
Sub testmultipleInstance()
'on lance une première instance de l'userform1
Set UF(1) = New UserForm1
With UF(1): .Show 0: .Top = 50: .Left = 100: End With
'on lance une 2d instance de l'userform1
Set UF(2) = New UserForm1
With UF(2): .Show 0: .Top = 50: .Left = 400: End With
End Sub
Sub testsurle_one()
Dim Hwnd&
Hwnd = FindWindowA(vbNullString, UF(1).Caption)
SetWindowLongA Hwnd, -16, &H94CF8080
End Sub
c'est donc un problème
il est évident que si je change le titre de la caption l'ors du show je n'aurais pas de probleme bien sur
sauf que ce n'est pas destiné a des userform mais a une app plan 3D que je lance a partir de vba la modification de la caption est des lors pas envisageable
les userforms ne sont qu'un exemple représentatif de la situation
allez les Cracks ,des idées