Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Registry - Woher TimeStamp nehmen? (https://www.delphipraxis.net/145982-registry-woher-timestamp-nehmen.html)

Alter Mann 11. Jan 2010 20:46


Registry - Woher TimeStamp nehmen?
 
Hallo,

ein gesundes neues Jahr.

Ein Frage: gibt es eine Möglichkeit, so wie bei Dateien und Verzeichnissen, die
Zeitstempel eines Registrierungsschlüssels auszulesen, wenn ja über welche API
würde es gehen?

Für Tipps, Hinweise und Beispiele wie immer dankbar

Alter Mann

Luckie 11. Jan 2010 20:53

Re: Registry - Woher TimeStamp nehmen?
 
Du meist, wann ein Schlüssel erstellt oder geändert wurde? Meines Wissen gibt es das nicht. Aber wozu braucht man das?

s.h.a.r.k 11. Jan 2010 20:54

Re: Registry - Woher TimeStamp nehmen?
 
Kann mich da Luckie nur anschließen. Zudem würde das diese Datenbank weiter unnötig aufblähen. Wenn du sowas brauchst, dann musst du eher selbst Einträge anlegen. Oder du steigst auf INI-Files (oder XML, oder oder oder...) um, da kannst du dann mit entsprechenden Daten umgehen.

fatalerror 11. Jan 2010 21:13

Re: Registry - Woher TimeStamp nehmen?
 
Dass es sehr wohl geht zeigt regedit:

Exportiert einfach den gewünschten Registry Wert als Text:

Code:
Schlüsselname: HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip
Klassenname: <KEINE KLASSE>
Letzter Schreibzugriff: 15.07.2008 - 20:07
Wert 0
  Name: Path
  Typ: REG_SZ
  Daten: C:\Program Files\7-Zip
Ich weiss aber nicht, ob dies irgend wie in einer API offengelegt ist.

Luckie 11. Jan 2010 21:15

Re: Registry - Woher TimeStamp nehmen?
 
Oh, das kannte ich noch nicht. Wieder was dazu gelernt. Aber dann muss es auch eine API geben.

Astat 11. Jan 2010 21:41

Re: Registry - Woher TimeStamp nehmen?
 
Zitat:

Zitat von Alter Mann
Für Tipps, Hinweise und Beispiele wie immer dankbar

Hi, auch nachträglich ein Gutes!

Versuch mal dass.

Delphi-Quellcode:

program Project1;

  {$APPTYPE CONSOLE}
 
uses
  Windows,
  Messages,
  SysUtils,
  Registry;
 
var
  RegDate: TDateTime;
  RegKeyInfo: TRegKeyInfo;
  TimeZoneInfo: TTimeZoneInformation;

function DateTimeToLocalDateTime(DateTime: TDateTime): TDateTime;
begin
  case GetTimeZoneInformation(TimeZoneInfo) of
    TIME_ZONE_ID_STANDARD:
      Result := DateTime - (TimeZoneInfo.Bias / 60 / 24);
    TIME_ZONE_ID_DAYLIGHT:
      Result := DateTime - ((TimeZoneInfo.Bias +
        TimeZoneInfo.DaylightBias) / 60 / 24);
    else
      Result := 0;
  end;
end;

procedure FileTimeToDateTime(ft: TFileTime; var dt: TDateTime);
var
  SystemTime: TSystemTime;
  FileTime: TFileTime;
begin
  if FileTimeToLocalFileTime(ft, FileTime) then begin
    FileTimeToSystemTime(ft, SystemTime);
    dt := SystemTimeToDateTime(SystemTime);
  end;
end;

begin
  with TRegistry.Create do begin
    RootKey := HKEY_CURRENT_USER;
    OpenKey('HKEY_CURRENT_USER\Software\Microsoft\Windows', False);
    GetKeyInfo(RegKeyInfo);
    with RegKeyInfo do begin
      FileTimeToDateTime(FileTime, RegDate);
      RegDate := DateTimeToLocalDateTime(RegDate);
    end;
    writeln(DateTimeToStr(RegDate));
    CloseKey;
  end;
  readln;
end.

lg. Astat

Garfield 12. Jan 2010 08:12

Re: Registry - Woher TimeStamp nehmen?
 
MSDN Registry Functions -> RegEnumKeyEx, RegQueryInfoKey

RegQueryInfoKey verwendet Luckie in seinem Win32Api Tut. Jedoch nur um zu sehen, ob der Eintrag existiert.

Sonst wie Astat schrieb:

http://www.swissdelphicenter.ch/de/showcode.php?id=2034
http://pasotech.altervista.org/delphi/articolo6.htm

Alter Mann 12. Jan 2010 11:34

Re: Registry - Woher TimeStamp nehmen?
 
Hallo

Erst einmal vielen Dank.

Das Beispiel von Astat funktioniert soweit.

Doch wie sieht es aus, wenn der Schlüssel in dieser Form:
Zitat:

'\SYSTEM\MountedDevices\\??\Volume{3028b152-8305-11dd-89c8-806d6172696f}'
vorliegt?

Durch das '\\' kann er nicht auf den Schlüssel zugreifen.

Jemand eine Idee?

Alter Mann

Garfield 12. Jan 2010 12:05

Re: Registry - Woher TimeStamp nehmen?
 
Key: '\SYSTEM\MountedDevices\'
Value: '\??\Volume{3028b152-8305-11dd-89c8-806d6172696f}' (REG_BINARY)

Bei RegQueryValueEx gibt keine Zeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.

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