Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA. Avoir la liste des fenêtre Windows ouvertes

22 réponses
Avatar
HD
Bonjour,

Comment puis-je, en VBA, obtenir la liste des fenêtres Windows ouvertes?

Merci d'avance pour votre aide.
--
@+
HD

10 réponses

1 2 3
Avatar
papou
Bonjour
Sur le site de Frédéric tu trouveras surement ton bonheur (avec les API)
http://perso.wanadoo.fr/frederic.sigonneau/code/Systeme/APIGestionsDesFenetr
es.txt
Cordialement
Pascal

"HD" a écrit dans le message de news:
#
Bonjour,

Comment puis-je, en VBA, obtenir la liste des fenêtres Windows ouvertes?

Merci d'avance pour votre aide.
--
@+
HD




Avatar
HD
Je suppose que je dois utiliser la macro EnumWindows(CtlListBox As Control,
FR As Form) mais je ne parviens pas à la faire tourner. Je fais

ret = EnumWindows(ListBox1, UserForm1)

et j'ai un message d'erreur :

" Erreur de compilation
Type défini par l'utilisateur non défini "

--
@+
HD
Avatar
papou
Re
Je n'ai jamais essayé mais en regardant vite fait, il me semble que le
message d'erreur est lié au fait que FR (utilisé dans la fonction) n'est pas
un objet Form (objet formulaire dans VB) mais un Userform (objet formulaire
dans VBA) dans ton cas.
Donc tu dois pouvoir modifier comme ça :
Sub EnumWindows(CtlListBox As Control, FR As UserForm)

Cordialement
Pascal

"HD" a écrit dans le message de news:
c5ja50$2lmc$
Je suppose que je dois utiliser la macro EnumWindows(CtlListBox As
Control,

FR As Form) mais je ne parviens pas à la faire tourner. Je fais

ret = EnumWindows(ListBox1, UserForm1)

et j'ai un message d'erreur :

" Erreur de compilation
Type défini par l'utilisateur non défini "

--
@+
HD




Avatar
HD
Donc tu dois pouvoir modifier comme ça :
Sub EnumWindows(CtlListBox As Control, FR As UserForm)


Même avec les corrections (Form => UserForm) je n'y arrive pas... Pourtant
ces fonctions sont bien dans la rubrique "VBA Excel" du site...
--
@+
HD

Avatar
Michel Pierron
Bonjour HD;

Private Declare Function GetWindowTextLength Lib "user32.dll" Alias _
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias _
"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String _
, ByVal nMaxCount As Long) As Long
Private Declare Function EnumWindows Lib "user32.dll" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" _
(ByVal hwnd As Long) As Long
Private x&

Private Function EnumWindowsProc&(ByVal hwnd&, ByVal lParam&)
Dim SLength&, Buffer As String, RetVal&
SLength = GetWindowTextLength(hwnd) + 1
If SLength > 1 Then
Buffer = Space(SLength)
RetVal = GetWindowText(hwnd, Buffer, SLength)
x = x + 1
Cells(x, 1) = Left(Buffer, SLength - 1)
Cells(x, 2) = CBool(IsWindowVisible(hwnd))
End If
EnumWindowsProc = 1
End Function

Sub WinList()
Application.ScreenUpdating = False
Cells.ClearContents
Cells(1, 1) = "CAPTION"
Cells(1, 2) = "VISIBLE"
Range("A1:B1").Font.Bold = True
Range("A2").Select
ActiveWindow.FreezePanes = True
x = 1
EnumWindows AddressOf EnumWindowsProc, 0
Cells.Columns.AutoFit
End Sub

MP

"HD" a écrit dans le message de
news:%
Bonjour,

Comment puis-je, en VBA, obtenir la liste des fenêtres Windows ouvertes?

Merci d'avance pour votre aide.
--
@+
HD




Avatar
Clément Marcotte
Bonjour,

Tu dois avoir dans le fichier en question des lignes avec "Declare" à
mettre dans l'entête de ton module.


"HD" a écrit dans le message de
news:
Donc tu dois pouvoir modifier comme ça :
Sub EnumWindows(CtlListBox As Control, FR As UserForm)


Même avec les corrections (Form => UserForm) je n'y arrive pas...
Pourtant

ces fonctions sont bien dans la rubrique "VBA Excel" du site...
--
@+
HD





Avatar
HD
ça ne fonctionne pas... mais peut être y manque-t-il l'appel à la fonction
EnumWindowsProc& ?

Private Function EnumWindowsProc&(ByVal hwnd&, ByVal lParam&)



--
@+
HD

Avatar
Michel Pierron
Re HD;
Quel est ton message d'erreur ?
Quelle version d'Excel as-tu ?
L'appel à la fonction est dans la ligne:
EnumWindows AddressOf EnumWindowsProc, 0
AddressOf est inconnu dans xl97.
MP

"HD" a écrit dans le message de
news:%
ça ne fonctionne pas... mais peut être y manque-t-il l'appel à la fonction
EnumWindowsProc& ?

Private Function EnumWindowsProc&(ByVal hwnd&, ByVal lParam&)



--
@+
HD





Avatar
mousnynao
Bonjour,

Ne serait-il pas pertinent de charger la librairie :
Microsoft Forms 2.0 Object Library

VBE //Outils/Références...

mousnynao!

-----Message d'origine-----
Donc tu dois pouvoir modifier comme ça :
Sub EnumWindows(CtlListBox As Control, FR As UserForm)


Même avec les corrections (Form => UserForm) je n'y
arrive pas... Pourtant

ces fonctions sont bien dans la rubrique "VBA Excel" du
site...

--
@+
HD


.




Avatar
Frédéric Sigonneau
Bonsoir,

Une solution qui ne dépend pas, en principe, de ta version d'Excel :

Sub ProcessusActifs()
Dim strComputer, objWMIServices, colProcesses, objProcess

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
Workbooks.Add
For Each objProcess In colProcesses
i = i + 1
Cells(i, "a").Value = objProcess.Name
Next

End Sub

Par contre, dépend de ta version de Windows. Les scripts WMI sont 'de base' avec
Windows 2000, XP, 2003. Pour en disposer avec Windows 98 et NT 4 :

http://www.microsoft.com/technet/scriptcenter/scrptfaq.asp

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

HD a écrit:
Bonjour,

Comment puis-je, en VBA, obtenir la liste des fenêtres Windows ouvertes?

Merci d'avance pour votre aide.


1 2 3