![]() |
Tastendrücke an Spiel
Hallo
nächstes Problem, ich will an ein Spiel (konkret: Need for Speed: Hot Pursuit 2) einen Tastendruch senden. Dazu benutze ich folgenden Befehl:
Code:
das sollte jetzt einen Druck auf "Pfeil nach oben" ausführen und damit das Gasgeben simulieren. Tut nur nicht, NFS nimmt keine Tastendrücke aus meinem Programm entgegen, wogegen es mit "normalen" Windowsanwendungen (notepad, Word, Delphi) ganz perfekt geht.procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean); {************************************************************ * Procedure PostKeyEx32 * * Parameters: * key : virtual keycode of the key to send. For printable * keys this is simply the ANSI code (Ord(character)). * shift : state of the modifier keys. This is a set, so you * can set several of these keys (shift, control, alt, * mouse buttons) in tandem. The TShiftState type is * declared in the Classes Unit. * specialkey: normally this should be False. Set it to True to * specify a key on the numeric keypad, for example. * Description: * Uses keybd_event to manufacture a series of key events matching * the passed parameters. The events go to the control with focus. * Note that for characters key is always the upper-case version of * the character. Sending without any modifier keys will result in * a lower-case character, sending it with [ssShift] will result * in an upper-case character! // Code by P. Below ************************************************************} 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 } . . . . . PostKeyEx32(VK_UP,[],false); Was mache ich falsch? |
Wahrscheinlich reagiert NFS auf Botschaften wie KeyDown und KeyUp, da diese zeitlich genauer sind als KeyPress.
|
was heißt das für mich konkret? Was kann ich ändern?
|
Das wiederum kann ich Dir leider nicht sagen, da ich mich mit der Materie nie weiter beschäftigt habe. Obiges, ist aber auch nur eine Vermutung.
|
Moin The Omega,
schau Dir dazu mal die beiden Messages WM_KEYDOWN und WM_KEYUP an. Eventuell kannst Du es damit simulieren. Voraussetzung ist natürlich, dass Du dazu das entsprechende Fensterhandle hast. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 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