Récupérer titre et ExeName de TApplication depuis composant

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 1 oct. 2008 à 16:37
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 8 oct. 2008 à 21:19
Bonjour,
juste un petit problème :'(
Chaque fois que je veux récupérer Application.Title et Application.ExeName depuis mon composant, je récupère :

Application.Title ==> 'Delphi 6';
Application.ExeName ==> 'C:\Program Files\Borland\Delphi 6\Bin\delphi32.exe';

Y'a-t-il moyen d'accéder à l'objet TApplication de l'application sur laquelle est posé le composant ? ...

Application.Title et Application.ExeName marchaient avant, mais ne marchent plus, je ne comprends pas :'(

Cordialement, Bacterius !

25 réponses

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 oct. 2008 à 17:09
Tu fais F9 en debuggage ou bien tu exécutes ton application a coté une fois compilée ?
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 17:33
J'ai déjà essayé JulioDelphi.
J'ai compilé mon composant, je l'ai installé, j'ai fermé le paquet du composant, j'ai ouvert une application, j'ai posé une instance de mon compo dedans mais pareil ... mêmes valeurs.

Cordialement, Bacterius !
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 oct. 2008 à 17:41
Tu peux filer du code ?
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 17:55
Bien sûr :

constructor TWinRun.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAuthor := 'Bacterius';
FWinRunUser := wrCurrentUser;
FWinRunState := CheckWinRun;
end;

procedure TWinRun.SetWinRunState(Value: Boolean);
begin
if Value <> FWinRunState then
begin
FWinRunState := Value;
SetWinRun(FWinRunState);
end;
end;

procedure TWinRun.SetWinRunUser(Value: TWinRunUser);
begin
if Value <> FWinRunUser then
begin
FWinRunUser := Value;
FWinRunState := CheckWinRun;
end;
end;

procedure TWinRun.SetWinRun(Value: Boolean);
begin
with TRegistry.Create do
begin
try
case FWinRunUser of
wrAllUsers: RootKey := HKEY_LOCAL_MACHINE;
wrCurrentUser: RootKey := HKEY_CURRENT_USER;
end;
if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False) then
begin
if Value then WriteString(Application.Title, Application.exeName)
else DeleteValue(Application.Title);
CloseKey;
end;
finally
Free;
end;
end;
end;

function TWinRun.CheckWinRun: Boolean;
begin
with TRegistry.Create do
begin
try
case WinRunUser of
wrAllUsers: RootKey := HKEY_LOCAL_MACHINE;
wrCurrentUser: RootKey := HKEY_CURRENT_USER;
end;
if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False) then
begin
Result := ValueExists(Application.ExeName);
CloseKey;
end;
finally
Free;
end;
end;
end;

Lors des CheckWinRun et SetWinRun, ils renvoient toujours les mêmes valeurs erronées.

Cordialement, Bacterius !

PS : esperons que l'indentation ne se défasse pas ...
0

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

Posez votre question
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 oct. 2008 à 18:16
Essaie avec ParamStr(0) à la place de Application.ExeName. Pour le title je vois pas encore.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
1 oct. 2008 à 18:26
Bonsoir

Pourquoi tu n'utilises pas ParamStr(0) ?

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 18:28
J'ai déjà essayé (j'utilise tout le temps cette fonction ParamStr pour récupérer le chemin d'un executable), ça renvoie pareil ^^

Cordialement, Bacterius !
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
1 oct. 2008 à 18:28
Oups, page rafraichie trop tard !

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
1 oct. 2008 à 18:32
Moi je serais plutôt de l'avis de JulioDelphi:
  Tu es sur que tu as le même résultat si tu lances l'executable compilé directement (à partir de l'explorateur de fichier) sans passer par le debugger ?

Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 18:51
Oui, l'executable contenant le composant, même en le lancant independamment de Delphi, mêmes valeurs.

Cordialement, Bacterius !
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
1 oct. 2008 à 19:28
Je vois pas pourquoi tu obtiens ça SI tu n'es pas dans le debugger ! Bug Delphi 6 ?

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 19:48
J'en sais rien, ça marchait avant.
Je dois avoir bidouillé un truc dans les options d'environnement ...

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 19:56
Rrah c'est encore pire maintenant ...
J'ai essayé sur un autre composant, je lui ai donnés quelques propriétés simples :

private
FMax: Integer;
FMin: Integer;

published
property Max: Integer read FMax write FMax;
property Min: Integer read FMin write FMin;

...

Juste pour tester sur un autre compo.

Et ça me dit :

