![]() |
Control + Copy-Simulation funktioniert nicht!!
Moin zusammen,
ich habe ein kleines Problemchen. Ich möchte gerne mit einem globalen HotKey den selektierten Text einer anderen Anwendung (auch Firefox, IE) in die Zwischenablage kopieren und direkt in ein Editfeld meiner Anwendung einfügen. Alles nur durch Drücken des HotKeys. Ich muss dazu sagen, dass ich schon sämtliche Foren durchforst habe 2 Wochen lang - auch hier - und bin auch fündig geworden, leider funktioniert immer noch nichts davon. Hier mal ein paar Teile des Codes... HotKey festlegen und registrieren:
Delphi-Quellcode:
HotKey-Event:
procedure TFrmMain.FormCreate(Sender: TObject);
const MOD_ALT = 1; VK_R = $52; begin FHotKey := GlobalAddAtom('Hotkey1'); RegisterHotKey(Handle, FHotKey, MOD_ALT, VK_R); // ... end;
Delphi-Quellcode:
Wenn das Formular aktiviert ist:
procedure TFrmMain.WMHotKey(var Msg: TWMHotKey);
begin // Hier muss geprüft werden, ob der HK bereits betätigt wurde if Msg.HotKey = FHotKey then begin FFirstStart := False; FHKUsed := True; // Zwischenablage öffnen Clipboard.Open; // Control + Copy simulieren 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 ShowMessage(Clipboard.AsText); // Zeigt nur einen leeren Text an // ... end; end;
Delphi-Quellcode:
HotKey wieder löschen:
procedure TFrmMain.ApplicationEventsActivate(Sender: TObject);
begin // Prüfen, ob es der erste Start des Programms ist if FHKUsed then begin if not FFirstStart then begin // Text aus der Zwischenablage überprüfen und als Nummer verwenden if Clipboard.HasFormat(CF_TEXT) then begin // Rufnummer füllen und "säubern" FRufnummer := CleanString(Clipboard.AsText); EditNumber.Text := FRufnummer; // Bleibt ebenfalls leer!!! end; // Zwischenablage leeren, falls etwas drinne steht ... if Clipboard.AsText <> '' then Clipboard.Clear; // ... und schließen Clipboard.Close; end; end; end;
Delphi-Quellcode:
Wer von Euch weiß Rat? :gruebel:
procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin UnregisterHotKey(Handle, FHotKey); GlobalDeleteAtom(FHotKey); end; OS: WinXP Delphi: Version 5, Enterprise |
Re: Control + Copy-Simulation funktioniert nicht!!
Zitat:
|
Re: Control + Copy-Simulation funktioniert nicht!!
Zitat:
|
Re: Control + Copy-Simulation funktioniert nicht!!
Hallo,
Der Code für CTRL+C ist unvollständig. Du "vergisst" die "C" Taste wieder loszulassen :zwinker: versuche es mal so ...
Delphi-Quellcode:
Schöne Grüße,
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0); keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); Jens |
Re: Control + Copy-Simulation funktioniert nicht!!
Funktioniert auch nicht!!!
Das Problem ist, dass beispielsweise Firefox keinen Fokus bekommt, wenn ich einen selektierten Text kopieren will. Wenn ich hingegen etwas aus der Adressleiste kopiere, funktioniert es. Nur bei Webseiten nicht! Wie kann das sein? Firefox HAT den Fokus meines Erachtens, sonst würde ich ja nichts aus der Adressleiste kopieren können, oder??? Wo ist das Problem? |
Re: Control + Copy-Simulation funktioniert nicht!!
Hier ein Stückchen Code auf einem meiner Projekte.
Es gibt definitiv keine Probleme mit Browsern. Lediglich bei Terminalservern und anderen "Remote-Desktop Anwendungen" funktioniert es auf diesem Wege nicht.
Delphi-Quellcode:
procedure TMain.WMHotKey(var Msg: TWMHotKey);
begin // Warten, bis der Hotkey durch den User losgelassen wurde ... while not ((GetASYNCKeyState(VK_LSHIFT) = 0) and (GetASYNCKeyState(VK_RSHIFT) = 0) and (GetASYNCKeyState(VK_LSHIFT) = 0) and (GetASYNCKeyState(VK_RCONTROL) = 0) and (GetASYNCKeyState(VK_RCONTROL) = 0) and (GetASYNCKeyState(VK_LMENU) = 0) and (GetASYNCKeyState(VK_RMENU) = 0)) do begin Application.ProcessMessages; end; // CTRL+C senden keybd_event(VK_CONTROL, 0, 0, 0); keybd_event(Ord('C'), 0, 0, 0); keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // kurz warten, damit das Schreiben der Zwischenablage beendet werden kann sleep(200); Application.processmessages; // Clipboard auf Text prüfen und verarbeiten if Clipboard.HasFormat(CF_TEXT) then s := clipboard.AsText; ... ... end; Schöne Grüße, Jens :hi: PS: Verschlüsselte PDF Dokumente verweigern ebenfalls das Kopieren von Objekten (auch Text) in die Zwischenablage. Wenn du was ganz Geniales bauen willst, dann vergiss CTRL+C. Der Babylon Translator beispielsweise, liest das Wort unter dem Mauszeiger über OCR aus. Damit kannst du dann auch Textinformationen nutzen, die als Images vorliegen. Terminalserver u.Ä. sind dann auch kein Problem mehr. |
Re: Control + Copy-Simulation funktioniert nicht!!
Hast Du die Zwischenablage vor Drücken des Strg + C geöffnet mit Clipboard.Open oder nicht?
Weil ich hab im Moment noch Clipboard.Open vor dem keybd_event stehen! :gruebel: Also bei mir funktioniert es weiterhin definitiv nicht! Edit: Ich hab's nun mit und ohne vorheriges Öffnen probiert. Die Zwischenablage ist weiterhin leer! Ich habe nun noch ein Sleep(200) und ein Application.ProcessMessages eingebaut -> ebenfalls erfolglos! |
Re: Control + Copy-Simulation funktioniert nicht!!
Clipboard.Open ist optional.
Die Zwischenablage wird bei Bedarf automatisch geöffnet. Vor dem CTRL+C macht es definitiv keinen Sinn, weil deine Anwendung nichts in die Clipboard schreibt bzw. aus ihr liest. Der o.a. Code läuft unter Delphi 7 absolut sauber. Auch die Anwendung, die diesen Code benutzt läuft inzwischen auf über 150 Kundenrechnern ohne Probleme. Entweder hat Delphi 5 da einen Bug oder dein Problem steckt irgendwo anders. Ich habe keine Idee mehr, wie ich dir weiterhelfen kann. Schöne Grüße, Jens :hi: |
Re: Control + Copy-Simulation funktioniert nicht!!
Ich hab's auch schon unter Delphi 7 probiert - ebenfalls erfolglos.
Das Problem muss woanders liegen - ich denke, es hängt mit dem nichtvorhandenen Fokus des Browserfensters zusammen. Weiß aber nicht, wie ich das Problem noch lösen könnte. |
Re: Control + Copy-Simulation funktioniert nicht!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr. |
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