AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein "Arbeitsplatz" als FileName in TOpenDialog
Thema durchsuchen
Ansicht
Themen-Optionen

"Arbeitsplatz" als FileName in TOpenDialog

Ein Thema von fishly · begonnen am 16. Jan 2010 · letzter Beitrag vom 17. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#1

"Arbeitsplatz" als FileName in TOpenDialog

  Alt 16. Jan 2010, 21:21
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
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 16. Jan 2010, 21:33
InitialDir angeben
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#3

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 16. Jan 2010, 21:38
Und das noch dazu: http://www.delphi-treff.de/tipps/dat...20%C3%B6ffnen/
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#4

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 16. Jan 2010, 22:01
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#5

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 16. Jan 2010, 23:17
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
http://www.tutorials.de/forum/c-c/20...dl_drives.html
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#6

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 17. Jan 2010, 00:16
@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.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#7

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 17. Jan 2010, 00:54
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?
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#8

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 17. Jan 2010, 02:33
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?
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#9

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 17. Jan 2010, 08:57
Ok himi, jetzt habe ich es verstanden.

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 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.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#10

Re: "Arbeitsplatz" als FileName in TOpenDialog

  Alt 17. Jan 2010, 09:30
Upps. Die Lösung ist erschreckend einfach:

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}'
Angehängte Dateien
Dateityp: 7z open_516.7z (1,7 KB, 10x aufgerufen)
Dateityp: 7z project1_105.7z (153,3 KB, 9x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
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