Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Sendkeys, "Enter" einbauen (https://www.delphipraxis.net/191585-sendkeys-enter-einbauen.html)

derseitzer 30. Jan 2017 13:00

Delphi-Version: 10 Seattle

Sendkeys, "Enter" einbauen
 
Hey Leute,
Ich habe im Internet diesen Code gefunden der auch einwandfrei funktioniert:
Code:
uses
  Windows;

{$POINTERMATH ON}
procedure SendKeys(const S: String);
var
  InputEvents: PInput;
  I, J: Integer;
begin
  if S = '' then Exit;
  GetMem(InputEvents, SizeOf(TInput) * (Length(S) * 2));
  try
    J := 0;
    for I := 1 to Length(S) do
    begin
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[I]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[I]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
    end;
    SendInput(J, InputEvents[0], SizeOf(TInput));
  finally
    FreeMem(InputEvents);
  end;
end;
Jetzt möchte ich aber auch die Möglichkeit haben "Enter" zu simulieren.. hat jemand eine Idee, wie ich den Code modifizieren könnte? Oder hat jemand einen Code, mit dem beides funktoniert
und mit dem ich diesen hier ersetzen könnte? Viele Dank schon mal im voraus :)

t.roller 30. Jan 2017 13:45

AW: Sendkeys, "Enter" einbauen
 
Delphi-Quellcode:
Keybd_Event(VK_RETURN,0,0,0);              //Taste drücken
Keybd_Event(VK_RETURN,0,KEYEVENTF_KEYUP,0); //Taste loslassen

himitsu 30. Jan 2017 14:10

AW: Sendkeys, "Enter" einbauen
 
Ich wäre ja erstmal auf die doofe Idee gekommen und hätte mir die Dokumentation zu MSDN-Library durchsuchenSendInput angesehn und mich da bis zur gewünschten Information duchgeklickt.

also
https://msdn.microsoft.com/de-de/lib.../ms646310.aspx
https://msdn.microsoft.com/de-de/lib.../ms646270.aspx
https://msdn.microsoft.com/de-de/lib.../ms646271.aspx
https://msdn.microsoft.com/de-de/lib.../dd375731.aspx

derseitzer 30. Jan 2017 14:13

AW: Sendkeys, "Enter" einbauen
 
Vielen Dank!! noch eine Frage: wenn ich in meiner sendkeys funktion etwas auf meiner Tform einbinden will (z.b. ein label1) erkennt mein Programm das nicht, wahrscheinlich weil ich in der funktion nur "(const S: String)" übergebe..
siehe Code... wie baue ich noch den "Sender: TObejct" ein? so: (Sender: TObject, const S: String); funktioniert nicht :/

HolgerX 30. Jan 2017 17:18

AW: Sendkeys, "Enter" einbauen
 
Hmm..

einfach mit

SendKeys(#13);

versucht?

EWeiss 30. Jan 2017 19:18

AW: Sendkeys, "Enter" einbauen
 
Vielleicht hilfst..

gruss

derseitzer 31. Jan 2017 07:21

AW: Sendkeys, "Enter" einbauen
 
Code:
{$POINTERMATH ON}
procedure TForm1.SendKeys(const S: String);
var
  InputEvents: PInput;
  I, J: Integer;
begin

  if S = '' then
  begin
    if Checkbox1.checked=True then
    begin
    Keybd_Event(VK_RETURN,0,0,0);                         //Taste drücken
    Keybd_Event(VK_RETURN,0,KEYEVENTF_KEYUP,0);           //Taste loslassen
    end;
    Exit;
  end;
  GetMem(InputEvents, SizeOf(TInput) * (Length(S) * 2));
  try
    J := 0;
    for I := 1 to Length(S) do
    begin
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[I]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[I]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
    end;
    SendInput(J, InputEvents[0], SizeOf(TInput));
  finally
    FreeMem(InputEvents);
  end;
end;
Habe es hiermit probier, allerdings macht er immernoch kein Enter:/

haentschman 31. Jan 2017 07:32

AW: Sendkeys, "Enter" einbauen
 
Moin...8-)
Zitat:

Ich habe im Internet diesen Code gefunden der auch einwandfrei funktioniert:
Was hast du denn vor? Was soll der Code deiner Meinung nach tun? :gruebel:
Vieleicht gibt es auch was einfaches um mit ENTER zum nächsten Feld zu gelangen. :zwinker: (nur eine Vermutung)

derseitzer 31. Jan 2017 07:45

AW: Sendkeys, "Enter" einbauen
 
hab meinen Fehler gefunden:) Diese Entertaste die ich oben implementiert habe zu simulieren, wird nie ausgeführt, da der Code durchlaufen wird, dann eben die Schleife und das wars.. Habe den Code also einfach falsch implementiert :oops:

haentschman 31. Jan 2017 07:50

AW: Sendkeys, "Enter" einbauen
 
Zitat:

Was hast du denn vor? Was soll der Code deiner Meinung nach tun?
...bitte antworte noch auf die Rückfrage. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 Uhr.
Seite 1 von 2  1 2      

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