Recuperation du HANDLE d'une fenetre

Signaler
Messages postés
35
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010
-
guy jeuniaux
Messages postés
35
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010
-
Bonjour à tous,
Je voudrais récupérer le HANDLE d'une fenetre afin de controler son état.
Cette Fenetre est celle d'une commande DOS d'un batch lancé par mon appli.
Elle possède un TITLE : SAUVEGARDE BASE DE DONNEES

Et j'utilise la procédure suivante :
------------------------------------------------------------------
var
h:thandle;
a:Pchar;
beginshowmessage('Une fois la sauvegarde lancée, réduisez la fenêtre');
winexec('savedb.bat',sw_SHOW);
a:=pchar('"SAUVEGARDE BASE DE DONNEES"');
h :=FindWindow(nil,a);
edit3.Text:=inttostr(h);
-------------------------------------------------------------------

La valeur renvoyée est toujours 0 , j'ai aussi essayé en essayant de récuperer le HANDLE de ma fenetre DELPHI en cours : toujours 0

Je suis en DELPHI 5
Est ce qu'il y aurait quelque chose qui manque ?
Est ce que cette fonction est valable pour des fenêtres DOS ?
Un problème dans la saisie du titre ?

J'ai beau chercher dans les réponses ou forum précédent je ne trouve pas
( ou je cherche mal )

Si quelqu'un peut m'aider ce serait sympa
MERCI d'avance
guy

6 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012

Il n'y a pas des guillemets en trop ??
a:=pchar('SAUVEGARDE BASE DE DONNEES');

Cordialement.


<HR>
Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
Messages postés
35
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010

Merci pour la réponse,
Mais non avec ou sans guillemets c'est pareil.
De plus apparement il est conseillé de mettre les guillemets lorsqu'il y a des espaces
dans le nom.

@+

guy
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012

Je pense que le problème est du au fait que l'on doit passer à FindWindow et le classname de ta fenetre principale et le titre.

Ex : FindWindow(PChar('TForm1'),a); // si tu as gardé le nom par défaut pour ta fiche principale.

Cordialement.


<HR>
Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
Messages postés
35
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010

Apparament c'est moins simple qu'il n'y parait.
J'ai essayé avec ton tuyau et en simplifiant les strings : titre de la fenêtre à partir de laquelle je lance mon batch : (caption =SAUVEGARDE)

a:=pchar('SAUVEGARDE'); // titre de mon batch
b:=pchar(form5.Caption);
h :=FindWindow(b,a);

Et j'ai toujours : 0

guy
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012

Non, là tu transmets deux fois la même chose, c'est à dire deux fois le titre de la fenetre et non le titre et le nom de classe de ton application batch !!

Faut dire que j'ai peut être pas été bien clair jusqu'à présent

a := Nom de classe de ton programme batch

Pour avoir le nom de classe, regarde la valeur de Application.ClassName de ton programme batch normalement 'TApplication'

b : = Titre de ton programme batch

Pour avoir le titre, regarde la valeur de Application.Title de ton programme batch normalement le nom du projet (Par ex 'Project1' )

Ce qui donnerait comme code :

a := 'TApplication';
b := 'Project1';

h :=FindWindow(b,a);

Là, tu ne dois plus avoir de problèmes pour récupérer le handle

Cordialement.


<HR>
Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
Messages postés
35
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010

Merci de chercher une solution.
Mais entre les échanges j'avais essayé ceci ( des fois que) :

var
h:hwnd;
a:Pchar;
beginshowmessage('Une fois la sauvegarde lancée, réduisez la fenêtre');
winexec('savedb.bat',sw_SHOW);
a:=pchar('SAUVEGARDE');// après avoir changé le titre du batch
h :=FindWindow(nil,a);
edit3.Text:=inttostr(h);

Et cela fonctionne.
C'est probablement le fait d'avoir des espaces dans le titre qui gène.
Du coup je n'ai pas essayé ta solution.

guy