Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : handle fenetre precise [ Système / Exécution ] (yannfrance)

lundi 25 février 2008 à 20:36:29 | handle fenetre precise

yannfrance

Bonsoir,

Je souhaiterais récuperer le handle d'une fenêtre bien precise.

Si je fais :
Code :

monhandle := FindWindow(nil, ma_fenetre);

-FinWindow va bien retourner le numero de handle pour ma_fenetre.
Ok, mais le problème est que le titre de ma barre de dialogue change de nom souvent, donc, je ne peut pas de cette façon.

Je peut recuperer aussi un handle via le Classe Name :
Code :

monhandle := FindWindow('#32770', nil)

Ok, mais le problème est que la classe est #32770 et que cette classe me renvoie le handle de Nero, donc, ce n'est pas une solution non plus.

Donc, premiere question, comment puis-je recuperer le handle de cette fenêtre?
Deuxieme question et suggestion, le nom de la barre de dialogue est jamais identique, cepandant ,les derniers mot, eux le sont.
Donc, ne peut-ont pas identifier le handle via le classe name #32770 et une partie du nom de la boite de dialogue (je dis bien une partie du texte) ?

Merci beaucoup, cela me seras d'une grande utilité et un grand soulagement aussi

lundi 25 février 2008 à 22:19:39 | Re : handle fenetre precise

Guillemouze

la classe de ta fenetre a le meme nom que celle de nero?!
Avec quoi a tu recuperé la classe de ta fenetre?

mardi 26 février 2008 à 15:56:47 | Re : handle fenetre precise

yannfrance

Bonjour,

Oui, je repete, la classe name est la même que nero #32770
Je l'ai récuperer avec :
-WindowsSpy
-Puis un scruteur de processus assez pousser qui utilise GetClassName pour récuperer les classes (classique).
Donc, pas de doute, la classe est #32770 .
Par consequent, il ne reste plus 36 solutions pour retrouver le handle de ma fenêtre, il me faut :
Donner le classe name #32770 puis une partie seulement du texte que contient la barre de titre pour identifier le handle de cette fenêtre.

Merci beaucoup pour votre aide.

mercredi 27 février 2008 à 21:30:13 | Re : handle fenetre precise

yannfrance

Bonsoir,

D'apres une longue recherche, ce serais faisable avec la fonction pos
function Pos(Substr: string; S: string): Integer;

Description

La fonction Pos recherche une sous-chaîne, Substr, à l'intérieur d'une chaîne S. Substr et S sont des expressions de type chaîne.

Je ne vois pas comment l'adapter a ce que je veux faire.
En attendant, je vais encore chercher.

jeudi 28 février 2008 à 09:55:48 | Re : handle fenetre precise

Guillemouze

var
monHandle: THandle;
MonBuffer: array[0..1024] of char;
begin
monHandle := findwindow(MonClassName, nil);
GetWindowText(monHandle, MonBuffer, 1024);
if Pos('La Chaine dans mon titre', string(MonBuffer)) <> 0 then
  C'est ok, la fenetre contient la sous chaine


jeudi 28 février 2008 à 18:11:58 | Re : handle fenetre precise

yannfrance

Bonjour,

Merci pour la réponse que tu m'ai apporter.
je ne sais pas si je m'y prend mal ou bien, mais ce code ne me retourne pas le handle que souhaite.

procedure TForm1.Button1Click(Sender: TObject);
var
monHandle: THandle;
MonBuffer: array[0..1024] of char;
begin
monHandle := findwindow('#32770', Nil);
GetWindowText(monHandle, MonBuffer, 1024);
if Pos('la chaine', string(MonBuffer)) <> 0 then
begin
  memo1.Text := IntToHex(monHandle, 8)+' - '+MonBuffer;

end;
 end;
end.

Merci.

Ps, si je met <> 1 then il me retourne le handle de nero.



jeudi 28 février 2008 à 23:12:36 | Re : handle fenetre precise

Guillemouze

Réponse acceptée !
j'ai fait une petite source qui repondra a ta question je pense.
tu la retrouvera ici :
http://www.delphifr.com/codes/RECHERCHER-FENETRE-CLASSE-PARTIE-SON-TITRE_45895.aspx

lundi 3 mars 2008 à 19:18:34 | Re : handle fenetre precise

yannfrance

Bonjour

Merci pour le source, c'est exactement ce dont je chercher, ça fonctionne.
Cependant, quand j'essai de l'integrer à mon projet, il me met une erreur:
Non déclarer 'Ifthen'
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

    const
  WM_CHERCHETOI = WM_USER + 1;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  CurrWindow: THandle;
  Buffer: array[0..1024] of char;
  CestMoi: Boolean;
  DemanderDeSeChercher: Boolean;
