AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Andere Codevariante für Registryeintragung ??

Andere Codevariante für Registryeintragung ??

Ein Thema von Vader · begonnen am 7. Jul 2004 · letzter Beitrag vom 9. Jul 2004
Antwort Antwort
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#1

Andere Codevariante für Registryeintragung ??

  Alt 7. Jul 2004, 20:18
hallo,

gibt für diesen code auch eine andere variante, weil auf einmal
funzt dieser code bei mir nicht mehr ( proggi in den autostart )

Code:
procedure TForm1.FormCreate(Sender: TObject);
var MyReg:TRegistry;

 begin
  MyReg:=TRegistry.Create; MyReg.Rootkey:=hkey_local_machine; MyReg.Openkey('Software\Microsoft\Windows\CurrentVersion\Run',true); MyReg.WriteString('Works',Application.ExeName); MyReg.CloseKey; MyReg.Free;
 end;
mfg vader
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Andere Codevariante für Registryeintragung ??

  Alt 7. Jul 2004, 20:39
Könnte es damit zusammenhängen, dass du ein NT-System hast (NT, 2000 oder XP), und dass du dieses Mal dein Programm nicht als Admin startest? In dem Fall scheitert´s an den Rechten.
Mir war, als hätte ich erst kürzlich dazu eine Variante geschrieben, die die Rechte berücksichtigt. *denk und such* yeah, there it is.
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Andere Codevariante für Registryeintragung ??

  Alt 8. Jul 2004, 18:16
hallo


hab den code probiert aber es kommt der fehler:
[Fehler] Unit1.pas(36): Undefinierter Bezeichner: 'IsAdmin'


Code:
procedure Autostart(const fForAllUsers: boolean = true);
const
  RootKey : array[boolean]of HKEY =
    (HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE);
var
  reg    : TRegistry;
begin
  reg    := TRegistry.Create;
  if(reg <> nil) then
  try
    reg.RootKey := RootKey[IsAdmin and fForAllUsers];

    if(reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',
      true)) then
    try
      reg.WriteString('Programm-Name', paramstr(0));
    finally
      reg.CloseKey;
    end;
  finally
    free;                
  end;
end;

und noch was, wo kommt der code hin ich hab 's in formcreate hineinkopiert
mfg vader

mfg
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: Andere Codevariante für Registryeintragung ??

  Alt 8. Jul 2004, 18:29
Entschuldige, aber das kommt vom blinden Kopieren und "Nicht-Lesen". Dabei steht in dem gelinkten Beitrag groß drunter:
Zitat von MathiasSimmack:
benötigt lediglich: [dp]"IsAdmin"[/dp] von Nico.
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Andere Codevariante für Registryeintragung ??

  Alt 8. Jul 2004, 18:59
hallo,

das habe ich ja gelesen aber da komm ich zu einige beiträge,
ich weiß nicht was du meinst ,
"du benötigst lediglich Is Admin von Nico ??????


mfg vader
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: Andere Codevariante für Registryeintragung ??

  Alt 8. Jul 2004, 20:28
Das ist ein Suchlink, der alle Beiträge auflistet, in denen das magische Wort "IsAdmin" vorkommt. Wenn du dir mal ein bisschen Zeit nimmst, dann findest du die komplette Funktion. Als Tipp: gaaaaaaaaaaaanz unten in der Suchliste.
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Andere Codevariante für Registryeintragung ??

  Alt 9. Jul 2004, 06:28
hallo mathias,

das heißt also das dieser code nur funzt wenn ich admin bin ?

un mit dem link auf den anderen code kann ich herausfinden ob ich adminrechte habe


mfg vader
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Andere Codevariante für Registryeintragung ??

  Alt 9. Jul 2004, 07:42
Wie wäre es denn mal mit Nachdenken? Ich meine, so schwer kann das doch nicht sein. Ansonsten, ohne dir zu nahe treten zu wollen, wäre ein Grundlagen-Tutorial oder -Buch vllt. besser. Wenn du dir das mal anschaust:
Zitat von Vader:
procedure Autostart(const fForAllUsers: boolean = true);
Standardmäßig steht der Parameter dieser Prozedur auf true. Wenn dein Englisch gut ist, dann müsste dir "fForAllUsers" sagen, dass es "für alle Benutzer" bedeutet. Soll heißen: das automatisch zu startende Programm soll (sofern möglich) generell starten, egal welcher Benutzer sich anmeldet.

Und das "sofern möglich" wird in dieser Zeile definiert:
Zitat:
    reg.RootKey := RootKey[IsAdmin and fForAllUsers];
Das bedeutet, nur wenn du lokaler Admin bist (die Funktion hast du inzwischen ja gefunden) und wenn der Parameter aus dem Funktionskopf auf "true" gesetzt ist, dann wird der Schlüssel HKEY_LOCAL_MACHINE benutzt. Das bezieht sich einfach auf dieses Array hier:
Zitat:
Delphi-Quellcode:
const
  RootKey : array[boolean]of HKEY =
    (HKEY_CURRENT_USER, // <-- FALSE
     HKEY_LOCAL_MACHINE // <-- TRUE);
Das heißt, wenn du kein Admin bist oder wenn du den Parameter im Prozedurkopf auf FALSE setzt und dann den Autostart möchtest, dann wird das Programm grundsätzlich in HKEY_CURRENT_USER eingetragen und startet daher nur, wenn du dich mit dem gleichen Benutzer anmeldest.

Edit: Ich hätte es auch mit if machen können, dann wäre es vllt. deutlicher gewesen:
Delphi-Quellcode:
if IsAdmin and fForAllUsers then
  reg.RootKey := HKEY_LOCAL_MACHINE
else
  reg.RootKey := HKEY_CURRENT_USER;
Das bool-Array macht also das gleiche wie diese if-Prüfung, nur dass du eben kein if/else benötigst.


Das ist das Geheimnis des Codes, und Ja: Mit der Funktion "IsAdmin" kannst du herausfinden ob du Admin-Rechte hast.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf