Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tastatureingabe (https://www.delphipraxis.net/33839-tastatureingabe.html)

ppirokke 13. Nov 2004 14:22


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:

fiasko 13. Nov 2004 15:15

Re: Tastatureingabe
 
Und was ist deine Frage bzw. wo kommst du nicht weiter :gruebel:?

nailor 13. Nov 2004 15:23

Re: Tastatureingabe
 
diese API-Funktion:

Code:
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
   );
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.

toms 13. Nov 2004 16:15

Re: Tastatureingabe
 
Zitat:

Dies sollte am besten durch eingabe des textes als string gehn
Hi,

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