begin
  //recherche l'instance de la classe dans la liste des fenetre windows
  //Si DemanderDeSeChercher est true, on envoie un message aux autres pour qu'ils se recherchent

  Memo1.Lines.Clear;

  CurrWindow := FindWindowEx(0, 0, PChar('#32770'), nil); //premiere fenetre
  while CurrWindow <> 0 do
  begin
    //lecture du caption de la fenetre
    GetWindowText(CurrWindow, Buffer, 1024);
    //verification que le titre contient mon handle
    CestMoi := Pos('Chat', string(Buffer)) <> 0;
    Memo1.Lines.Add(Format('[%s] %d "%s"', [IfThen(CestMoi, '  MOI  ', 'PAS MOI'), CurrWindow, Buffer]));
    //envoie de la demande de se rechercher si ce n'est pas moi
    if (DemanderDeSeChercher) and (not CestMoi) then
      PostMessage(CurrWindow, WM_CHERCHETOI, 0, 0);

    //fenetre suivante
    CurrWindow := FindWindowEx(0, CurrWindow, PChar('#32770'), nil);
  end;
end;

Il me met une erreur sur cette ligne :
Memo1.Lines.Add(Format('[%s] %d "%s"', [IfThen(CestMoi, '  MOI  ', 'PAS MOI'), CurrWindow, Buffer]));

En m'informant que IfThen n'est pas déclarer.
Merci beaucoup pour ce source, exelent.
J'ai chercher pendant plus d'une semaine à la recherche d'informations comme ce source, et je n'ai pas trouver, pourtant, j'ai beaucoup chercher.

lundi 3 mars 2008 à 22:39:34 | Re : handle fenetre precise

Guillemouze

Réponse acceptée !
selon delphiprog (dans les commentaires de la source), le ifthen est apparu avec delphi 6 (perso je l'ai compilé avec D7).
sinon, cette fonction est tres simple. Son implementation doit ressembler a qqchose pret a ca :

function IfThen(const Condition: Boolean: const ValueIfTrue, ValueIfFalse: string): string;
begin
    if Condition then
       ValueIfTrue
    else
        ValueIfFalse;
end;


mardi 4 mars 2008 à 16:12:37 | Re : handle fenetre precise

yannfrance

Bonjour,

Merci beaucoup, en faite, ça fonctionne, c'est juste que j'ai oublier de déclarer Math, StrUtils; dans uses.

Bon, par contre, comme je te l'ai dit plus haut, sans ton aide, je n'aurais jamais trouver.
j'ai chercher pendant une grosse semaine sans relâche.
Ou as tu trouver les informations necessaire pour créer cet exelent source?
Merci beaucoup.



Cette discussion est classé dans : fenetre, handle, classe, dialogue, precise


Répondre à ce message

Sujets en rapport avec ce message

Recup texte d'une statusbar par handle/classe [ par replic ] salut, j'aimerai recuperer le texte de la statusbar d'une application en execution. Puis-je y arriver par l'intermediaire du handle de celle et de la fermeture d'une fenetre Internet Explorer ou explorer [ par lixter ] SalutVoilà mon prblmJe récupère le handle d'une fenetre Internet explorer ou explorer et je voudrais la fermer sans tuer le processj'utilise donc une Créer Objet sur une autre fenetre sachant son handle. [ par TiDaN326 ] Bonjour à tous,Je voudrais savoir s'il est possible de créer un bouton sur une fenetre, sachant l'handle de celle-ci. J'imagine que la question pourra Recuperation du HANDLE d'une fenetre [ par guy jeuniaux ] 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é pa handle de fenetre non valide [ par simonpelloquin ] Bonjour, Un PC me fait des misères... J'ai une appli Delphi-Paradox qui m'affiche régulièrement (mais pas systématiquement) le message "Handle de fenê Affichage dans une fenetre directX [ par blackharu ] bonjour,Voilà j'ai une application faite avec directX dont je n'est pas les sources...Cependant en utilisant des fonctions windows...j'arrive à recupé Retrouver le handle de tout les controles d'une fenetre [ par Nostaroth ] Bonjour a tous! Donc voila je suis confronté a un probleme enorme: Je voudrai recuperer le handle de tout les controle d'une fenetre du genre:Creation Savoir si une application est en plein écran [ par bionicleman ] Bonjour,Je suis entrain de développer une application et je voudrais qu'elle "remplace" le programme de mise en veille de windows.J'ai un bout de code Récupérer tous les handles des contrôles d'une fenêtre (avec TabControl) [ par jnmchl ] Bonjour,La question est dans le titre est bien qu'un post existe quelques lignes auparavant ... Cirec me dirait : cherche au topic :<a href="http://ww serialisation: heritage & évolutivité [ par Guillemouze ] Salut tout le monde,je suis sur un probleme de serialisation de mes objets, et je cherche une maniere efficace pour la sauvegarde/chargement.Ma struct


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.