Tastendruck an Anwendung senden geht nicht richtig

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: Tastendruck an Anwendung senden geht nicht richtig

BeitragSa, Dez 05, 2009 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Ich versuche seit längerem einen Tastendruck an ein Spiel zu senden.

Das mache ich so:
Code: [AUSKLAPPEN]
PostMessageA(hWnd,WM_KEYDOWN,KEY_W,0)


Aber funktionieren tut das ganze nicht. Eigentlich sollte man bei W in dem Spiel vorwärts laufen.
Wenn ich im Spiel jetzt auf ein Eingabefeld gehe, dann werden dort W's bis zum Umfallen geschrieben. Aber laufen geht nicht. Weiß jmd wieso?
Alle anderen Tasten werden auch nicht von Spiel erkannt, solange ich nicht in einem Textfeld bin. Nur Tab funktioniert. Ich weiß echt nicht mehr weiter.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Midimaster

BeitragSo, Dez 06, 2009 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
geht es dabei darum, zwischen zwei BlitzMax-Spielen Daten zu senden? Ich glaube, Du musst schon etwas genauer werden.

zu dem PostMessage muss doch auch noch mehr Code gehören...

auf der anderen Seite gibt es ein GetMessage, oder? Bitte mehr Code
 

Schnuff

BeitragSo, Dez 06, 2009 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Er versucht einen "Virtuellen" Tastendruck abzuschicken...
so das dass Programm, welches den Fokus hat (das Aktive Programm) denkt, der nutzer hätte etwas auf seiner Tastatur gedrückt.

Eisvogel, was ich mir höchstens vorstellen kann, ist das dein Code irgendwie viele kurz-intervallige W's abschickt statt einen durchgehenden Tastendruck. Aber ich muss leider zugeben, das ich mehr ahnung davon auch nicht habe...

hast du mal versucht das ganze mit einem selbst programmierten Programm abzufangen?
damit könntest du auch meine these überprüfen...

Code: [AUSKLAPPEN]
Graphics 800, 600
local i:int = 0
repeat
  cls
 
  i = i + KeyHit(KEY_W)
  If KeyDown(KEY_W) then DrawText "KeyDown", 0, 0
  DrawText "KeyHit: "+i, 0, 15
 
  flip
until AppTerminated()

Xaymar

ehemals "Cgamer"

BeitragSo, Dez 06, 2009 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Bist du dir sicher das das Programm auch im Spiel WM_KeyDown beachtet? manche fragen nämlich mit GetAsyncKeyState oder GetKeyState die tasten ab.
Nutz doch keybd_event dafür.
Dann kannst du bestimmen wann sie gedrückt und wieder losgelassen ist (KEYEVENTF_KEYUP = $2, KEYEVENTF_KEYDOWN = $0).

Manche SPiele lösen ihre Chattextboxen auch über unsichtbare Textboxen.
Warbseite

Der Eisvogel

BeitragSo, Dez 06, 2009 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Also es geht darum, dass dieses Spiel eben nicht den Fokus haben soll. ich habe aber auch schon Testweise keybd_event verwendet, aber das Spiel zeigte ebenfalls keine Reaktion. Es wäre auch keine Erklärung dafür, dass es mit Tab geht. Das es mit den anderen Tasten irgendwie gehen muss weiß ich, da ich eine Logitech-Maus habe, der ich Tastendrücke beibringen kann. Darauf reagiert das Spiel dann auch. Wie sie das machen weiß ich nicht, aber irgendwie muss Logitech das ja machen. Ich komme bloß nicht dahinter wie.

@Midimaster: Nein es geht darum Tastendrücke an eine völlig fremde Anwendung, die evt. auch im Hintergrund läuft, zu senden.

@Schnuff: Ich werde das gleich ausprobieren, aber ich vermute mal, dass das Ergebnis positiv sein wird, da in einer Textbox des Spiels ja schon w's erschienen sind. Ich editiere das Ergebnis dann gleich hier rein.

EDIT: Also wenn ich WM_KEYUP im Code mit drinnen habe, dann zaählt das Programm in Windeseile hoch, und wenn es weg lassen, wird nur um eins erhöht, wie sich das gehört. Wenn ich in dem Programm dann noch KeyDown anzeige, ist dies dauerhaft True, sofern ich die Nachricht weg lasse.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BtbN

BeitragSo, Dez 06, 2009 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Logitech sitzt auf Treiber-Ebene, und haben von da aus kein Problem, tastendrücke abzusenden. Du bist kein Treiber, und ob das Spiel macht was du willst, ist reine Glücks-Sache.
Wenn die Anti-Cheat-Zeug eingebaut haben, verteidigt sich das Spiel eventuell sogar aktiv gegen deinen Versuch.

Der Eisvogel

BeitragSo, Dez 06, 2009 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber warum geht dann Tab? Und warum werden die anderen Tasten dann von einem Textfeld erkannt?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BtbN

BeitragSo, Dez 06, 2009 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermutlich, weil es fürs Textfeld eine andere methode benutzt, um die Tasten abzufragen. Kannst ja den Entwicklern ne mail schreiben, aber die werden darüber eher nicht so erfreut sein.

Der Eisvogel

BeitragSo, Dez 06, 2009 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne glaube ich auch nicht, dabei hab ich wirklich nix böses im Sinn, das einzige was ich erreichen will, ist es eine "Gamepad-Steuerung" zu ermöglichen, die ich selbst individuel anpassen kann. Aber wenn das halt nicht geht, dann muss ich mir das wohl leider aus dem Kopf wischen.
Wenn noch jmd ne Ahnung hat was ich falsch mache könnte, oder weiß wie es geht, dann sagt es bitte. Ansonsten Danke an alle, die mir geholfen haben.

Kein Gamepadunterstützung Crying or Very sad

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Xaymar

ehemals "Cgamer"

BeitragSo, Dez 06, 2009 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Textfeld wird von Windows gehandhabt. Mache ich auch oft so, erspart eine eigene Routine.
das er keybd_event nicht erkennt kann daran liegen, das der hook des spiels wohl nur Nachrichten vom System zulässt. Mit keydb_event und sonstigen sendest du die id deines Programms immer mit, außer es läuft über den System benutzeraccount.

Es kann auch sein das du einen Directx Hook holen musst. Diese werden komplett anders gehandhabt, so dass du dann wohl einen wrapper schreiben musst um es dir zu vereinfachen. Wie man einen DXHook von einem anderen Programm holt weiß ich nicht.
Warbseite

Der Eisvogel

BeitragSo, Dez 06, 2009 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich diese ID, die mit gesendet wird, irgendwie beeinflussen?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Xaymar

ehemals "Cgamer"

BeitragSo, Dez 06, 2009 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur wenn dein Programm unter dem Account System läuft. Dann hat dein Programm nämlich auch ziemlich viele Sicherheitssperren überwunden und kann so ziemlich alles machen.
Das programm muss irgendwie speziell gestartet werden. wie steht irgendwo in der msdn, die ich derzeit nicht aufrufen kann :/
Warbseite

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group