bon, j'ai l'impression que mon code va trop vite pour Vista ....
alors nouvel essai
ca doit faire ça :
- ouvrir l'explorateur sous c:\
- trouver la fenêtre de l'explorateur
- changer l'adresse en c:\windows
- retirer les bordures de lafenêtre de l'explorateur.
donc dite moi si ca marche, et je veux bien le contenu de la fenête de debug.
Merci
Code : Tout sélectionner
Global Recherche_BarreAdresse, ExploreurID, Exploreur_Adresse_ID
Procedure Recherche_BarreAdresse(hwnd.l, lParam.l)
Protected Class.s
Memoire = AllocateMemory(50)
GetClassName_(hwnd, Memoire, 50)
Class = PeekS(Memoire)
If Class = "Edit"
hwnd_parent = GetParent_(hwnd) ; ComboBox
Debug "Class Edit"
Adresse.s = Space(#MAX_PATH)
SendMessage_(hwnd, #WM_GETTEXT, #MAX_PATH, @Adresse)
Debug Adresse
GetClassName_(hwnd_parent, Memoire, 50)
Class = PeekS(Memoire)
If Class = "ComboBox"
Debug "Class ComboBox"
Recherche_BarreAdresse = hwnd
EndIf
EndIf
FreeMemory(Memoire)
ProcedureReturn #True
EndProcedure
Procedure Ouvre_Exploreurs()
Protected NewList Liste_Fenetres()
; On liste les fenêtres visibles
hwnd.l = FindWindow_(0, 0)
While hwnd <> 0
If GetWindowLong_(hwnd, #GWL_STYLE) & #WS_VISIBLE And GetWindowLong_(hwnd, #GWL_STYLE) & #WS_SYSMENU And GetWindowLong_(hwnd, #GWL_STYLE) & #WS_BORDER And GetParent_(hwnd) = 0
AddElement(Liste_Fenetres())
Liste_Fenetres() = hwnd
EndIf
hwnd = GetWindow_(hwnd, #GW_HWNDNEXT)
Wend
; Exploreur
RunProgram("explorer.exe", "/e,/n,c:\", "")
; Recherche des Exploreurs
Temps = ElapsedMilliseconds()
Repeat
Delay(100) ; On attend un peu
hwnd.l = FindWindow_(0, 0)
While hwnd And ExploreurID = 0
If GetWindowLong_(hwnd, #GWL_STYLE) & #WS_VISIBLE And GetWindowLong_(hwnd, #GWL_STYLE) & #WS_SYSMENU And GetWindowLong_(hwnd, #GWL_STYLE) & #WS_BORDER And GetParent_(hwnd) = 0
LastWindowID = hwnd
; On recherche si la fenêtre existait déjà
ForEach Liste_Fenetres()
If LastWindowID = Liste_Fenetres()
LastWindowID = 0
Break
EndIf
Next
EndIf
If LastWindowID ; on a trouvé une nouvelle fenêtre
Debug "nouvelle fenêtre trouvée"
Debug LastWindowID
Recherche_BarreAdresse = 0
EnumChildWindows_(LastWindowID, @Recherche_BarreAdresse(), 0)
If Recherche_BarreAdresse
Debug "Barre d'aresse"
Debug Recherche_BarreAdresse
Adresse.s = Space(#MAX_PATH)
SendMessage_(Recherche_BarreAdresse, #WM_GETTEXT, #MAX_PATH, @Adresse)
Debug "'" + Adresse + "'"
If LCase(Adresse) = "c:\"
Debug ">> Exploreur"
ExploreurID = LastWindowID
Exploreur_Adresse_ID = Recherche_BarreAdresse
EndIf
EndIf
; AddElement(Liste_Fenetres())
; Liste_Fenetres() = hwnd
Else
hwnd = GetWindow_(hwnd, #GW_HWNDNEXT)
EndIf
Wend
If ElapsedMilliseconds() - Temps > 10000
MessageRequester("Erreur", "Pas d'explorateur trouvé")
End
EndIf
Until ExploreurID <> 0
; Intégration des 2 Exploreurs dans le programme
SetWindowLong_(ExploreurID, #GWL_HWNDPARENT, WindowID(0))
SetWindowLong_(ExploreurID, #GWL_STYLE, GetWindowLong_(ExploreurID, #GWL_STYLE) & ~#WS_TILEDWINDOW)
MoveWindow_(ExploreurID, 100, 100, 500, 300, 1)
; Chargement de dossier
SendMessage_(Exploreur_Adresse_ID, #WM_SETTEXT, 0, "c:\windows\")
SendMessage_(Exploreur_Adresse_ID, #WM_KEYDOWN, #VK_RETURN, 0)
SendMessage_(Exploreur_Adresse_ID, #WM_KEYUP, #VK_RETURN, 0)
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
Ouvre_Exploreurs()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
PostMessage_(ExploreurID, #WM_CLOSE, 0, 0)
End
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]