Hallo, ich bin grad dabei mir einen MAME Arcade Automat zu bastel. Ich habe mir ein Controlerpannel gebastelt mit dem ich alles steuern möchte, da ich nur begrenzt Buttons zur verfügung habe will ich 2 funktionen auf einen button legen und zwar die coin insert taste (5) und die start player one (1). Die send funktion wird nicht erkannt gibt es da noch andere befehle? Vll in verbindung mit einem hotkey tool. Bin über jede hilfe dankbar. Mfg LoZe
Mit einer Taste zwei Tasten drücken
-
- [ offen ]
-
LoZe -
21. April 2010 um 19:03 -
Geschlossen -
Erledigt
-
-
Poste mal dein Script, an dem kann man es dann besser erklären.
-
-
- Offizieller Beitrag
Das kann wohl kaum der relevante Code sein ;).
Johannes
-
hört sich stark nach spiel-bot oder ähnlichem an...
darf ich auf dieForenregeln hinweisen? -
Nein es ist kein spiel bot! Nur die ersparniss eines speraten coin button oder eines richtigen münzeinwurf. Es ist eine art freeplay für den MAME Emulator. Da sich nich jedes Rom auf Freeplay stellen lässt.
Autoit ist doch eine automatisierungs software?!
-
vllt ja so?
[autoit]
[/autoit]
Sleep(1000)
Send("{5}")
Sleep(2000)
Send("{1}")
[autoit]
oder
[/autoit][autoit][/autoit][autoit][/autoit]
Sleep(1000)
Send("5",1)
Sleep(2000)
Send("1",1)
; keys Die Folge von Tastendrücken, die gesendet werden soll. flag [optional] Kennzeichnet, wie der "keys"-Parameter verarbeitet wird:
; flag = 0 (Standard), Text beinhaltet spezielle Zeichen, wie „+“ und „!“, die für SHIFT- (=UMSCHALT) und ALT-Tasten stehen.
; flag = 1, "keys" wird so wie angegeben gesendet.MfG
Alizame -
Das erinnert mich an dies hier: [ offen ] Ganz Simpeler Tasten druck in einem Spiel
-
ist ja auch das selbe nur das ich in dem ersten thread das wort Spiel erwähnt habe und er deshalb geschlossen wurde.
ich dachte so erklät ich es am einfachsten wusste ja nicht dass man dann gleich davon ausgeht das ich ein bot haben möchet (was nicht der fall ist)zum beweis habe ich ein foto meines controller panel gemacht und klar zu stellen das ich nur die keyfunktion für mein Arcade Cabinet haben möchte.
Spoiler anzeigen
[Blockierte Grafik: http://mame.lord-zero.com/u.jpg][Blockierte Grafik: http://mame.lord-zero.com/o.jpg]
-
vllt ja so?
[autoit]
[/autoit]
Sleep(1000)
Send("{5}")
Sleep(2000)
Send("{1}")
[autoit]
oder
[/autoit] [autoit][/autoit] [autoit][/autoit]
Sleep(1000)
Send("5",1)
Sleep(2000)
Send("1",1)
; keys Die Folge von Tastendrücken, die gesendet werden soll. flag [optional] Kennzeichnet, wie der "keys"-Parameter verarbeitet wird:
; flag = 0 (Standard), Text beinhaltet spezielle Zeichen, wie „+“ und „!“, die für SHIFT- (=UMSCHALT) und ALT-Tasten stehen.
; flag = 1, "keys" wird so wie angegeben gesendet.MfG
Alizamebeides Getestet ohen Erfolg
-
Funtkionieren
[autoit]ControlSend
[/autoit]Befehle?
Ansonsten funktioniert das hier?Spoiler anzeigen
[autoit]#include <SendMessage.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>
#include <SendMessage.au3>;Notepad starten
[/autoit] [autoit][/autoit] [autoit]
Run("notepad")
WinWait("Unbenannt - Editor")
$hWnd = ControlGetHandle("Unbenannt - Editor", "", "Edit1") ; Ctrl-Handle einlesenSleep(1000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ssend($hWnd, "5")
Sleep(2000)
ssend($hWnd, "1")Func ssend($hWnd, $sString, $iHex = 0, $bSendMsg = True)
[/autoit] [autoit][/autoit] [autoit]
;hamburger, edit by SEuBoIf Not IsHWnd($hWnd) Then Return SetError(-1, 0, 0)
[/autoit] [autoit][/autoit] [autoit]
Local $aPar, $aText; 1. Get Parent Window. 2. Send WM_ACTIVATE to Parent. 3. Send WM_SETFOCUS to Control.
[/autoit] [autoit][/autoit] [autoit]
If $bSendMsg Then
$aPar = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hWnd)
If @error Then Dim $aPar[1] = [WinGetHandle("Program Manager")]
_SendMessage($aPar[0], 0x0006, $sString, 0, 0, "int", "long")
_SendMessage($hWnd, 0x7)
EndIf; Send WM_CHAR messages to Control.
[/autoit] [autoit][/autoit] [autoit]
If $iHex Then _SendMessage($hWnd, 0x102, $sString, 0, 0, "int", "long")
If Not $iHex Then
$aText = StringSplit($sString, "", 3)
For $i = 0 To UBound($aText) - 1
_SendMessage($hWnd, 0x102, "0x" & Hex(StringToBinary($aText[$i])), 0, 0, "int", "long")
Next
EndIf;~ _SendMessage($hwnd, 0x8)
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>ssend
[/autoit] -
Hi,
schönes Panel, was ich noch nicht kapiert habe, wie fragst du im Emulator das Pad ab? Wenn das Ding beispielsweise am Gameport hängt, dann nützt Send() nicht sonderlich viel.... -
es ist eine Art Keyboard Interface
[Blockierte Grafik: http://www.ultimarc.com/images/ipac2_top.jpg]
ich kann jeden Eingang mit einem Tastatur Button Belegen (nach Wahl)
IPac -
Funtkionieren
[autoit]ControlSend
[/autoit]Befehle?
Ansonsten funktioniert das hier?Spoiler anzeigen
[autoit]#include <SendMessage.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>
#include <SendMessage.au3>;Notepad starten
[/autoit] [autoit][/autoit] [autoit]
Run("notepad")
WinWait("Unbenannt - Editor")
$hWnd = ControlGetHandle("Unbenannt - Editor", "", "Edit1") ; Ctrl-Handle einlesenSleep(1000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ssend($hWnd, "5")
Sleep(2000)
ssend($hWnd, "1")Func ssend($hWnd, $sString, $iHex = 0, $bSendMsg = True)
[/autoit] [autoit][/autoit] [autoit]
;hamburger, edit by SEuBoIf Not IsHWnd($hWnd) Then Return SetError(-1, 0, 0)
[/autoit] [autoit][/autoit] [autoit]
Local $aPar, $aText; 1. Get Parent Window. 2. Send WM_ACTIVATE to Parent. 3. Send WM_SETFOCUS to Control.
[/autoit] [autoit][/autoit] [autoit]
If $bSendMsg Then
$aPar = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hWnd)
If @error Then Dim $aPar[1] = [WinGetHandle("Program Manager")]
_SendMessage($aPar[0], 0x0006, $sString, 0, 0, "int", "long")
_SendMessage($hWnd, 0x7)
EndIf; Send WM_CHAR messages to Control.
[/autoit] [autoit][/autoit] [autoit]
If $iHex Then _SendMessage($hWnd, 0x102, $sString, 0, 0, "int", "long")
If Not $iHex Then
$aText = StringSplit($sString, "", 3)
For $i = 0 To UBound($aText) - 1
_SendMessage($hWnd, 0x102, "0x" & Hex(StringToBinary($aText[$i])), 0, 0, "int", "long")
Next
EndIf;~ _SendMessage($hwnd, 0x8)
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>ssend
[/autoit]habe es probiert aber will auch nicht Mame Reagiert nicht auf die eingabe. bzw minimiert wegen notepad
-
das mit dem Notepad war auch nur ein Beispiel.
Es geht hauptsächlich um die Funktion ssend. Ich weiß ja nicht, inwiefern das Keyboard interfacve softwareseitig ansteuerbar ist (ggf ein GUI/Interface, an das man tasten senden kann?). Die SSend Funktion sendet einen Text an ein Fenster, besser gesagt an ein Control, wenn alle anderen Methoden versagen (zb. Edit Felder von minimierten Java Fenstern - da hilft ControlSend nicht.)
Du musst das Beispiel dann natürlich entsprechend anpassen.
-
musst du vllt die signale auslesen und dann was senden?ich versteh's nicht so ganz
-
Gibt es da vielleicht eine DLL zur Ansteuerung?
-
also des I-Pac ist eine Tastatur! nur halt mit 32 Knöpfen. Kein installation keine dll. läuft wie eine zweite Tastatur. und im Mame werden auch beide erkannt. mit dem gleichen Imput befehl.
-
Zitat
also des I-Pac ist eine Tastatur! nur halt mit 32 Knöpfen. Kein installation keine dll. läuft wie eine zweite Tastatur. und im Mame werden auch beide erkannt. mit dem gleichen Imput befehl.
wenn ich das jetzt richtig verstanden habe, dann musst du zuerst die "Taste" die das Pad sendet abfangen, und daraus dann 2 andere Tastendrücke machen und die an Mame senden?
-
wenn ich das jetzt richtig verstanden habe, dann musst du zuerst die "Taste" die das Pad sendet abfangen, und daraus dann 2 andere Tastendrücke machen und die an Mame senden?
bingo, wobei das Abfangen nicht das Problem ist da ist, da ich die Taste ja mit einem Hotkey auf eine Anwendung zuweißen kann.