Erreur Read : La propriété Max n'existe pas.
Erreur Read : La propriété Min n'existe pas.
Evidemment je viens de les inventer -_-.
Pourtant sur mon autre compo, aucun problème de ce genre.
J'ai l'impression d'être un peu détraqué.

Cordialement, Bacterius !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 oct. 2008 à 20:02
As-tu pensé à réinitialiser ou effacer les clés de registre entre temps ?

Parce que si les valeurs existent, elles sont relues à chaque fois.

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 20:10
Les clés registre de Delphi ?
Je ne comprends pas ... le registre influe avec Application.Title et Application.ExeName ?

Corialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 20:23
Tiens c'est bizarre ça ... j'ai ajouté une propriété de type String, et ça passe ...
Les propriétés Integer ne sont pas autorisées ??

Cordialement, Bacterius !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 oct. 2008 à 21:18
Mais non, pas le registre de Delphi. Qu'est-ce que tu vas chercher ?
Dans ton code, tu lis les valeurs du registre de Windows. Dans la mesure où tu lis la valeur des clés si elles existent, assures-toi qu'elles ne contiennent pas des valeurs qui auraient été faussées à un moment ou à un autre lors des exécutions antérieures.

Le comportement que tu décris à propos de ta classe de tests est plus que douteux...Pourrais-tu nous donner tout le code de la classe (interface ET implémentation) ?

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 21:43
unit WinRun;

interface

uses
Windows, Messages, SysUtils, Classes, Registry, Forms, Dialogs, Graphics;

type
TWinRunUser=(wrAllUsers, wrCurrentUser);

type
TWinRun = class(TComponent)
private
{ Déclarations privées }
FWinRunState: Boolean;
FWinRunUser: TWinRunUser;
FAuthor: String;
procedure SetWinRun(Value: Boolean);
function CheckWinRun: Boolean;
procedure SetWinRunState(Value: Boolean);
procedure SetWinRunUser(Value: TWinRunUser);
protected
{ Déclarations protégées }
property Author: String read FAuthor;
public
{ Déclarations publiques }
constructor Create(AOwner: TComponent); override;
published
{ Déclarations publiées }
property WinRunState: Boolean read FWinRunState write SetWinRunState;
property WinRunUser: TWinRunUser read FWinRunUser write SetWinRunUser;
end;

implementation

constructor TWinRun.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAuthor := 'Bacterius';
FWinRunUser := wrCurrentUser;
FWinRunState := CheckWinRun;
end;

procedure TWinRun.SetWinRunState(Value: Boolean);
begin
if Value <> FWinRunState then
begin
FWinRunState := Value;
SetWinRun(FWinRunState);
end;
end;

procedure TWinRun.SetWinRunUser(Value: TWinRunUser);
begin
if Value <> FWinRunUser then
begin
FWinRunUser := Value;
FWinRunState := CheckWinRun;
end;
end;

procedure TWinRun.SetWinRun(Value: Boolean);
begin
with TRegistry.Create do
begin
try
case FWinRunUser of
wrAllUsers: RootKey := HKEY_LOCAL_MACHINE;
wrCurrentUser: RootKey := HKEY_CURRENT_USER;
end;
if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False) then
begin
if Value then WriteString(Application.Title, Application.exeName)
else DeleteValue(Application.Title);
CloseKey;
end;
finally
Free;
end;
end;
end;

function TWinRun.CheckWinRun: Boolean;
begin
with TRegistry.Create do
begin
try
case WinRunUser of
wrAllUsers: RootKey := HKEY_LOCAL_MACHINE;
wrCurrentUser: RootKey := HKEY_CURRENT_USER;
end;
if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False) then
begin
Result := ValueExists(Application.ExeName);
CloseKey;
end;
finally
Free;
end;
end;
end;

end.

Voilà.
Mais je ne vois pas le problème entre ExeName et Application.Title. Ils ne sont pas influencés par le registre ?

Je ne vois pas du tout ^^'

Cordialement, Bacterius !
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
1 oct. 2008 à 21:50
j'ai pas regardé ton code en profondeur, mais essaye peut etre de desactiver tes traitements si tu as csDesingning in ComponentState .

PS :
function TApplication.GetExeName: string;
begin
  Result := ParamStr(0);
end;

comme ca, c'est clair
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
1 oct. 2008 à 21:57
petit astuce aussi, rien que pour toi bacterius ;)

const
  WRU_ROOTKEY : array[TWinRunUser] of HKEY = (HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER);

...
RootKey :=  WRU_ROOTKEY[WinRunUser];
0
Rejoignez-nous