![]() |
Tastatureingabe
Und noch eine frage =)
Ich möchte gerne eine einfache tastatureingabe simulieren ohne Strg oder andre sonderfunktionen. Dies sollte am besten durch eingabe des textes als string gehn. Ich weiss dass es einzelne Topics schon gab, aber ich konnte nix richtig nützliches finden. Dankööö :party: MfG :dance: |
Re: Tastatureingabe
Und was ist deine Frage bzw. wo kommst du nicht weiter :gruebel:?
|
Re: Tastatureingabe
diese API-Funktion:
Code:
verwenden. und dann für jeden char im string den knopf drücken und wieder loslassen. weitere infos zu dem Befehl stehen in windows-sdk.
VOID keybd_event(
BYTE bVk, // virtual-key code BYTE bScan, // hardware scan code DWORD dwFlags, // flags specifying various function options DWORD dwExtraInfo // additional data associated with keystroke ); |
Re: Tastatureingabe
Zitat:
Hier eine kompakte Funktion:
Delphi-Quellcode:
procedure SendText(S: string);
Delphi-Quellcode:
procedure PostKeyEx32(key: Word; const shift: TShiftState;
specialkey: Boolean); type TShiftKeyInfo = record shift: Byte; vkey: Byte; end; byteset = set of 0..7; const shiftkeys: array[1..3] of TShiftKeyInfo = ((shift: Ord(ssCtrl); vkey: VK_CONTROL), (shift: Ord(ssShift); vkey: VK_SHIFT), (shift: Ord(ssAlt); vkey: VK_MENU)); var flag: DWORD; bShift: ByteSet absolute shift; i: Integer; begin for i := 1 to 3 do begin if shiftkeys[i].shift in bShift then keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0); end; { For } if specialkey then flag := KEYEVENTF_EXTENDEDKEY else flag := 0; keybd_event(key, MapvirtualKey(key, 0), flag, 0); flag := flag or KEYEVENTF_KEYUP; keybd_event(key, MapvirtualKey(key, 0), flag, 0); for i := 3 downto 1 do begin if shiftkeys[i].shift in bShift then keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), KEYEVENTF_KEYUP, 0); end; { For } end; { PostKeyEx32 } procedure SendText(S: string); procedure SendRawCharacter(ch: Char); var i: Integer; numStr: string; begin numStr := Format('%4.4d', [Ord(ch)]); keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); for i := 1 to Length(numStr) do PostKeyEx32(VK_NUMPAD0 + Ord(numstr[i]) - Ord('0'), [], false); keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0); end; var flags: TShiftState; vcode: word; ret: word; i, n: Integer; mask: word; begin { SendText } for i := 1 to Length(S) do begin ret := VkKeyScan(S[i]); if ret = $FFFF then SendRawCharacter(S[i]) else begin vcode := Lobyte(ret); flags := []; mask := $100; for n := 1 to 3 do begin if (ret and mask) <> 0 then begin case mask of $100: Include(flags, ssShift); $200: Include(flags, ssCtrl); $400: Include(flags, ssAlt); end; { Case } end; { If } mask := mask shl 1; end; { For } PostKeyEx32(vcode, flags, false); end; { Else } end; { For } end; { SendText } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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