Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 28.09.11 21:56
Hey,
ich versuch grad verzweifelt einen bestimmten Schlüssel aus der Regestry zu laden, aber es geht nicht so wie ich mir das vorstelle. Der Schlüssel ist 'HKEY_LOCAL_MACHINE\SOFTWARE\MayComputer\eDocPrintPro\' und der wird mir bei regedit auch richtig angezeigt. Wenn ich das ganze jetzt im Programm auslesen will, dann kann er den Schlüssel nicht finden. Hier ma der Code dazu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function ReadPrintProDir: String; var reg: TRegistry; begin result := ''; reg := TRegistry.Create(KEY_ALL_ACCESS); try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('SOFTWARE\MayComputer\eDocPrintPro\', False) then begin try if reg.ValueExists('eDocPrintPro') then result := reg.ReadString('eDocPrintPro'); finally reg.CloseKey; end; end; finally reg.Free; end; if (Length(result) > 0) and (result[Length(result)] <> '\') then result := result + '\'; end; |
OS ist Win7x64. Hat da jmd ne Idee oder wenigstens einen kleinen Tipp für mich?
MfG & Thx Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.09.11 22:48
Das hätte unter Windows XP auch schon nicht geklappt, wenn du nicht standardmäßig als Administrator an deinem Rechner gearbeitet hättest. Bei mir hätte das nämlich nicht funktioniert. Den Hive HKLM kann man als normaler Benutzer nur lesen. Du öffnest ihn aber mit allen Rechten, also auch zum Schreiben. Und dann brauchst du Administratorenrechte. Und hättest du eine gescheite Fehlerbehandlung eingebaut, hättest du auch eine Fehlermeldung bekommen, warum es nicht funktioniert.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 28.09.11 23:10
Hey,
das Programm läuft mit Admin-Rechten (is eine Art Installation, also brauch es die Rechte sowieso). Und GetLastError ist 0. Also kein Fehler vorhanden. War es nicht so, das Win7 für 32-Bit Anwendungen eine Art VM hat? Die hat ja dann auch teilweise ne andere Registry, oder bin ich da grad auf dem Holzweg?
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.09.11 23:14
Hmpf, warum gibst du die entscheidenden Informationen erst jetzt? Es ist also Windows 7 64-Bit. Und wie viel Bit hat dein Programm? Wenn es nur ein 32-Bit Programm ist, wird es in den 32-Bit Zweig der Registry umgeleitet. Das kann man aber mit einem zusätzliche Flag beim Öffnen der Registry verhindern. Musst du mal googlen. aber ich würde den Hive trotzdem nur lesend öffnen, wenn ich nur lesen will.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 28.09.11 23:18
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.09.11 23:21
Wer liest schon das Kleingedruckte? Und es ist nicht gesagt, dass das Programm auch auf dem Rechner laufen soll mit dem Windows 7.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 28.09.11 23:30
Ahhh jetzt kommt Licht ins dunkel Hier die Beschreibung. Danke für die schnelle Hilfe.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 29.09.11 00:33
Das gibt aber wieder ein Gefrickel bei 32-Bit/64-Bit. Das Programm muss dann feststellen ob es unter 32-BNit oder 64-Bit läuft und Windows 2000 kompatible ist es dann auch nicht mehr.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 29.09.11 00:42
Hey,
das mit dem Win2000 weiß ich, aber das brauch ich nich wirklich. Und für das andere Problem:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| function IsWOW64: Boolean; type TIsWow64Process = function( Handle: THandle; var Res: BOOL ): BOOL; stdcall; var IsWow64Result: BOOL; IsWow64Process: TIsWow64Process; begin IsWow64Process := GetProcAddress( GetModuleHandle('kernel32'), 'IsWow64Process' ); if Assigned(IsWow64Process) then begin if not IsWow64Process(GetCurrentProcess, IsWow64Result) then raise Exception.Create('Bad process handle'); Result := IsWow64Result; end else Result := False; end; |
Es arbeitet unter Win7 zumindest erstmal so, wie es soll.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 29.09.11 00:48
Wenn IsWOW64 wahr ist, dann ist es ein 32-Bit Prozess auf einen 64-Bit Windows? Ich hätte die Funktion Is32On64 genannt. Dieses WindowsOnWindows verursacht bei mir immer ein Knoten im Hirn. 
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 29.09.11 08:29
Ich vermute wenn isWOW64 wahr ist, ist es ein 64bit Windows... ob dein Programm in dem du die funktion aufrufst 32bit oder 64bit ist wirst du ja vermutlich selbst wissen
Insofern ist der name schon ganz okay gewaehlt
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 29.09.11 10:36
Nicht unbedingt. Ich kann es mit Delphi einmal als 32-Bit compilieren und einmal als 64-Bit ohne was am Code ändern zu müssen. Also weiß ich nicht mit wie viel Bit mein Programm läuft.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 29.09.11 11:30
Aya hat folgendes geschrieben : | Ich vermute wenn isWOW64 wahr ist, ist es ein 64bit Windows... |
Wofür soll dann "WO" stehen  ? Dass Windows on Windows64 das 32-Bit-Subsystem der x64-Versionen ist, sollte doch langsam bekannt sein.
_________________ >λ=
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 29.09.11 11:44
ist ja auch bekannt. Nur ich muss immer zwei mal nachdenken, was gemeint ist. Keine Ahnung, was mich da jedes mal verwirrt.
|
|