Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   "Arbeitsplatz" als FileName in TOpenDialog (https://www.delphipraxis.net/146260-arbeitsplatz-als-filename-topendialog.html)

fishly 16. Jan 2010 21:21


"Arbeitsplatz" als FileName in TOpenDialog
 
Hallo,

ich bin jetzt nach längerem Suchen und Ausprobieren immer noch nicht auf die Lösung meines Problems gekommen, obwohl es wahrscheinlich ziemlich banal ist.
Deshalb eine kurze Erklärung:

Ich möchte als FileName in einem OpenDialog "Arbeitsplatz" setzten, damit beim Öffnen die Ansicht des Arbeitsplatztes dargestellt wird.

Mir ist schon dieser Code hier über den Weg gelaufen {20D04FE0-3AEA-1069-A2D8-08002B30309D}
Aber ich wusste in Delphi nichts damit anzufangen.

Ich hoffe ihr versteht mein Problem und könnt mir helfen.

lg fishly

Blackheart 16. Jan 2010 21:33

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
InitialDir angeben

Garfield 16. Jan 2010 21:38

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Und das noch dazu: http://www.delphi-treff.de/tipps/dat...20%C3%B6ffnen/

fishly 16. Jan 2010 22:01

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Delphi-Quellcode:
function GetSpecialFolder(const AFolder: Integer): string;
(* const
CSIDL_Desktop für Desktop,
CSIDL_Controls für Systemsteuerung,
CSIDL_Printers für Drucker,
CSIDL_Personal für Eigene Dateien,
CSIDL_Drives für Arbeitsplatz,
CSIDL_Network für Netzwerkumgebung*)

type
_SHELLEXECUTEINFOA = record
  cbSize: DWORD;
  fMask: ULONG;
  Wnd: HWND;
  lpVerb: PAnsiChar;
  lpFile: PAnsiChar;
  lpParameters: PAnsiChar;
  lpDirectory: PAnsiChar;
  nShow: Integer;
  hInstApp: HINST;
  { Optional fields }
  lpIDList: Pointer;
  lpClass: PAnsiChar;
  hkeyClass: HKEY;
  dwHotKey: DWORD;
  hIcon: THandle;
  hProcess: THandle;
end;

ShellExecuteInfo = _SHELLEXECUTEINFOA;

var
  ItemIDList: PItemIDList;
  hPath: PChar;
  ShellH: IMalloc;
begin
  if SUCCEEDED(SHGetSpecialFolderLocation(Application.Handle, AFolder, ItemIDList)) then
  begin
    try
      hPath:= StrAlloc(max_path);
      try
        if SHGetPathFromIDList (ItemIDList, hPath) then
          Result:=hPath;
      finally
        StrDispose(hPath);
      end;
    finally
     if SHGetMalloc(ShellH) = NOERROR then
       ShellH.Free(ItemIDList);
    end;
  end
  else
    RaiseLastWin32Error;
end;
Also so sieht meine Deklaration dann aus.
Wenn ich jetzt das Verzeichnis für Arbeitsplatz haben will, gibt die Funktion einen leeren String zurück. Warum? Hab ich einen Fehler in der Deklaration?

himitsu 16. Jan 2010 23:17

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
erstmal das
Delphi-Quellcode:
try
  if SHGetPathFromIDListW(ItemIDList, hPath) then
    Result:=hPath
  else
    RaiseLastWin32Error;
finally
und schon wüßtest du, wo es hängt
(PS: vorher konnte Result nicht initialisiert sein)

dann noch das
MSDN-Library durchsuchenCSIDL_DRIVES
und du wirst es nicht glauben, aber da findet man sogar was :angel2:
http://www.tutorials.de/forum/c-c/20...dl_drives.html

Garfield 17. Jan 2010 00:16

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
@fishly

ShellExecuteInfo brauchst Du nicht. Ich bekomme auch nur einen leeren String. Alternativ könnte man CSIDL_DESKTOP nehmen. Dann bist eine Ebene drüber.

@himi

nee nee. Das knallt.

himitsu 17. Jan 2010 00:54

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Zitat:

Zitat von Garfield
nee nee. Das knallt.

Ja genau.
Und warum "knallt" es?
Weil der Befehl so nicht geht, oder was denkst du denn, warum nur ein Leerstring rauskam? :zwinker:
Siehe Link.
Zitat:

SHGetSpecialFolderPath klappt nicht mit virtuellen Foldern. Die Funktion ordnet ja einen echten Pfad einem der Shell-Folder zu. CSIDL_DRIVES gibt es allerdings nicht als Pfad.

fishly 17. Jan 2010 02:33

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Aber warum schreiben die das dann hier so hin?

irgendwie versteh ich dass nicht so ganz.
Ich meine eure Erklärungen erscheinen mir einleuchtend, aber warum steht dass dann in nem Tutorial so, als würde es funktionieren?

Gibt es sonst noch eine andere Möglichkeit mein Anfangsproblem zu lösen?

Garfield 17. Jan 2010 08:57

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Ok himi, jetzt habe ich es verstanden. :?:

Zitat:

Zitat von fishly
... aber warum steht dass dann in nem Tutorial so, als würde es funktionieren?

Naja. Wie man es nimmt. Du bekommst mit SHGetSpecialFolderLocation einen Pointer auf den Arbeitsplatz, jedoch kann SHGetPathFromIDList keinen Pfad ermitteln. Deshalb der leere String.

Bei ShellExecuteInfo reicht dieser Pointer und der Explorer öffnet mit dem Arbeitsplatz. Das ShellTreeView macht es wie in Himitsus C-Forums-Link angesprochen und hangelt sich vom Desktop zum Arbeitsplatz durch.

Nachtrag: Das ShellTreeView kann mit dem rfMyComputer auch nichts anfangen.

Zitat:

Zitat von fishly
Gibt es sonst noch eine andere Möglichkeit mein Anfangsproblem zu lösen?

Mit dem TOpenDialog wohl nicht direkt. Vielleicht kannst Du Dich mit obigem Vorschlag anfreunden und die nächsthöhere Ebene - den Desktop - öffnen. Sonst müsste man versuchen, einen Klick auf den Arbeitsplatz-Button in der Placesbar zu simulieren oder die Auswahl der Combobox zu manipulieren.

Oder einen anderen Dialog wählen. Beim SelectDirectory lassen sich wohl auch Dateien anzeigen.

Garfield 17. Jan 2010 09:30

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Liste der Anhänge anzeigen (Anzahl: 2)
Upps. Die Lösung ist erschreckend einfach:

Delphi-Quellcode:
OpenDialog1.InitialDir := '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}';
Nachtrag:

Administration Tools - Verwaltung
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D20EA4E1-3957-11d2-A40B-0C5020524153}'

