Re: Simulation Strg+C geht nicht mehr unter Vista
Zitat:
Wenn man nach SendInput Delphi sucht, findet man eine Procedur SendAltTab. Diese Procedur zeigt, wie man SendInput() verwenden kann. Ich habe die Procedur ein wenig angepasst und daraus eine SendCtrlC Procedur gemacht.
Delphi-Quellcode:
procedure SendCtrlC();
var KeyInputs: array of TInput; {$J+}const KeyInputCount: Integer = 0;{$J-} procedure KeybdInput(VKey: Byte; Flags: DWORD); begin Inc(KeyInputCount); SetLength(KeyInputs, KeyInputCount); KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD; with KeyInputs[KeyInputCount - 1].ki do begin wVk := VKey; wScan := MapVirtualKey(wVk, 0); dwFlags := KEYEVENTF_EXTENDEDKEY; dwFlags := Flags or dwFlags; time := 0; dwExtraInfo := 0; end; end; begin KeybdInput(VK_CONTROL, 0); KeybdInput(Ord('C'), 0); KeybdInput(Ord('C'), KEYEVENTF_KEYUP); KeybdInput(VK_CONTROL, KEYEVENTF_KEYUP); SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0])); end; |
Re: Simulation Strg+C geht nicht mehr unter Vista
Hallo toms,
vielen Dank für deine Antwort und erstmal sorry, dass es so lang gedauert hat, bis ich antworten konnte. Also der Code funktioniert perfekt danke. Habe aber durch einen Zufall herausgefunden, dass der alte Code dennoch funktioniert, es für mich aber den Anschein hatte, dass er es nicht täte. Wenn das Programm gestartet wird wird der Focus von dem makierten Text dann weggenommen. Und das STRG+C sozusagen ins Leere geht. (Zur Info, wenn das Programm gestartet wird, soll es eine Nummer die zuvor in einem anderen Programm makiert wurde, per STRG+C in die Zwischenablage holen). Gibt es eine Möglichkeit vll. das zu verhindern? |
Re: Simulation Strg+C geht nicht mehr unter Vista
Zitat:
|
Re: Simulation Strg+C geht nicht mehr unter Vista
Handle ermitteln, und weiter mit Postmessage arbeiten...
Da braucht das Fenster keinen Focus und muss auch nicht im Vordergrund sein... so dann ...
Delphi-Quellcode:
procedure sim_CtrlC;
begin keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); PostMessage(TargetHandle, WM_KEYDOWN, ord('C'), MapVirtualKey(ord('C'),0)); PostMessage(TargetHandle, WM_KEYUP, ord('C'), MapVirtualKey(ord('C'),0)); keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 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