Page 1 sur 1
retrouver les fenêtres d'un programme lancé avec runprogram
Publié : sam. 28/févr./2004 23:10
par Le Soldat Inconnu
Salut,
encore une colle, comment faire pour retrouver le handle de la fenêtre du programme qu'on vient de lancé avec avec runprogram, sachant que je ne connait pas le nom de la fenêtre.
j'explique mon objectif :
je souhaiterai amélioré l'explorateur windows en remplacant le raccourci par un lanceur qui ouvrirai 2 explorateurs en même temps avec des positions définis sur l'écran par exmple, un en haut, bien grand, et l'autre en bas, plus petit qui permettrai de faire du déplacer facilement, du copier coller, etc...
je trouve vraiment moche les progs censé remplacer l'explorateur windows, c pour ça que j'aimerai implémenter cette astuce.
vous en penser quoi ? et avez vous des idées pour résoudre mon problème ?
merci
Publié : dim. 29/févr./2004 10:51
par Patrick88
t'as essayé terminal-commander, c'est basé sur le norton-commander de dos... ça zip, dezip, unrar, ftp, 2 fenêtres côte à côte...
moi je suis un inconditionnel de ce machin....
Patrick
Publié : dim. 29/févr./2004 10:56
par cederavic
essay avec GetLastWindow_()
normalement qd t'ouvre un programme il se met au premier plant

Publié : dim. 29/févr./2004 11:19
par Le Soldat Inconnu
mon prob vient du fait que je vais ouvrir 2 fenêtre d'un coup, avec la handle du process, on peux pas retrouver les fenêtre associé ?
ça renvoie quoi, runprogram ?
Publié : dim. 29/févr./2004 11:53
par cederavic
le probleme avais dejas ete resolu, il faut fouiller sur le forum anglais

Publié : dim. 29/févr./2004 12:46
par Le Soldat Inconnu
ok, je fouillerai
pour l'instant, v mettre au point l'interface de base
Publié : dim. 29/févr./2004 13:57
par Anonyme2
J'ai regardé mais sans trouver une solution.
Sinon je suis preneur d'un code qui fait ça.
Publié : mar. 02/mars/2004 9:10
par Le Soldat Inconnu
une grosse bidouille mais elle marche :
ça lance l'explorer et donne son ID
Code : Tout sélectionner
Procedure.l GetLastWindow(WindowID.l, TimeToError.l)
; Renvoie l'ID de la dernière fenêtre créer
; WindowID : WindowID() de la fenêtre en cours, celle devant être au premier plan
; TimeToError : Temps en ms maximum avant de renvoyer une erreur
Time = GetTickCount_()
Repeat
LastWindowID = GetForegroundWindow_()
If GetTickCount_() - Time > TimeToError
ProcedureReturn 0
EndIf
Until LastWindowID <> WindowID And LastWindowID <> 0
ProcedureReturn LastWindowID
EndProcedure
OpenWindow(0, 200, 200, 200, 200, 0, "Test")
RunProgram("Explorer.exe")
ID = GetLastWindow(WindowID(), 10000)
If ID
Debug "ID du programme lancé = " + Str(ID)
Else
Debug "Impossible de trouver la une nouvelle fenêtre"
EndIf
Attention, j'ai éditer le message pour faire une correction
Publié : mar. 02/mars/2004 9:20
par Le Soldat Inconnu
Pour ceux qui veulent savoir ou j'en suis, c'est ici :
http://perso.wanadoo.fr/lesoldatinconnu ... loreur.zip
et ça marche, je suis en train de faire de l'esthétique pour que ce soit joli

Publié : jeu. 04/mars/2004 9:33
par Le Soldat Inconnu
une amélioration pour éviter les problèmes :
Code : Tout sélectionner
NewList Liste_Fenetres()
Procedure.l RunProgramEx(NomFichier$, Parametre$, RepertoireCourant$, Options)
ClearList(Liste_Fenetres())
; Fenêtre au premier plan
WindowID = GetForegroundWindow_()
; On liste les fenêtres ouvertes
hWnd.l = FindWindow_( 0, 0 )
While hWnd <> 0
If GetwindowLong_(Hwnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
AddElement(Liste_Fenetres())
Liste_Fenetres() = hWnd
EndIf
hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
Wend
; On lance le programme
RunProgram(NomFichier$, Parametre$, RepertoireCourant$, Options)
; On cherche l'ID du la fenêtre créée
Time = GetTickCount_()
Repeat
LastWindowID = GetForegroundWindow_()
If GetTickCount_() - Time > 5000
ProcedureReturn 0
EndIf
If LastWindowID <> 0 And LastWindowID <> WindowID
; On compare avec la liste des fenêtres qui étaient ouvertes
ResetList(Liste_Fenetres())
While NextElement(Liste_Fenetres())
If LastWindowID = Liste_Fenetres()
WindowID = LastWindowID
EndIf
Wend
EndIf
Until LastWindowID <> 0 And LastWindowID <> WindowID And GetwindowLong_(LastWindowID, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
ProcedureReturn LastWindowID
EndProcedure
ID = RunProgramEx("Explorer.exe", "", "", 0)
If ID
Debug "ID du programme lancé = " + Str(ID)
Else
Debug "Impossible de trouver la une nouvelle fenêtre"
EndIf