Un handle capricieux !

Résolu
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010 - 28 juin 2005 à 15:57
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010 - 30 juin 2005 à 01:27
Bonjour, tout le monde ...
C'est encore moi, je pose beaucoup de questions ses temps-ci mais toujours pour la bonne cause. Je voulais remercier MasterHack pour sa réponse que je n'ai pas validé faute de temps de recherche. Pourtant il avait vu juste ;)
Cependant je reviens avec un problème encore + complexe lol voici ma source:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, FileCtrl,
Forms, Dialogs, SHDocVw, ScktComp, ExtCtrls, ExtDlgs, StdCtrls,
ShellAPI, mmSystem, OleCtrls, AppEvnts, Menus;

type
TForm1 = class(TForm)
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
MonprogMainHandle,DialogBoutonhandle : THandle;
rectangle : TRect;
begin
ShellExecute(0,'open', 'Control.exe', 'desk.cpl,,0', nil, SW_SHOWMAXIMIZED);
Sleep(1000);
MonprogMainHandle := Findwindow(nil,Pchar('Propriétés de Affichage')); //fenetre principale

{ Restaurer l'application si minimisée }
ShowWindow(MonprogMainHandle, SW_RESTORE);

{ Mettre la première instance en premier plan : }
SetForegroundWindow(MonprogMainHandle);

DialogBoutonhandle := FindwindowEx(MonprogMainHandle,0,nil,Pchar('&&Parcourir...')); //volet boutton

GetWindowRect(DialogBoutonhandle,rectangle);

{ Limite le déplacement de la souris à la zone Client de la fiche. }
ClipCursor(@rectangle);
end;
end.

le pb les amis c'est que si mon bouton serais => 'OK' par exemple cela fonctionnerai.
j'ai reussi à prendre le nom du handle du bouton parcourir => '&Parcourir...' et comme chacun le sais delphi souligne le caractere précédé du & alors j'ai pris soin bien entendu de faire '&&Parcourir...' mais cela n'y change absoluement rien ... J'espère que tout le monde à compris mon desepoire merci :)

7 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
29 juin 2005 à 09:45
Salut,



Il doit manquer un étage : le bouton "Parcourir" fait partie du dialog
"Bureau" et pas directement du dialogue "Propriétés d'affichage" donc :



MonprogMainHandle := Findwindow(nil, Pchar('Propriétés de Affichage')); //fenetre principale

...

DialogHandle := FindwindowEx(MonprogMainHandle, 0, nil, Pchar('Bureau')); //volet bureau

DialogBoutonhandle := FindwindowEx(DialogHandle, 0, nil, Pchar('&Parcourir...')); //boutton parcourir




devrait mieux fonctionner !



Ken@vo
<hr size="2" width="100%">Code, Code, Codec !




http://noepatents.eu.org/

[%3C/body ]
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
28 juin 2005 à 18:40
Au fait, c'est quoi ta question ?



Sinon, dans les "Propriétés de Affichage" de Windows, il y a bien un
bouton "Parcourir ..." mais qui n'a aucun caractère de souligné.

Donc je mettrai plutôt ceci (en fait j'enleve les &) :

<hr size= "2" width="100%">DialogBoutonHandle := FindWindowEx(MonProgMainHandle,0, nil ,'Parcourir...');

{ Normalement pas besion de transtyper en PChar explicitement les chaînes directement saisies dans le source. }


<hr size ="2" width="100%">

Autrement, si on parle bien du même bouton, tu doit savoir qu'il se
situe dans l'onglet "Bureau" et que les propriétés de l'affichage
s'ouvent sur l'onglet "Thèmes" (sous XP). C'est peut-être à prendre en
compte mais là, je ne peux pas t'aider.



N'oublie pas de poser ta question sinon .... on ne peut pas y répondre



@ ++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
0
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010
29 juin 2005 à 02:21
nan je suis sous win2000 pro dsl
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
29 juin 2005 à 13:06
ceci devrait marcher...une fois le curseur limité dans son déplacement, vous pouvez débloquer en appuyant sur le bouton "Esc" de votre PC...

Remarque : il faudra revoir le "Sleep" que tu as mis (j'ai laissé le brouillon d'un essais de boucle while à la place du sleep...mais pas très concluant)


<HR>

procedure TForm1.Button1Click(Sender: TObject);
var
MonprogMainHandle,OngletHandle,DialogBoutonhandle : THandle;
rectangle : TRect;
begin
ShellExecute(0,'open', 'Control.exe', 'desk.cpl,,0', nil, SW_SHOWMAXIMIZED);
{MonprogMainHandle:=0;


while MonprogMainHandle=0 do
MonprogMainHandle := Findwindow(nil,Pchar('Propriétés de Affichage')); //fenetre principale}


Sleep(1000);
MonprogMainHandle := Findwindow(nil,Pchar('Propriétés de Affichage')); //fenetre principale


{ Restaurer l'application si minimisée }
ShowWindow(MonprogMainHandle, SW_RESTORE);
//OngletHandle:=0;
OngletHandle:=FindwindowEx(MonprogMainHandle,0,'#32770','Bureau');
//showmessage(inttostr(OngletHandle));
{ Mettre la première instance en premier plan : }
SetForegroundWindow(OngletHandle);


DialogBoutonhandle := FindwindowEx(OngletHandle,0,nil,'&Parcourir...'); //volet boutton


GetWindowRect(DialogBoutonhandle,rectangle);


{ Limite le déplacement de la souris à la zone Client de la fiche. }
ClipCursor(@rectangle);
end;
end.

<HR>




N'oubliez pas de cliquer sur Réponse acceptée si c'est OK



DrJerome
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
29 juin 2005 à 13:19
oups... désolé si au final c'est +/- idem que Kenavo...(au #32770 près)

je salut Kenavo au passage ;)

DrJerome
0
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010
30 juin 2005 à 01:20
Marche toujours pas, je n'ai pas l'onglet bureau because je suis sous windows 2000 pro et que c directement => 'Propriétés de Affichage' => '&Parcourir...'
pourtant j'ai fé un copier coller de la procedure de DRJEROME. Si ça marche chez vous c louche lol
0
cs_askil2000 Messages postés 92 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 12 avril 2010
30 juin 2005 à 01:27
DialogHandle := FindwindowEx(MonprogMainHandle, 0, nil, Pchar('Arrière-plan')); //volet bureau pour windows 2000 pro = 'Arrière-plan' Merci les gens !!!!!!
0
Rejoignez-nous