Announcement

Collapse
No announcement yet.

RegQueryValueEx und Unicode - wie auslesen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • RegQueryValueEx und Unicode - wie auslesen?

    Hallo,

    ich versuche gerade herauszufinden, wie Unicode-Strings aus der Registry gelesen werden können. Dazu habe ich folgenden Code, welcher jedoch immer ein Fragezeichen zurückgibt an der entprechenden Stelle:

    function GetSchemename: Widestring;
    var
    s: widestring;

    EnvKey: HKEY;
    Buf: array[0..32] of WideChar;
    BufSize: DWord;
    RegType: DWord;
    rc: DWord;
    begin
    result := '.Default'; {*** defaultwert ***}
    EnvKey := HKEY_CURRENT_USER;
    BufSize := SizeOf(Buf);
    ZeroMemory(@Buf, BufSize);
    RegType := REG_SZ;
    if (RegOpenKeyEx(HKEY_CURRENT_USER, PChar('AppEvents\Schemes'), 0, KEY_READ, EnvKey) = ERROR_SUCCESS) then
    try
    rc := RegQueryValueEx(EnvKey, PChar(''), nil, @RegType, @Buf, @BufSize);
    if rc = ERROR_SUCCESS then
    s := (buf);
    result := s;
    RegCloseKey(EnvKey);
    finally
    RegCloseKey(HKEY_CURRENT_USER);
    end;
    end;

    Es geht darum, gespeicherte Profile auszulesen. Wenn nun ein Soundschema gespeichert wird, wird ein Unicode-Zeichen an den Namen angehängt (WinXP). Aus Soundschema wird zum Beispiel Soundsc0? - Windows kürzt ab und erhöt einen Zähler. Das Fragezeichen wird in der Registry unter
    HKEY_CURRENT_USER\AppEvents\Schemes\Names
    immer als ein Viereck angezeigt.

    Wie kann man das nun in einen String bekommen - WideString funktioniert hier nicht ?

  • #2
    wenn Du mit den Ansi-Versionen der API-Funktionen zugreifst kann es nicht gehen.
    Schau mal in der Jedi Code Library. Dort gibt es für den Registry-Zugriff ein paar Funktionen um den Zugriff auf die Wide-Versionen der API-Funktionen "Delphi-Like" zu verpacken

    Comment


    • #3
      download unter :
      http://sourceforge.net/project/showfiles.php?group_id=47514&package_id=40504&rele ase_id=392323

      hier die Funktionen aus der JCL:

      function RegReadWideString(const RootKey: DelphiHKEY; const Key: string; const Name: string): WideString;

      function RegReadWideStringDef(const RootKey: DelphiHKEY; const Key: string; const Name: string; Def: WideString): WideString;

      function RegReadAnsiString(const RootKey: DelphiHKEY; const Key: AnsiString; const Name: AnsiString): AnsiString;

      function RegReadAnsiStringDef(const RootKey: DelphiHKEY; const Key: AnsiString; const Name: AnsiString; Def: AnsiString): AnsiString;

      Project JEDI
      Unit
      JclRegistry

      Gruß
      Andrea

      Comment

      Working...
      X