Hallöchen allerseits.
Ich baue grade ein ingame-radio für GTA San Andreas.
Ingame erstelle ich an einer bestimmten Stelle (links unten) eine farbige Markierung, wenn das Radio abgespielt werden soll.
Soweit so gut, wenn ich am Mausrad drehe, startet das Radio.
Doch es mutet sich selber (also Pixelcheck erkennt die Markierung, beim nächsten Mal auf einmal nichtmehr, dann wieder, dann wieder nicht ...)
Das Script:
Spoiler anzeigen
#include <wmp.au3>
#include <Misc.au3>
$struct = "DWORD vkCode;" _
&"DWORD scanCode;" _
&"long flags;" _
&"ULONG_PTR dwExtraInfo"
Global $lastplayed = 0 ;0 = aus
Global $angepasst = 0 ; 0 = gta nicht ontop
Global $hMouseHook, $WheelMoving,$locked = 0
$CallbackMouseProc = TogglePlugMouse()
#cs
If Not FileExists("settings.ini") Then
Do
$gtapfad = FileSelectFolder("Wähle den SA:MP/GTA San Andreas Ordner aus","",4)
if @error Then
If MsgBox(32+4,"Abbrechen ?","Wollen Sie das Setup von RealRadio wirklich abbrechen ?") = 6 Then Exit
EndIf
If Not FileExists($gtapfad & "\gta_sa.exe") or Not FileExists($gtapfad & "\samp.exe") Then
MsgBox(16,"Error","Falsches Verzeichnis !",5)
$gtapfad = ""
EndIf
Until $gtapfad <> ""
IniWriteSection("settings.ini","Settings","")
IniWrite("settings.ini","Settings","InstallPath",$gtapfad)
EndIf
#ce
$oWMP = _wmpcreate(1,0,0,200,200)
_wmpvalue($oWMP,"controls")
While 1
If WinActive("GTA:SA:MP") And PixelSearch(0,@Desktopheight / 2,@Desktopheight / 5,@desktopheight,0x00574A,15,2) <> @error Then
If $angepasst = 0 Then
$angepasst = 1
_wmpvalue($oWMP,"play")
ConsoleWrite("unmute" & @CRLF)
EndIf
Else
If $angepasst = 1 Then
$angepasst = 0
_wmpvalue($oWMP,"stop")
ConsoleWrite("mute" & @CRLF)
EndIf
EndIf
$WheelMsg = _GetWheelMove()
Select
Case $WheelMsg = "U" And $locked = 0 And WinActive("GTA:SA:MP") ;UP
up()
Case $WheelMsg = "D" And $locked = 0 And WinActive("GTA:SA:MP") ;DOWN
down()
EndSelect
Sleep(300)
WEnd
; #################################################
[/autoit] [autoit][/autoit] [autoit]Func _GetWheelMove()
Local $x = StringLeft($WheelMoving,1)
$WheelMoving = StringTrimLeft($WheelMoving,1)
Return $x
EndFunc
Func TogglePlugMouse($hCallProc=0)
If IsArray($hMouseHook) Then
DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hMouseHook[0])
DllCallbackFree($hCallProc)
Return 0
EndIf
Local Const $WH_MOUSE_LL = 14
;~ Local Const $WH_MOUSE = 7
Local $hMouseProc = DllCallbackRegister("_MouseProc", "int", "int;ptr;ptr")
Local $hMod = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
$hMouseHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", _
"int", $WH_MOUSE_LL, _
"ptr", DllCallbackGetPtr($hMouseProc), _
"hwnd", $hMod[0], _
"dword", 0)
Return $hMouseProc
EndFunc
Func _MouseProc($nCode, $wParam, $lParam)
If $nCode < 0 Then
Local $iRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hWinHook[0], _
"int", $nCode, _
"ptr", $wParam, _
"ptr", $lParam)
Return $iRet[0]
EndIf
$dllstruct = DllStructCreate($struct,$lParam)
;~ If DllStructGetData($dllstruct,1) = 0x1B And _IsPressed("11") Then $CTRL_ESC_Pressed = True
If $wParam = 0x20A Then
If DllStructGetData($dllstruct,3) > 0 Then
; ConsoleWrite("Up" & @CRLF)
$WheelMoving &= "U"
ElseIf DllStructGetData($dllstruct,3) < 0 Then
; ConsoleWrite("Down" & @CRLF)
$WheelMoving &= "D"
EndIf
EndIf
;~ ConsoleWrite($wParam & " - " & DllStructGetData($dllstruct,1) & " - " & DllStructGetData($dllstruct,2)& " - " & DllStructGetData($dllstruct,3)& " - " & DllStructGetData($dllstruct,4) & @LF)
Return 0
EndFunc
;##############################################################
[/autoit] [autoit][/autoit] [autoit]Func up()
$locked = 1
If Not WinActive("GTA:SA:MP") Or PixelSearch(0,@Desktopheight / 2,@Desktopheight / 5,@desktopheight,0x00574A,15) = @error Then Return @error
$lastplayed = $lastplayed + 1
If IniRead("senderliste.ini","URL",$lastplayed,"error") <> "error" Then
$debug = _wmploadmedia($oWMP,IniRead("senderliste.ini","URL",$lastplayed,"error"),1)
ConsoleWrite("gestartet" & @CRLF)
EndIf
$locked = 0
Beep(500,500)
EndFunc
Func down()
$locked = 1
If Not WinActive("GTA:SA:MP") Or PixelSearch(0,@Desktopheight / 2,@Desktopheight / 5,@desktopheight,0x00574A,15) = @error Then Return @error
$lastplayed = $lastplayed - 1
If IniRead("senderliste.ini","URL",$lastplayed,"error") <> "error" Then
$debug = _wmploadmedia($oWMP,IniRead("senderliste.ini","URL",$lastplayed,"error"),1)
ConsoleWrite("gestartet" & @CRLF)
EndIf
$locked = 0
Beep(500,500)
EndFunc
Eine Beispielsausgabe:
ZitatAlles anzeigenunmute
gestartet
mute
unmute
mute
unmute
mute
>Exit code: 1 Time: 42.852
Kann mir jemand sagen, wieso das so ist, und wie ich das umgehen kann ?
Habe die Farbenvariation sogar schon auf 15 gestellt, ohne Erfolg.
Es muss also ein Problem mit Pixelcheck sein (oder gar mit der Logik).
Wie kann es denn sein, dass sich das sofort an-/ausschaltet ?