Ich möchte die Taste in ein Formular, über Steckdose gedrückt, und simulieren die gleiche Taste drücken Sie auf dem Remote-Computer. Ich habe ein paar Beispiele im Internet gesehen, aber ich dachte, die meisten von ihnen machen den Job zu kompliziert, also versuche ich, meinen Job zu machen.OnKeyPress und keybd_event
Im Moment denke ich, die anderen Beispiele sind nicht kompliziert, aber vielleicht muss der Prozess kompliziert sein. Was ich bisher zu tun ist:
Auf dem Formular I onkeypress Veranstaltung mit dem Code haben:
procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
begin
ShowMessage(IntToStr(Ord(Key))); //I put this here just to check the key code I'm
//sending for future reference
CurrentSocket.SendText('<|KEY|>' + Key);
end;
Wenn ich drücke 'a' auf diesem Formular, erhalte ich die Meldung 97. Dieser Code shouldn nicht für Numpad 1?
Ja, auf der Empfangsseite, ich habe einfach:
procedure SocketThread.Execute;
var
ReceivedString: String;
parserLimit, iAux: integer;
Key: Char;
begin
try
ClientSocket.Active:= true;
while ClientSocket.Active do
begin
if ClientSocket.Socket.ReceiveLength > 0 then
begin
ReceivedString:= ClientSocket.Socket.ReceiveText;
while POS('<|KEY|>', ReceivedString) <> 0 do
begin
parserLimit:= POS('<|KEY|>', ReceivedString);
Key:= ReceivedString[parserLimit + 7];
Delete(ReceivedString, 1, parserLimit + 7);
keybd_event(Ord(Key), MapVirtualKey(Ord(Key), 0),0, 0);
keybd_event(Ord(Key), MapVirtualKey(Ord(Key), 0), KEYEVENTF_KEYUP, 0);
end;
Überraschenderweise (oder nicht), was ich auf dieser Seite zu bekommen ist die Nummer 1 auf dem Bildschirm gedruckt.
Ist es möglich, diesen Prozess so einfach wie möglich zu machen, ohne auf der Formularseite, mit onkeydown Ereignis, um zu überprüfen, ob Schicht, Großbuchstaben, Kleinbuchstaben, etc ... Die onkeypress gibt mir die "echte" Taste gedrückt (oben, unten, Symbol), deshalb versuche ich es zu benutzen.
OnKeyPress sendet keine virtuellen Tastencodes. Sie suchen nach OnKeyDown und OnKeyUp. –
Ich kann nicht einfach die Taste OnKeyPress gedrückt senden, und diese Presse auf der Empfängerseite simulieren? Ich sah Beispiele mit OnKeyDown/OnKeyUp, alle von ihnen müssen überprüfen, ob Shift gedrückt wird, um UpperCase, alles manuell zu setzen. Während OnKeyPress gibt mir das schon automatisch. Und die Beispiele, am Ende, über die Socket senden, wie folgt aus: '49: ('!') if (ssShift in Shift) dann CurrentSocket.SendText sonst CurrentSocket.SendText ('1') ; ' Ist nicht das Gleiche, was ich mache? – LessStress
'Ord ('a')' = 97 auf jeder ASCII-Tabelle, die Sie überprüfen möchten, genau wie 'Ord ('A')' ist 65. In 'OnKeyPress' erhalten Sie ein Zeichen (deshalb ist es deklariert als 'var Key: Char'). In OnKeyPress wissen Sie nicht, ob Sie einen NumPad-Schlüssel erhalten haben oder nicht. Wie David sagte, benötigen Sie OnKeyDown oder OnKeyUp, um virtuelle Schlüsselcodes zu erhalten. –