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/)
-   -   Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat (https://www.delphipraxis.net/213106-herausfinden-ob-explorer-eine-datei-als-cut-oder-copy-ins-clipboard-gepackt-hat.html)

MAXON 25. Mai 2023 11:16

Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Ich möchte mit dem Windows Explorer eine Datei ausschneiden(ctrl + x)
oder kopieren(ctrl + c) und in meine explorerähnliche Anwendung
einfügen, genau so wie es auch der Windows Explorer macht, wenn ich
ein neues Fenster öffne, oder das Verzeichnis wechsel und mit dem
rechten Mausmenü einfüge or ctrl + v betätige.

Wie finde ich heraus, ob die Datei vom Explorer ins Clipboard
verschoben oder kopiert wurde?

himitsu 25. Mai 2023 11:35

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Wie greifst du auf die Dateiliste zu?
https://www.swissdelphicenter.ch/en/showcode.php?id=791

Bei Google suchenCF_HDROP DataObjectAttributes, bzw. https://www.google.com/search?q="cf_...ectattributes"


Tipp: https://freeclipboardviewer.com/de/

MAXON 25. Mai 2023 13:19

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Lese die Zwischenablage wie in dem ersten Link aus und dann
die Windows eigene TSHFileOpStruct für movefile or copyfile

himitsu 25. Mai 2023 19:49

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Schau mal, ob du mit dem Stichwort "DropEffekt" weiter kommst.

https://www.zabkat.com/2xExplorer/sh.../adv_drag.html
https://www.autohotkey.com/boards/viewtopic.php?t=19256
https://learn.microsoft.com/en-us/wi...hell/clipboard


Wie gesagt, siehe ClipboardViewer ... da siehst du ja die Unterschiede, zwischen Strg+C und Strg+X.

tomkupitz 26. Mai 2023 21:04

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Hallo,

du kannst mit

Code:
function ShellDoContextMenuVerb(Folder: IShellFolder; Pidl: PItemIDList; Handle: THandle; Verb: string): Boolean;
var CM: IContextMenu;
    ICI: TCmInvokeCommandInfo;

begin
  result:=False;

  if Assigned(Folder) then
  begin
    if (Folder.GetUIObjectOf(Handle, 1, Pidl, IID_IContextMenu, nil, CM) = NOERROR) then
    begin
      ZeroMemory(@ICI, sizeof(ICI));
      ICI.cbSize:=sizeof(TCmInvokeCommandInfo);

      ICI.hwnd:=Handle;
      ICI.fMask:=CMIC_MASK_ASYNCOK;
      ICI.lpVerb:=PAnsiChar(AnsiString(Verb));
      ICI.nShow:=SW_SHOWNORMAL;

      result:=Succeeded(CM.InvokeCommand(ICI));

      CM:=nil;
    end;
  end;
end;
und dem Verb 'PASTE' das Einfügen (autom. Cut oder Copy) auslösen.

Wenn du wissen willst ob Paste überhaupt möglich ist kannst du

Code:
format:=EnumClipboardFormats(0);

while format<>0 do
begin

...

  GetClipboardFormatName(format, formatname, formatsize);

...
         
  if CompareText(formatstring, 'Shell IDList Array')=0 then
    //Paste OK

...

  format:=EnumClipboardFormats(format);
end;
probieren.

Beste Grüße

MAXON 31. Mai 2023 10:51

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Vielen Dank für die Infos.

@tomkupitz:

Hmm - ist das die Funktion die mich entscheiden lässt - ob ich Cut oder Copy will?

Sie liefert mir nicht die Variable, es befindet sich ein Cut oder Copy im Clipboard,
oder steh ich gerade aufm Schlauch?

tomkupitz 31. Mai 2023 20:06

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Mit dieser Methode ermittelst du nicht ob Cut oder Copy. Aber brauchst du das wirklich?

Mit einem ClipboardViewer schaltest du nur den Paste Button (egal ob Cut oder Copy). Das Einfügen übernimmt gezeigte Funktion. Die Aktualisierung deiner Dateianzeige steuerst du dann mit einer Folder-Change-Funktion.

In meinem Dateimanager FFExpert benötige ich diese Info jedenfalls nicht. Und mir scheint du willst auch etwas Explorerähnliches bauen.

MAXON 11. Jun 2023 14:57

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
Zitat:

Zitat von tomkupitz (Beitrag 1522940)
Und mir scheint du willst auch etwas Explorerähnliches bauen.

Ja, ich möchte aber nicht nur interne Cut-/Kopierroutinen berücksichtigen,
sondern auch jene, die andere Anwendungen ins Clipboard kopieren oder
verschieben.

tomkupitz 11. Jun 2023 20:25

AW: Herausfinden ob Explorer eine Datei als Cut oder Copy ins Clipboard gepackt hat
 
aber das macht obiges ja:

- du lauerst auf Shell IDList Array (d.h. bis eine beliebige App eine shellkonforme CUT/COPY Aktion gestartet hat)
- du machst ShellDoContextMenuVerb

und Ende...


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