Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ShellFolder anlegen? (https://www.delphipraxis.net/25073-shellfolder-anlegen.html)

ThoPos 1. Jul 2004 21:03

Re: ShellFolder anlegen?
 
Bekomme ebenfalls den Fehler an genannter Stellen. Da Du schon Kontakt aufgenommen hast, warte ich mal auf Seine/Deine Antwort.

NicoDE 1. Jul 2004 21:19

Re: ShellFolder anlegen?
 
Delphi-Quellcode:
function NtMyGetProcessHeap: Pointer; assembler;
asm
  mov  EAX, _TEB[FS:0].Peb
  mov  EAX, [EAX]._PEB.ProcessHeap
end;
in
Delphi-Quellcode:
function NtMyGetProcessHeap: Pointer; assembler;
asm
        mov    eax, fs:[0]._TEB.Peb
        mov    eax, [eax]._PEB.ProcessHeap
end;
ändern.

Blutiger Anfänger 1. Jul 2004 21:39

Re: ShellFolder anlegen?
 
Siehe Nicos Post. Übrigens bei mir geht es. Wird geupdated - dauert ein paar Minuten.

Die Hardlink-Unit sollte auch nur benutzt werden, wenn nur NT4 verfügbar ist. Sonst lieber die echte CreateHardLink-API von Windows 2000 und aufwärts benutzen.

PS: Besser so?

MathiasSimmack 1. Jul 2004 21:48

Re: ShellFolder anlegen?
 
Gut, dann brauchst du die CPU-Ausgabe wohl nicht mehr. ;) Ich schreibe gerade und sehe dann in der Vorschau, dass du wieder editiert hast. Na ja, jetzt ist die Zugriffsverletzung zwar weg, aber irgendwie komme ich auf keinen grünen Zweig. Was habe ich bei dem Prinzip jetzt nicht kapiert?

1. Es geht nur auf NTFS, das weiß ich.
2. Als "zu verlinkendes Ziel" kann ich aber auch einen Ordner auf einer FAT-Partition nehmen (?)

Aber selbst mit "nur NTFS"-Ordnern klappt´s nicht. Olli hat in der Datei einen Kommentar zu "CreateSoftLink"
Delphi-Quellcode:
CreateSoftLinkW('C:\1', 'C:\WINNT');
Okay, ich hab´s für meine K-Partition abgeändert und erhalte "E/A-Fehler 105", wenn ich das Programm als Admin starte. Mit Benutzerrechten sehe ich gar keine Fehlermeldung. Angelegt wird im Fall #1 (Admin) übrigens eine Datei "1" mit 0 Bytes.


@Blutiger Anfänger: Die API-Funktion von Win XP funktioniert bei mir übrigens nicht. Ich habe sie selbst importiert, aber irgendwie ist das Ergebnis immer false ... Hm ... :?

NicoDE 1. Jul 2004 21:50

Re: ShellFolder anlegen?
 
Zitat:

Zitat von Blutiger Anfänger
PS: Besser so?

Wenn Du die o.g. Änderung meinst, jo, der Delphi 6 BASM übersetzt [fs:0].x in [x] (Crash) statt fs:[x] (besser :)).

Zitat:

Zitat von MathiasSimmack
Als "zu verlinkendes Ziel" kann ich aber auch einen Ordner auf einer FAT-Partition nehmen (?)

Nope, nur NTFS und das gleiche Laufwerk.

Blutiger Anfänger 1. Jul 2004 21:56

Re: ShellFolder anlegen?
 
CreateSoftLink() ist ein Protoyp und noch nicht komplett implementiert. Wenn ich mal Zeit finde, mache ich das. Ansonsten nicht verwechseln: Hardlinks sind quasi "kreuzverbundene Dateien" wie man sie unter DOS mit FAT fürchtete. Softlinks werden vom Dateisystemtreiber (erst ab NTFS 5!) geparst und sind auch als Junction Points, Reparse Points und Mount Points bekannt.

Hardlinks gehen nur auf NTFS und dürfen auch nur auf NTFS liegen - Ziel und Quelle!

Softlinks dürften theoretisch (nie versucht mangels FAT-Partition) von einer NTFS-Partition auf eine FAT oder eine ander Partition zeigen dürfen (aber wie gesagt, theoretisch!). Versuchs und mail mir als Feedback.

@Nico: Nein ich meinte die geupdatete Version hardlinks.zip|rar und ln.zip|rar
Nicht gleiches Laufwerk, sondern gleiche Partition!

NicoDE 1. Jul 2004 22:03

Re: ShellFolder anlegen?
 
Zitat:

Zitat von Blutiger Anfänger
Nein ich meinte die geupdatete Version hardlinks.zip|rar und ln.zip|rar

Ah, nach dem Leeren des Browser-Caches geht's auch :)

Zitat:

Zitat von Blutiger Anfänger
Nicht gleiches Laufwerk, sondern gleiche Partition!

Wir meinen das gleiche ;)

MathiasSimmack 1. Jul 2004 22:04

Re: ShellFolder anlegen?
 
Dann ist´s (um auf das ursprüngliche Thema dieses Beitrags zurückzukommen) entweder ein Softlink (denn ich kann bspw. eine Verknüpfung eines FAT-Ordners im XP-Startmenü ablegen, die dann auch als Ordner angezeigt und geöffnet wird - so wie´s ThoPos beschrieben hat), oder es ist eine API-Funktion, die ich bis jetzt noch nicht entdeckt habe, und die automatisch den Ordner, die "target.lnk" und die versteckte "desktop.ini" anlegt.

PS: Aber trotzdem würde mich interessieren, wo mein Fehler liegen soll:
Delphi-Quellcode:
function CreateHardLinkA(lpFileName, lpExistingFileName: LPCTSTR;
  lpSecurityAttributes: PSecurityAttributes): bool; stdcall;
  external 'kernel32.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
  if(not CreateHardLinkA('k:\test','k:\Programme',nil)) then
    ShowMessage('Och nö! :o(')
end;
K:\ ist meine NTFS-Partition, und ich habe sogar Admin-Rechte.

Blutiger Anfänger 1. Jul 2004 22:11

Re: ShellFolder anlegen?
 
Softlinks habe ich bisher nicht auf Dateien zustande bekommen, obwohl ich noch immer überzeugt bin, daß es möglich sein muß.

Zum erstellen von Softlinks empfehle ich die Shellextension von Arni:
www.arniworld.de (down?)
www.arniworx.de (down?)

Wer es haben will kann mir mailen, hab die letzte Version.

@Mathias: Der Fehler ist, daß Hardlinks nur auf Dateien gehen! Ist k:\Programme eine Datei?

Christian Seehase 1. Jul 2004 22:13

Re: ShellFolder anlegen?
 
Moin Mathias,

was sagt denn GetLastError dazu?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.
Seite 2 von 4     12 34      

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