Hallo,
ich habe ein Verständnisproblem beim verwenden der Zwischenablage ...
Ich experimentiere schon seit Tagen erfolglos herum und hoffe, das jemand von euch einen Tip für mich hat ...
Ich habe eine kleine Anwendung, die nach dem drücken eines globalen Hotkeys ein CTRL+C an die aktive Anwendung sendet um den dort selektierten Text in die Zwischenablage zu kopieren.
In meiner Anwendung verarbeite ich die Zwischenablage und möchte diese anschliessend leeren, um zu verhindern, das der User beim Drücken des Hotkeys (ohne vorheriges markieren des Textes) die alte Zwischenablage noch einmal verwendet.
Hier ein kleines Codebeispiel ...
Code:
public
function VerarbeiteClipboardText(ClipboardText:String):Boolean;
procedure TMain."onHotkeyPress";
begin
// selektierten Text aus aktivem Fenster in die Zwischenablage kopieren
// beim 2. Drücken des Hotkeys wird der selektierte Text nicht mehr in die ZA kopiert :-(
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Sleep(10);
if Clipboard.HasFormat(CF_TEXT) then
begin
// die nächste Codezeile funktioniert nur beim ersten Drücken des Hotkeys.
// bbeim 2. Drücken des Hotkeys wird die
Exception "kann Zwischenablage nicht öffnen" ausgelöst
if VerarbeiteClipboardText( Clipboard.AsText )=true then
showmessage('Clipoard verarbeitet') else
showmessage('Fehler');
end;
end;
function TMain.VerarbeiteClipboardText(ClipboardText:String):Boolean;
begin
// Hier mache ist was mit ClipboardText
//.............
//.............
// Zwischenablage leeren
try
clipboard.clear;
result:=true;
except
result:=false;
end;
end;
{
Variante 2 - funtioniert auch nicht
function TMain.VerarbeiteClipboardText(ClipboardText:String):Boolean;
begin
// Hier mache ist was mit ClipboardText
//.............
//.............
// Zwischenablage leeren
try
try
clipboard.open
clipboard.clear;
finally
clipboard.close;
end;
result:=true;
except
result:=false;
end;
end;
}
Der Hotkey kopiert nur einmal den selektierten Text in die Zwischenablage und Clipboard.asText löst beim 2. drücken des Hotkeys die
Exception "Kann Zwischenalage nicht öffnen" aus.
Wenn ich die Zwischenablage nicht leere funktioniert alles super.
Ich babe auch schon versucht mit
SetClipboardText die Zwischenablage mit SetClipboardText(Pchar('<bereits übernommen>')) zu überschreiben.
Der Fehler bleibt der Selbe ...
Sobald ich die Zwischenablage in meinem Programm schreibe oder leere kommt beim 2. Drücken des Hotkeys "Kann Zwischenalage nicht öffnen".
Hat jemand eine Idee ?
Danke .....
Jens