![]() |
TRegistry: Unterschied zwischen Konsole und GUI?
Hallöle,
gegeben sei folgende Funktion:
Delphi-Quellcode:
In einem GUI-Programm bekomme ich true und damit einen Wert zurück, in einer Konsolenanwendung nicht (natürlich bei exakt identischem Code). Hat jemand eine Ahnung, woran das liegen könnte?
function GetTheUltimateAnswer(out Value: string): Boolean;
const Key = 'SOFTWARE\Deep Thought'; Ident = 'Die Frage nach dem Leben, dem Universum und einfach allem'; var Reg: TRegistry; begin Value := ''; Result := false; Reg := TRegistry.Create(KEY_READ); try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey(Key, false) then try Value := Reg.ReadString(Ident); Result := Value <> ''; finally Reg.CloseKey; end; finally Reg.Free; end; end; Nachtrag: mit einem anderen Schlüssel funktioniert das auch in der Konsole, hä? :gruebel: |
AW: TRegistry: Unterschied zwischen Konsole und GUI?
42
Rechte? |
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Leserechte sind vorhanden, außerdem ist das ja derselbe User, oder wird ein Konsolenprogramm in einem anderen Kontext ausgeführt? Achja, OpenKey wird noch ausgeführt, nur beim ReadString kommt nix zurück.
|
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Eventuell bekommt die Konsole andere Rechte, bzw. die (eventuell aktivierte) Virtualisierung greift bei Konsolen anders ein?
Bei Dateioperationen weiß ich z.B. daß dort die OEM-Codepage verwendet wird, wärend GUI-Anwendungen auf ANSI laufen. (drum sieht WriteLn('ä') etwas komisch aus, bzw FindFirst mit solchen Umlauten wirkt auch nicht unbedingt so, wie gewollt) ![]() ![]() ![]() Vielleicht gibt's sowas auch für die Registry, bzw. es wirkt sich auch auf Diese aus. [add] ![]() |
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Hmm..., der originale Ident enthält einen Tiefstrich, ob es daran liegt? Aber ist der denn unterschiedlich zwischen Ansi und OEM, zumindest ist mir das nie aufgefallen.
|
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Reg := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY );
geht bei mir im nicht Wow6432Node |
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Nochmal: derselbe Code mit demselben Delphi auf demselben System (Vista 32 Business) liefert entweder ein Ergebnis(GUI) oder nicht(Konsole). Wahrscheinlich hat das tatsächlich mit der Zeichenkodierung zu tun, aber bevor ich jetzt mit OEMToCharBuff o.ä. herumhantiere habe ich nun doch ein "normales" VCL-Progrämmchen daraus gemacht. Interessant ist der Effekt trotzdem.
|
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Du kannst auch das {$APP CONSOLE} aus der Konsolenanwendung entfernen, dann ist es quasi eine GUI-Anwendung, ohne GUI.
Funktioniert es dann? (Notfalls kann man sich dann über CreateConsole AllocConsole ein Konsolenfenster in seine GUI-Anwendung holen) |
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Tut auch nicht, nur als Standard-VCL-Programm. Komisch, das. Ich probier das jetzt mal mit Umkodieren, weil es mich interessiert.
[edit] Jetzt wird es ganz ulkig: KeyExists liefert auch unter VCL false, ausgelesen wird trotzdem der richtige Wert :shock: [/edit] [edit2] Logisch, das müsste ja auch ValueExists heißen :oops: [/edit2] |
AW: TRegistry: Unterschied zwischen Konsole und GUI?
Und auch hier wieder mal der Hinweis auf den
![]() Damit debugge ich so etwas immer schnell und brauche nicht lange suchen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 Uhr. |
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