AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShellFolder anlegen?

Ein Thema von ThoPos · begonnen am 30. Jun 2004 · letzter Beitrag vom 9. Jul 2004
Antwort Antwort
Seite 4 von 4   « Erste     234   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#31

Re: ShellFolder anlegen?

  Alt 2. Jul 2004, 01:31
Moin Zusammen,

werdet bitte wieder On Topic, oder macht einen neuen Thread dafür auf.
Danke.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#32

Re: ShellFolder anlegen?

  Alt 2. Jul 2004, 07:51
Zitat von Blutiger Anfänger:
@Mathias: Der Fehler ist, daß Hardlinks nur auf Dateien gehen! Ist k:\Programme eine Datei?
Aha. Gut, ich hätte besser lesen sollen.


@Christian: Danke, wenn die zwei mal anfangen, dann finden die kein Ende ...
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#33

Re: ShellFolder anlegen?

  Alt 2. Jul 2004, 08:27
So, nach ein bisschen Ge-Google bin ich u.a. auf dieser russischen Seite gelandet, die ein komplettes VB-Skript enthielt. Was VBS kann, kann ich mit Delphi schon lange, dachte ich mir, und voilà:
Delphi-Quellcode:
uses
  ActiveX, ShlObj;

function CreateFolderShortCut(const DestinationPath, Folder: string):
  boolean;

  function CreateReadOnlyDir(const Path: string): boolean;
  begin
    // schreibgeschützten Ordner erzeugen, ...
    Result := (CreateDirectory(pchar(Path),nil)) and
      (SetFileAttributes(pchar(Path),FILE_ATTRIBUTE_READONLY)) and
    // ... & versteckte "desktop.ini" erzeugen
      (WritePrivateProfileString('.ShellClassInfo','CLSID2',
         '{0AFACED1-E828-11D1-9187-B532F1E9575D}',
         pchar(Path + '\desktop.ini'))) and
      (WritePrivateProfileString('.ShellClassInfo','Flags','2',
         pchar(Path + '\desktop.ini'))) and
      (SetFileAttributes(pchar(Path + '\desktop.ini'),
         FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM));
  end;

  function CreateComObject(const ClassID: TGUID;
    var OleResult : HRESULT): IUnknown;
  begin
    OleResult := CoCreateInstance(ClassID,nil,CLSCTX_INPROC_SERVER or
      CLSCTX_LOCAL_SERVER,IUnknown,Result);
  end;

var
  hr : HRESULT;
  link : IShellLink;
  pFile : IPersistFile;
  pwcData : array[0..MAX_PATH]of widechar;
begin
  Result := false;
  link := nil;
  pFile := nil;

  if(CoInitialize(nil) = S_OK) then
  try
    // Shortcut erzeugen
    link := CreateComObject(CLSID_ShellLink,hr) as IShellLink;
    if(hr = S_OK) and (link <> nil) then
    begin
      // Name für die Verknüpfung setzen
      ZeroMemory(@pwcData,sizeof(pwcData));
      if(StringToWideChar(DestinationPath + '\target.lnk',pwcData,
        sizeof(pwcData)) <> nil) then
      begin
        // Ordner erzeugen, ...
        if(CreateReadOnlyDir(DestinationPath)) then
        begin
          // Verknüpfungsziel setzen, ...
          link.SetPath(pchar(Folder));

          // ... & Verknüpfung erstellen
          pFile := link as IPersistFile;
          Result := (pFile.Save(pwcData,true) = S_OK);
        end;
      end;
    end;
  finally
    if(pFile <> nil) then pFile := nil;
    if(link <> nil) then link := nil;

    CoUninitialize;
  end;
end;
Beispielaufruf:
Delphi-Quellcode:
CreateFolderShortCut(
  'g:\test', // <-- der anzulegende Ordner auf G:\ (= FAT-Partition)
  'c:\LastCrap'); // <-- das Ziel auf C:\ (= FAT-Partition)
Muss noch was verbessert werden?

btw: Vielleicht könnte mal jemand, der des Russischen mächtig ist, den Satz übersetzen, in dem XP, 2000 und ME genannt werden. Meine Vermutung ist (ich hatte Russisch mal in der Schule, spreche aber inzwischen kein Wort mehr ... ... Na ja, außer "Ich heiße ...", "Ich wohne ...", "Gehen wir zu dir oder zu mir?"), dass dort gesagt wird: Unter XP und 2000 funktioniert´s, unter ME (und damit generell unter 9x) nicht ...


Nico-Modus: Editiert, während andere (hoffentlich) den Beitrag gerade lesen
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#34

Re: ShellFolder anlegen?

  Alt 2. Jul 2004, 10:26
@Christian: Solche Dinge machen dieses Forum so ungemütlich

@Mathias: Der Satz bedeutet: "Getestet wurde es unter Windows XP Home und 2000, es sollte aber auch unter Windows Millenium Edition (und möglicherweise anderen Versionen) arbeiten."
(Sorry, russischer Satzbau ist ein wenig anders, deshalb ist das "arbeiten" bei uns hinter die Klammer gerutscht

Grobe Übersetzung: "Smart" links to folders - "Schlaue" Links auf Verzeichnisse

Zitat von Kostja Tarasov:
Wie erstellt man einen Link auf ein Verzeichnis, der sich danach wie das Verzeichnis, auf welches er zeigt, verhält:

1. Erstellen Sie ein Verzeichnis mit beliebigem Namen, [2. Satzteil verteh ich nicht adhoc ohne WB]
2. Öffnen Sie Ihren Lieblingseditor und geben Sie folgendes ein:

[.ShellClassInfo]
CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}
Flags=2

und speichern sie den Text unter dem Namen desktop.ini im erstellten Verzeichnis.

3. Erstellen Sie in diesem Verzeichnis einen Link target.lnk, er sollte auf das Verzeichnis zeigen, auf welches das erstellte Verzeichnis verlinken soll.
4. Setzen Sie auf die Datei desktop.ini die Attribute Versteckt und System (bei den Dateieigenschaften), und beim Link-Verzeichnis - Nur Lesen. Am einfachsten geht das mit FAR (Textmode-Dateimanager; Anm. d. Üb.) (mit Ctrl+A).

Getestet wurde es unter Windows XP Home und 2000, es sollte aber auch unter Windows Millenium Edition (und möglicherweise anderen Versionen) arbeiten.

Zur Vereinfachung der Erstellung solcher Links hier ein kleines Skript, welches den gesamten Prozess automatisiert:

[VBS-Skript hier]

Das Skript wurde in VBScript geschrieben (Dateiendung sollte .vbs sein). Aufrufen sollte man es mit folgenden Parametern: 1. Parameter - Pfad zum Link-Verzeichnis, 2. Parameter - Pfad zum Verzeichnis auf welches der Link zeigen soll.
[Letzter Satz nicht ohne WB deshalb Auslassung ]
@Mathias: Danke für die Anregung. Werde mich wohl mal mehr auf russischen und polnischen Techie-Seiten rumtreiben um die Sprachen auf in Hinsicht auf Fachtermini besser zu beherrschen.
  Mit Zitat antworten Zitat
ThoPos

Registriert seit: 30. Jun 2004
Ort: Köln
69 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#35

Re: ShellFolder anlegen?

  Alt 2. Jul 2004, 11:13
Funktioniert prima, Danke!!
Thomas
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#36

Re: ShellFolder anlegen?

  Alt 2. Jul 2004, 12:41
Zitat von Blutiger Anfänger:
@Mathias: Der Satz bedeutet: "Getestet wurde es unter Windows XP Home und 2000, es sollte aber auch unter Windows Millenium Edition (und möglicherweise anderen Versionen) arbeiten."
(Sorry, russischer Satzbau ist ein wenig anders, deshalb ist das "arbeiten" bei uns hinter die Klammer gerutscht
Also gut, funktionieren wird es wohl auch unter Win 95, denn der o.g. Code enthält ja IMHO nichts, dass es erst ab 2000 oder XP gibt. Nur schätze ich mal, dass 95, 98 und NT4 nichts mit dieser Verknüpfung anfangen können, weil sie diese Class-ID ganz einfach nicht kennen.

Eben ausprobiert unter 98: Ich habe recht.


@ThoPos: Gern geschehen.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#37

Re: ShellFolder anlegen?

  Alt 9. Jul 2004, 11:20
Es ist zwar ein alter Beitrag, aber da ich´s gerade im DF als FAQ-Eintrag vorgeschlagen habe, hier auch das gleiche -

@CodeLib-Manager: Wäre der Beitrag vom 2 (s. oben bzw. hier) nicht auch was für die Code-Lib? Textvorschlag aus dem DF.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 07:12 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