Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ordner auf Änderung überwachen/Auswerfen im Apple-Stil (https://www.delphipraxis.net/130890-ordner-auf-aenderung-ueberwachen-auswerfen-im-apple-stil.html)

derdaniel 15. Mär 2009 00:13


Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Moin DP,

ich hoffe ich bin in dieser Kategorie richtig.

Ich möchte gern ein Auswerfen von Datenträgern im Apple-Stil realisieren.
Desktopverknüpfung beim einlegen/einstecken anlegen ist soweit kein Problem,
jedoch suche ich eine Funktion um auf das löschen bzw. verschieben in den
Papierkorb der Verknüpfung zu reagiern.
Habe mir dazu diverse Sachen hier im Forum angesehen und mehrer Komponenten
ausprobiert, jedoch reagieren diese nicht auf Verknüpfungen,sondern nur
auf "normale" Dateien/Ordner.

Hoffe jemand von euch hat ne Iddee dazu,

danke schonmal


-derdaniel.

Mr_G 15. Mär 2009 00:44

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Schau dir mal MSDN-Library durchsuchenFindFirstChangeNotification bzw. MSDN-Library durchsuchenFindNextChangeNotification an. Ich meine mich erinnern zu können, dass eine Überwachung, die ich damit mal gemacht habe auch auf Verknüpfungen reagiert hat.

derdaniel 15. Mär 2009 01:30

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Danke erstmal,
hatte bereits mehrere Komponenten die diese Funktionen nutzen getestet, leider ohne Erfolg.
Das kuriose ist, das wenn ich die Verknüpfung "von Hand" erstelle (Rechtsklick usw..)
oder lösche(über Explorer) dann funktionierts, verwende ich jedoch "CreateDesktopLink" (Luckie)
oder "DeleteFile",dann funzt's net...

Ne Iddee?

blink182 15. Mär 2009 01:49

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
das Erstellen funktioniert http://xwatch.de/download/index.html mit den Shortcuts hier ganz gut ;)
z.b.
Delphi-Quellcode:
Createshortcut(SpecialDirectory(CSIDL_Desktop)+'Jompf.lnk',
                 path.text+'\Jompf.exe','/info',
                 path.text+'\', SW_SHOWNORMAL,
                 path.text+'\Jompf.exe', 0);
aber mit dem Löschen hatte ich damals auch meine Schwierigkeiten meine ich ;) aber so sollte es gehen, habs eben mal getestet ;) GL

Delphi-Quellcode:
DeleteFile(specialDirectory(CSIDL_Desktop)+'Jompf.lnk');

derdaniel 15. Mär 2009 02:13

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Ähhhhmm, ich hab kein Problem beim Erstellen oder Löschen der Verknüpfugen,
sondern diesen Vorgang benachrichtigt zu bekommen,
eben mit "FindFirstChangeNotification" o.ä.

...

toms 15. Mär 2009 15:10

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Zitat:

Zitat von derdaniel
oder "DeleteFile",dann funzt's net...


Hallo, ich bin nicht sicher, ob ich dein Problem genau verstanden habe.

Testweise habe ich die JvChangeNotify von der JCVL genommen, eine Notification für Desktop gesetzt und
eine lnk Datei auf dem Desktop erstellt.

Lösche ich nun die lnk Datei per DeleteFile, wird das ChangeNotify Ereignis ausgelöst.

derdaniel 15. Mär 2009 20:16

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Habs nochmal mit JvChangeNotify probiert, funktioniert leider nicht.
Erstelle ich manuell eine Verknüpfung und lösche Sie mit DeleteFile
kommt eine Benachrichitigung.
Erstelle ich die Verknüpfung mit meinem Programm und lösche sie mit
DeleteFile oder dem Explorer funktionierts nicht...

Die Eigenschaft CheckIntervall von TJvChangeNotify hat mich jedoch
auf eine Idee gebracht, da ich die Verknüpfungen selbst erstelle und
lösche, hab ich ja eh die Dateinamen, also Timer rein und per
FileExists gucken ob Sie da ist...

Is zwar blöd wenn se jemand verschiebt, aber gut man(n) kann eben
nicht alles haben...

thx@toms

quendolineDD 15. Mär 2009 21:48

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Und wenn du das so machst:
Delphi-Quellcode:
unit uNotifyChanges;

interface

uses Windows, SysUtils, Dialogs;

const
  KERNEL32 = 'kernel32.dll';

  FILE_NOTIFY_CHANGE_FILE_NAME = $1;    //1
  FILE_NOTIFY_CHANGE_DIR_NAME  = $2;    //2
  FILE_NOTIFY_CHANGE_ATTRIBUTES = $4;    //4
  FILE_NOTIFY_CHANGE_SIZE      = $8;    //8
  FILE_NOTIFY_CHANGE_LAST_WRITE = $10;   //16
  FILE_NOTIFY_CHANGE_SECURITY  = $100;  //256
  FILE_NOTIFY_CHANGE_ALL       = $7F;   //127


  function RegisterDirectoryWatch (const lpDir : PChar; bWatchSub : Boolean = False; dwFlags : DWORD = 1) : String;

implementation

function RegisterDirectoryWatch (const lpDir : PChar; bWatchSub : Boolean = False; dwFlags : DWORD = 1) : String;
var
  hHnd   : THandle;
  dwWait : DWORD;
begin
  if lpDir <> '' then
  begin
    hHnd := FindFirstChangeNotification (lpDir,
                                         bWatchSub,
                                         dwFlags);

    if hHnd = INVALID_HANDLE_VALUE then
    begin
      Result := '';
    end
    else
    begin
      while TRUE do
      begin
        dwWait := WaitForSingleObject(hHnd, INFINITE);
        case dwWait of
          WAIT_OBJECT_0:
            begin
              Result := lpDir;
              Exit;
            end;
        end;
      end;
    end;
    FindCloseChangeNotification(hHnd);
  end;
end;

end.
Klappt bei mir wunderbar ^^

derdaniel 15. Mär 2009 22:40

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Ich kapier's einfach net, die ganzen Überwachungs-Funktionen laufen super solange
ich die Verknüpfungen von Hand erstelle, nutze ich Luckie's CreateDesktopLink,
gehen die ganzen Funktionen auf einmal nichmehr, nichmal wenn ich eine damit
erstellte Datei von Hand lösche...

Danke trozdem an alle für die Mühen, werde wohl bei dem Timer bleiben,
erscheint mir die einfachste Lösung...

Tom 16. Mär 2009 06:11

Re: Ordner auf Änderung überwachen/Auswerfen im Apple-Stil
 
Zitat:

Zitat von derdaniel
Ich kapier's einfach net, die ganzen Überwachungs-Funktionen laufen super solange
ich die Verknüpfungen von Hand erstelle, ...

Versuche es mal mit TDirMonitor, bei www.torry.net nach DirMonitor suchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.
Seite 1 von 2  1 2      

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