Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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.
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 ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 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
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é.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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.
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 ?