![]() |
Tastendruck simulieren, Problem mit registerhotkey+sendinput
Hallo
ich habe ein kleines Problem: ich möchte per Tastenkombination alt oder control + F-Taste jeweils bestimmte Zeichenfolgen an ein anderes Programm senden. zum herausfinden des Drücken der F-Tasten habe ich Registerhotkey und zum Senden der Zeichenfolgen ![]() Hat jemand eine Idee, wie ich das lösen kann? Danke Frank |
Re: Tastendruck simulieren, Problem mit registerhotkey+sendi
Das Problem hatte ich auch mal ...
So funktioniert es bei mir: Im Eventhandler des Hotkeys folgenden Code einfügen
Code:
// Hotkey wurde gedrückt und erkannt,
// Jetzt warten bis alle Tasten losgelassen werden, die den Shiftstate beeinflussen ... 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; // Jetzt eigene Tastenkombination an das aktive Control senden ... // in meinem Beispiel STRG+C zum Kopieren des markierten Textes in die Zwischenablage ... 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); sleep(20); Schöne Grüße, Jens :hi: |
Re: Tastendruck simulieren, Problem mit registerhotkey+sendi
Danke, auch ne Variante. aber trotzdem etwas unnatürlich, da die Control-taste erstlosgelassen werden muß. Wenn du strg+C und Strg+V verwendest, mußt du die strg-taste ja auch nicht loslassen ;)
noch ne andere Idee? Mfg Frank |
Re: Tastendruck simulieren, Problem mit registerhotkey+sendi
Das Problem ist nicht die Ctrl Taste :gruebel: .
Wenn dein Hotkey z.B. Alt+F12 ist und im Eventhandler des Hotkeys z.B ein Ctrl+C gesendet werden soll, dann musst das Program vor dem Senden des CTRL+C warten das die ALT Taste losgelassen wurde ... Sonst sendest du ungewollt CTRL+ALT+F12 und nix passiert ... Da der User bei mir seinen "globalen Hotkey" selbst wählen darf, lasse ich mein Prog warten bis ALT, ALTGR, linke+rechte CTRL sowie linke+rechte Shifttaste losgelassen wurden ... Seitdem gibts keine Probleme mehr beim Senden von CTRL+C :mrgreen: |
Re: Tastendruck simulieren, Problem mit registerhotkey+sendi
Hallo, ich experimentiere auch mit diesen Events herum. Allerdings hab ich das Problem, dass mir die rechte Shift-Taste nicht losgelassen wird, nachdem ich folgenden Code ausführe:
Delphi-Quellcode:
Also Sinn ist es eine Zeile zu markieren. Sie wird zwar markiert aber die Shift-Taste wird immer noch "festgehalten". Und die linke Shift-Taste funktioniert irgendwie nicht mit diesen 4 Zeilen Code.
keybd_event(VK_RSHIFT, 0, 0, 0);
keybd_event(VK_DOWN, 0, 0, 0); keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RSHIFT, 0, KEYEVENTF_KEYUP, 0); // <- sollte eigentlich losgelassen werden Weiß jemand, wo der Fehler liegt ? Nachtrag:
Delphi-Quellcode:
keybd_event(VK_RSHIFT, 0, 0, 0); // Funktioniert wie erwartet. Shift-Taste wird gedrückt gehalten.
Delphi-Quellcode:
Warum funktioniert das Loslassen nicht, wenn dazwischen andere Tasten gedrückt wurden ?
keybd_event(VK_RSHIFT, 0, 0, 0);
keybd_event(VK_RSHIFT, 0, KEYEVENTF_KEYUP, 0); // Funktioniert ebenfalls wie (theoretisch) erwartet. Shift-Taste ist losgelassen. |
Re: Tastendruck simulieren, Problem mit registerhotkey+sendi
Also bei mir funktioniert es so ...
Delphi-Quellcode:
Vorher solltest du warten, bis alle Tasten des Hotkeys losgelassen wurden. S.o.// Cursor links in der Zeile positionieren (CTRL + LEFT) keybd_event(VK_LCONTROL, 0, 0, 0); keybd_event(VK_LEFT, 0, 0, 0); // Shortcurt [CTRL + LEFT] aufheben keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); // Text ab Cursorposition bis zum Ende der markieren (LSHIFT + END) keybd_event(VK_LSHIFT, 0, 0, 0); keybd_event(VK_END, 0, 0, 0); // Shortcurt [LSHIFT + END] aufheben keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0); MFG Jens |
Re: Tastendruck simulieren, Problem mit registerhotkey+sendi
Zitat:
Ich hab mir gerade SendInput() angeschaut und die Funktion funktioniert, wie sie soll. Ist etwas umständlicher dafür aber (so weit) fehlerfrei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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