Delphi-PRAXiS

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}'

himitsu 17. Jan 2010 11:08

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Zitat:

Zitat von Garfield
Nachtrag:

das letzte Verzeichnis reicht aus ... man muß sich ja nicht mehrfach durch's "ganze" System hangeln

z.B.: Administration Tools - Verwaltung = '::{D20EA4E1-3957-11d2-A40B-0C5020524153}'

Garfield 17. Jan 2010 11:32

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Zitat:

Zitat von himitsu
das letzte Verzeichnis reicht aus ... man muß sich ja nicht mehrfach durch's "ganze" System hangeln

Ich habe diese Werte bei Codeproject gefunden und sie funktionieren so bei meinem XP. An anderer Stelle habe ich kürzere Werte, wie Du sie vorschlägst gefunden, aber diese funktionieren nicht zwingend. Wenn ich nur den letzten Wert nehme, funktioniert das bei mir mit
  • Network Connection/Neighbourhood
  • Printer and Faxes
  • Tasks Scheduler
  • Web Folder
Mit
  • Administration Tools
  • Control Panel
  • Fonts
  • Scanner and Cameras
funktioniert es nicht. Dort komme ich bei Default Navigator an. Wer weiß, wovon das abhängig ist.

Blackheart 17. Jan 2010 12:15

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Zitat:

Zitat von fishly
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

Zitat:

Zitat von Blackheart
InitialDir angeben

Zitat:

Zitat von Garfield
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}'


fishly 17. Jan 2010 14:36

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Alles klar
danke für die ganzen Vorschläge!
Ich hatte gedacht, ich hab alles durchprobiert, aber leider hab ich nur das hier probiert:

Delphi-Quellcode:
OpenDialog.FileName := '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}';
das hat nicht funktioniert und die einfache Lösung, was blackheart vermutlich von Anfang an meinte, ist dann diese hier:

Delphi-Quellcode:
OpenDialog.InitialDir := '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}';
Danke für eure Hilfe

BUG 17. Jan 2010 14:42

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Zitat:

Zitat von fishly
was blackheart vermutlich von Anfang an meinte, ist dann diese hier:

Ein paar Wörter mehr und man hätte auch von Anfang an gewusst, was Blackheart gemeint hat :duck:

Garfield 17. Jan 2010 14:46

Re: "Arbeitsplatz" als FileName in TOpenDialog
 
Manche haben eben Probleme, das auszudrücken, was sie meinen. Mal schreiben sie zu wenig und bei nächsten mal zu viel.


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