Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prüfen, ob RegistryKey vorhanden ist? (https://www.delphipraxis.net/150947-pruefen-ob-registrykey-vorhanden-ist.html)

Jamah 1. Mai 2010 20:22

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Wenn ich das in die erste Schleife baue, die als einzige nicht funktioniert, kommt: Das System kann die angegebene Datei nicht finden.

Aber irgendwie hab ich mich doch nicht vertippt. Ich habs nochmal von dem funktionierenden Teil mit Copy & Paste übernommen...

daywalker9 1. Mai 2010 20:47

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Zeig den Source nun mal mit der Fehlerbehandlung und zeige mal genau wo der Fehler aufläuft

Jamah 1. Mai 2010 20:56

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Delphi-Quellcode:
function RegCheck():Boolean;
begin
  result:= false;
  reg:= TRegistry.Create(Key_Read);
  try
    reg.RootKey:= (HKEY_LOCAL_MACHINE);
    try
    if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
    begin
      if reg.ValueExists('KeyName') then
          begin
            Names:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
            result:= True;
            x:= 1;
          end;
      end;
      if reg.LastError<>0 then
  begin
   ShowMessage(reg.LastErrorMsg);
  end;
      finally
        reg.CloseKey;
      end;
    reg.RootKey:= HKEY_Current_User;
    try
    if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
    begin
      if reg.ValueExists('KeyName') then
          begin
            Names:= ('HKEY_Current_User\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
            result:= True;
            x:= 2;
          end;
    end;
    finally
      Reg.CloseKey;
    end;
  finally
     reg.Free;
  end;
end;
Die obere Schleife

daywalker9 1. Mai 2010 21:05

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Aber wenn du per regedit guckst ist der Key da?

lbccaleb 1. Mai 2010 21:38

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Also bei mir funktioniert das so:

Delphi-Quellcode:
function RegCheck():Boolean;
begin
  result:= false;
  reg := TRegistry.Create(Key_Read);
  with reg do begin
    RootKey := HKEY_LOCAL_MACHINE;
    try
      if OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
        if ValueExists('KeyName') then begin;
          ShowMessage('da');
          x := 1;
          //Names:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
      end;
    finally
      CloseKey;
    end;

    RootKey := HKEY_CURRENT_USER;
    try
      if OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
        if ValueExists('KeyName') then begin;
          ShowMessage('da');
          x := 2;
          //Names:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
      end;
    finally
      CloseKey;
    end;

    Free
  end;
end;
Jetzt ist es deine Aufgabe das noch anzupassen, und Fehlerbehandlungsroutinen einzubauen.
Das weiß ich nicht genau, das ist Delphi unterschiedlich, und die Fehlerbehandlungen die Ihr verwendet gibt es bei meinem Delphi noch net.

Luckie 1. Mai 2010 23:20

Re: Prüfen, ob RegistryKey vorhanden ist?
 
So geht's mit der Fehlerbehandlung:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Dialogs, Registry, SysUtils;

implementation

function RegCheck(): Boolean;
var
  reg: TRegistry;
  Names: string;
  x: Integer;
begin
  result := false;
  reg := TRegistry.Create(Key_Read);
  try
    reg.RootKey := (HKEY_LOCAL_MACHINE);
    try
      if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
      begin
        if reg.ValueExists('KeyName') then
        begin
          Names := ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
          result := True;
          x := 1;
        end;
      end
      else
        ShowMessage(SysErrorMessage(GetLastError));
    finally
      reg.CloseKey;
    end;
    reg.RootKey := HKEY_Current_User;
    try
      if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
      begin
        if reg.ValueExists('KeyName') then
        begin
          Names := ('HKEY_Current_User\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
          result := True;
          x := 2;
        end;
      end
      else
        ShowMessage(SysErrorMessage(GetLastError));
    finally
      Reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
end;

end.
Und hör bitte auf von Schleifen zu reden. In dem ganzen Code gibt es keine einzige Schleife. if-Bedingungen sind Verzweigungen.

Jamah 2. Mai 2010 10:39

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Okay.
Wenn ich dieses Else mit dem ShowMessage(SysErrorMessage(GetLastError))einbaue (obere verzweigung) dann kommt (Key vorhanden, wird aber nicht gefunden) erst: Das Fenster hat keine Bildlaufleisten! und dann Falscher Parameter. Also 2 ShowMessages.
Hilft das weiter?

lbccaleb 2. Mai 2010 11:18

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Welche Version benutzt du jetzt??
Die von Luckie hat bereits Fehlerbehandlungen mit eingebaut.

Vllt solltest du noch mal zeigen was genau du jetzt hast an, weil ich hab das gefühl so kommen wir hier nicht weiter :shock:

Jamah 2. Mai 2010 12:06

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Das kommt bei mir mit der Version von Luckie raus.

p80286 3. Mai 2010 12:44

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Das ist aber ein seltsames Verhalten.

Ich habe Lukies Version ausprobiert, und sie funktioniert fehlerfrei.
allerdings läuft reg.OpenKey vor die Wand, da ich nur Leserechte habe. Dafür gibt es ja auch reg.OpenKeyReadonly.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz