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
 
MathiasSimmack
(Gast)

n/a Beiträge
 
#33

Re: ShellFolder anlegen?

  Alt 2. Jul 2004, 07: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
 


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 11:57 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