AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte SendInputHelper - Ein Wrapper, der den Umgang mit SendInput vereinfacht
Thema durchsuchen
Ansicht
Themen-Optionen

SendInputHelper - Ein Wrapper, der den Umgang mit SendInput vereinfacht

Ein Thema von WladiD · begonnen am 1. Okt 2010 · letzter Beitrag vom 6. Dez 2023
 
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: SendInputHelper - Ein Wrapper, der den Umgang mit SendInput vereinfacht

  Alt 23. Nov 2010, 14:12
Gute Arbeit

Als Dankeschön noch eine kleine Erweiterung.

zum Hintergrund:
Die aktuelle Implementation kann nur Zeichen schicken, die es auch im aktuell eingestellten Keyboard Layout gibt. D.h. auf einem deutschen Keyboard kannst du kein الله أكبر ausgeben.
Das ist uns aufgefallen, als ein TerminalDiensteClient mit englischem Tastaturlayout ein Ö schicken wollte. Mit der Erweiterung ist das kein Problem mehr.
Ein nicht unicodefähiges Control erhält dann die Ansi Entsprechung des Zeichens.

wie man die Klasse erweitern kann:
Delphi-Quellcode:
class function TSendInputHelper.GetUnicode(SendChar: WideChar; Press,
  Release: Boolean): TInputArray;
const
  KEYEVENTF_UNICODE = 4;
var
   ScanCode:Word absolute SendChar;
   KeyDown, KeyUp:TInput;
begin
  KeyDown.Itype:=INPUT_KEYBOARD;
  KeyDown.ki.wVk:=0;
  KeyDown.ki.wScan:=ScanCode;
  KeyDown.ki.dwFlags:=KEYEVENTF_UNICODE;
  KeyDown.ki.time:=0;
  KeyDown.ki.dwExtraInfo:=GetMessageExtraInfo;

  KeyUp:=KeyDown;
  KeyUp.ki.dwFlags:=KeyUp.ki.dwFlags or KEYEVENTF_KEYUP;

  SetLength(Result, 0);
  if Press and Release then
  begin
    SetLength(Result, 2);
    Result[0]:=KeyDown;
    Result[1]:=KeyUp;
  end
  else
  if Press then
  begin
    SetLength(Result, 1);
    Result[0]:=KeyDown;
  end
  else
  if Release then
  begin
    SetLength(Result, 1);
    Result[0]:=KeyUp;
  end;
end;
       
procedure TSendInputHelper.AddUnicodeChar(SendChar: WideChar; Press,
  Release: Boolean);
var
   Inputs:TInputArray;
begin
   Inputs:=GetUnicode(SendChar, Press, Release);
   if Assigned(Inputs) then
      AddRange(Inputs);
end;
P.S. ich hab hier WideChar genommen, damit es auch vor D2009 funzt.
Marco Warm
TUO
TheUnknownOnes.net

Geändert von MarcoWarm (23. Nov 2010 um 14:14 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 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