begin process at 2012 02 11 12:22:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Exécution

 > 

handle fenetre precise


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

handle fenetre precise

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.

1 2

Cette discussion est classée 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ê 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 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é Execution boite de dialogue "ouvrir avec" avec paramètres [ par DarthBlondin ] Bonjour,J'essaye de lancer la boîte de dialogue "ouvrir avec " de windows J'y arrive via un       ShellExecute(0, 'open', 'rundll32.exe', PChar('shell items PopupMenu via handle [ par yannfrance ] Bonjour,je contrôle un application externe à la mienne.je récupère le handle à chaque clic d'un popupMenu externe.Ayant çe handle, comment puis-je réc récupérer le nom (ou le handle) de la fenêtre actuellement active du windows) [ par bazbazus ] salut a tous je veut récupérer le nom (ou le handle) de la fenêtre actuellement active du windows)? . j'ai chercher sur le site et jai pas trouver.


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales