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/)
-   -   Delphi Strg + V Einfügen ein paar fragen (https://www.delphipraxis.net/126447-strg-v-einfuegen-ein-paar-fragen.html)

gandime 24. Dez 2008 22:34


Strg + V Einfügen ein paar fragen
 
Hi,
Ich möchte ein Programm schreiben, welches bei dem Hotkey Strg + V, die zu kopierenden Daten in in einer Liste Speichert und alle nach und nach in einer Liste aufnimmt.
Diese Liste wird gleichzeitig via Thread abgearbeitet.
Momentan habe ich selbst den Hotkey gelegt.
Nun meine Fragen:
1. Kann ich auch erkennen wenn iwo Rechtemaustaste gedrückt wird und auf "Einfügen" gedrückt wird?

2. Wie erkenne ich den Ort, wo die kopierten Dateien aus dem Clipboard eingefügt werden?

3. Gibts es eine Möglichkeit, sofern das einzufügene keine Datei ist, das "Windows-Einfügen" zu simulieren?

mfg
gandime


Frohe Weihnachten!

TonyR 24. Dez 2008 23:55

Re: Strg + V Einfügen ein paar fragen
 
WIllst du, dass man in der Liste dann auswählen kann, was man einfügen will oder willst du alles einfügen, was in der Liste ist?

Bei ersterem bräuchtest du ja nur den Listeneintrag wieder in die Zwischenablage tun ...

gandime 25. Dez 2008 00:35

Re: Strg + V Einfügen ein paar fragen
 
Hier ein bisschen Code Anregung von hier:
Delphi-Quellcode:
type
  ...
  private
    procedure ClipBrdPast(var Message: TMessage); message WM_DRAWCLIPBOARD;
    ...
  end;

procedure TFCPMain.ClipBrdPast(var Message: TMessage);
var
  F:THandle;
  Buffer:Array [0..MAX_PATH] of Char;
  i:Integer;
  NumFiles:Integer;
begin
  if (not (Clipboard.HasFormat(CF_HDROP))) then
    Exit;
  try
    f := Clipboard.GetAsHandle(CF_HDROP);
    if f <> 0 then
    begin
      numFiles := DragQueryFile(f,$FFFFFFFF,nil,0);
      for i := 0 to numfiles - 1 do
      begin
        buffer[0] := #0;
        DragQueryFile(f, i, buffer, SizeOf(buffer));
        SlFile.Add(buffer);
      end;
    end;
  finally
    CloseClipBoard;
  end;
end;
So lasse ich dann den Inhalt auflisten aber das VW_DRAWCLIPBOARD passt nicht da es ausgelöst wird sobald etwas in die Zwischenablage kopiert wird, aber ich möchte es auslösen sobald etwas aus der Zwischenablage eingefügt wird.
Bis jetzt habe ich im MSDN nichts, bei Google auch nichts und hier ebenfalls nichts hilfreiches gefunden!

zu meiner zweiten Frage:
Zitat:

2. Wie erkenne ich den Ort, wo die kopierten Dateien aus dem Clipboard eingefügt werden?
ist meine momentane Idee das Aktive Fenster auslesen und schauen ob es ein Windows-Explorer Fenster ist.
Blos wie erkenne ich ob es ein Windows-Explorer Fenster ist?
Und ob dort ein Ordner Markiert ist?

Zitat:

Zitat von TonyR
WIllst du, dass man in der Liste dann auswählen kann, was man einfügen will oder willst du alles einfügen, was in der Liste ist?

Alles was normal von Windows an Dateien Eingefügt wird soll mein Programm übernehmen

Zitat:

Zitat von TonyR
Bei ersterem bräuchtest du ja nur den Listeneintrag wieder in die Zwischenablage tun ...

ömmm meinst du nicht meine Dritte Frage?
Weil im Zusammenhang mit der Ersten Frage verstehe ich es sonst nicht!

Michael Habbe 25. Dez 2008 01:04

Re: Strg + V Einfügen ein paar fragen
 
Hi,
da fallen mir spontan die Gexperts ein: http://www.gexperts.org/
Dort gibts eine Clipboard-History, die auch ausserhalb von Delphi die Zwischenablage überwacht. Geh doch dort mal schauen.

gandime 25. Dez 2008 01:42

Re: Strg + V Einfügen ein paar fragen
 
hi,
das sind leider nur historys, die die WM_DRAWCLIPBOARD message benutzen, was mir leider nicht hilft...
Ich habe auch schon nach Clipboard hooks gesucht aber nichts gefunden was die WM_PAST global abfängt geschweige denn registriert, zumindest habe ich noch nichts in der Richtung gefunden!

gandime 26. Dez 2008 02:24

Re: Strg + V Einfügen ein paar fragen
 
hab da mal wegen dem Simulieren des Past-Befehles ungeschaut habe was gefunden in VB:
Delphi-Quellcode:
' Paste the contents of the Clipboard into a control
Sub ControlPaste(ByVal hWnd As Long)
    SendMessage hWnd, WM_PASTE, 0, ByVal 0&
End Sub
Quelle

die übersetzung wäre dann wohl so:
Delphi-Quellcode:
var
  H:HWND;
begin
  H:=GetActiveWindow;
  SendMessage(H,WM_PASTE,0,0);
blos was bedeutet das: "ByVal 0&"?

Sir Rufo 26. Dez 2008 08:49

Re: Strg + V Einfügen ein paar fragen
 
Damit ist NULL gemeint (siehe hier), obwohl es wohl eher im Delphi NIL entspricht.

cu

Oliver


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