Computer search results folder - Suchergebnisse - Computer
'::{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}'

Control Panel - Systemsteuerung
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}'

Default Navigator - Voreinstellung des Browsers
'::{871C5380-42A0-1069-A2EA-08002B30309D}'

Fonts - Schriftarten
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D20EA4E1-3957-11d2-A40B-0C5020524152}'

My Computer - Arbeitsplatz
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}'

My Documents - Eigene Dateien
'::{450D8FBA-AD25-11D0-98A8-0800361B1103}'

Network Favorites - Netzwerkumgebung
'::{208D2C60-3AEA-1069-A2D7-08002B30309D}'

Network Connection/Neighbourhood - 'Netwerkverbindungen'
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}'

Network Search Results computer - Suchergebnisse
'::{E17D4FC0-5564-11D1-83F2-00A0C90DC849}'

Printer and Faxes - 'Drucker und Faxgeräte'
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}'

Recycle Bin - 'Papierkorb'
'::{645FF040-5081-101B-9F08-00AA002F954E}'

Scanner and Cameras - Scanner und Kameras
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{E211B736-43FD-11D1-9EFB-0000F8757FCD}'

Tasks Scheduler - Geplante Tasks
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}'

Web Folder - 'Webordner'
'::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{BDEADF00-C265-11D0-BCED-00A0C90AB50F}'


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.
Seite 1 von 2  1 2      

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