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/)
-   -   Lokalisierte Benutzerverzeichniss (https://www.delphipraxis.net/215910-lokalisierte-benutzerverzeichniss.html)

menten 24. Sep 2024 15:53

Lokalisierte Benutzerverzeichniss
 
Hallo zusammen,

ich habe gerade die undankbare Aufgabe einige Fehler in der Anwendung eines Kunden beheben zu müssen. Ein Problem ist die Tatsache, dass Dateien standardmäßig in einem Ordner auf dem Desktop gespeichert werden (Ich weiß, Todsünde. Sind aber noch mehr Todsünden in dem Programm :shock:).

Das Problem ist jetzt, dass der Datei-Öffnen Dialog die lokalisierten Verzeichnis Namen verwendet, in den Einstellungen aber die nicht-lokalisierten stehen. Sowohl ShGetKnownFolderPath als auch SHGetSpecialFolderPath liefern nämlich den nicht-lokalisierten.

Hat jemand eine Idee wie ich das umschiffen kann?


Danke und
Viele Grüße
Stefan Menten

blawen 24. Sep 2024 22:22

AW: Lokalisierte Benutzerverzeichniss
 
Dein genaues Problem mit diesem Umstand/Verhalten habe ich zwar nicht ganz begriffen...

Kann es sein, dass Du so etwas in dieser Art suchst?
Delphi-Quellcode:
uses
  Windows, ShlObj, ShellAPI, SysUtils;

function GetLocalizedFolderPath(const NonLocalizedPath: string): string;
var
  SHFileInfo: TSHFileInfo;
begin
  Result := NonLocalizedPath;
  if SHGetFileInfo(PChar(NonLocalizedPath), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_DISPLAYNAME) <> 0 then
    Result := SHFileInfo.szDisplayName;
end;

menten 25. Sep 2024 11:09

AW: Lokalisierte Benutzerverzeichniss
 
Moin,

und danke für die Hilfe.

das Problem ist, dass der OpenDialog mit dem lokalisierten Namen arbeitet, in den Einstellungen aber der physikalische Pfad steht. Wenn der Benutzer dann eine Datei öffnen will, landet er im Dokumenten-Ordner weil der OpenDialog den Pfad nicht findet.

Deine Funktion habe ich ausprobiert. Das funktionert, übersetzt aber nur den letzten Ordnernamen.

Ich habe es jetzt mal mit SHGetLocalizedName versucht. Das funktionirt aber nicht so wie ich es implementiert habe.

Delphi-Quellcode:
function GetLocalName(Path: string): string;
var
  wpNew: PWideChar;
  cch: UINT;
  pidsRes: integer;
  hr: HRESULT;
begin
  wpNew := StrAlloc(MAX_PATH);

  try
    FillChar(wpNew^, MAX_PATH, 0);
    cch := MAX_PATH;
    hr := SHGetLocalizedName(PWideChar(Path), wpNew, cch, pidsRes);
    if hr = 0 then
      result := wpNew
    else
      result := 'error';

  finally
    StrDispose(wpNew);
  end;

end;
Mache ich da was falsch?


Danke und
Gruß
Stefan Menten


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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