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/)
-   -   Delphi Arbeitsplatz öffnen (https://www.delphipraxis.net/55992-arbeitsplatz-oeffnen.html)

Savar 30. Okt 2005 02:40


Arbeitsplatz öffnen
 
Wie kann ich aus einem Programm heraus den Arbeitsplatz öffnen?

Savar 30. Okt 2005 02:11

Re: Arbeitsplatz öffnen
 
Ich habe es jetzt etwas unfein mit einer Verknüpfung auf den Arbeitsplatz und ShellExecute gelöst.

marabu 30. Okt 2005 06:24

Re: Arbeitsplatz öffnen
 
Hallo Savar,

ohne Verknüpfung haben wir das in einem anderen thread so gelöst:

Delphi-Quellcode:
uses
  SysUtils,
  ShellApi;

var
  exeName: string;
begin
  exeName := IncludeTrailingPathDelimiter(GetEnvironmentVariable('WINDIR')) + 'explorer.exe';
  ShellExecute(GetDeskTopWindow, 'open', PChar(exeName), '/e,/root,c:\daten', nil, SW_SHOW);
end;
Grüße vom marabu

Savar 31. Okt 2005 18:40

Re: Arbeitsplatz öffnen
 
Ich glaub dir das jetzt mal ohne es auszuprobieren :wink: , auch wenn ich von diesen Funktionen noch nie etwas gehört habe.
Ich belasse es wohl bei der Verknüpfung (denn das funktioniert auch mit dem Papierkorb, Suchen... oder der Netzwerkumgebung). Trotzdem Danke.

LoRd-MuldeR 31. Okt 2005 21:56

Re: Arbeitsplatz öffnen
 
Ich hab mal dieses Programm geschrieben, das so weit 1a funktioniert :-D
Ich finde das um einiges eleganter, als über eine Verknüpfung. Außerdem musst du dich nich drum bemühen, dass deine Verknüpfung stimmt und du kannst alles aus dem Programm heraus festlegen.

In meinem Bespiel kannst du CSIDL_DRIVES auch durch etwas anderes ersetzen. Im moment wird direkt der Arbeitsplatz im Explorer angeziegt. Du kannst aber auch den Desktop (CSIDL_DESKTOPDIRECTORY), "Eigene Dateien" (CSIDL_PERSONAL) und viele andere benutzen...

Delphi-Quellcode:
uses
  Windows, ShellAPI, ShlObj;

{$R *.res}

var
  Info: ShellExecuteInfo;
  List: PItemIDList;

begin
  SHGetSpecialFolderLocation(GetActiveWindow, CSIDL_DRIVES, List);

  ZeroMemory(@Info, SizeOf(ShellExecuteInfo));
  Info.cbSize := SizeOf(ShellExecuteInfo);
  Info.lpVerb := 'explore';
  Info.Wnd := GetActiveWindow;
  Info.fMask := SEE_MASK_IDLIST;
  Info.lpIDList := List;
  Info.nShow := SW_SHOWMAXIMIZED;

  ShellExecuteEx(@Info)
end.

BTW:
GetEnvironmentVariable is übrigens etwas unsicher und sollte vermieden werden! Mit GetWindowsDirectory fährst du sicher...

Savar 1. Nov 2005 14:57

Re: Arbeitsplatz öffnen
 
Woher weiß ich eigentlich die Konstanten (à la CSIDL_***)? Gibt's da eine Liste?

ManuMF 1. Nov 2005 15:37

Re: Arbeitsplatz öffnen
 
Siehe hier.

Gruß,
ManuMF

LoRd-MuldeR 1. Nov 2005 21:52

Re: Arbeitsplatz öffnen
 
Zitat:

Zitat von Savar
Woher weiß ich eigentlich die Konstanten (à la CSIDL_***)? Gibt's da eine Liste?

Guck doch einfach in die Unit, wo die Konstanten definiert sind (müsste ShellAPI.pas, ShloBj.pas oder Windows.pas sein). Die bedeutung der einzelnen CSIDLs erschließt sich ja aus dem Namen. Ansonsten is das auch alles ausführlich in der Platform SDK dokumentiert: MSDN: CSIDLs

Savar 2. Nov 2005 16:59

Re: Arbeitsplatz öffnen
 
Cool, danke.


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