retrouver les fenêtres d'un programme lancé avec runprogram

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

retrouver les fenêtres d'un programme lancé avec runprogram

Message 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
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)]
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message 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
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

essay avec GetLastWindow_()
normalement qd t'ouvre un programme il se met au premier plant :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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 ?
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)]
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

le probleme avais dejas ete resolu, il faut fouiller sur le forum anglais :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ok, je fouillerai

pour l'instant, v mettre au point l'interface de base
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)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

J'ai regardé mais sans trouver une solution.
Sinon je suis preneur d'un code qui fait ça.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Dernière modification par Le Soldat Inconnu le mar. 02/mars/2004 12:56, modifié 1 fois.
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)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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 :wink:
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)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
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)]
Répondre