Ich bin mir nicht sicher, ob es eine gute Idee ist alle Threads direkt zu löschen wenn der User ein paar Botmerkmale in seinem Script hat. Aber vor dieser Anfagsmoderationsgeschichte haben wir immer erst höflich nach dem Verwendungszweck gefragt bevor der Thread geschlossen, editiert oder gelöscht wurde.
Wenn der User einen wirklich guten Grund hat wieso er PixelSearch und MouseClick in einer Endlosschleife nicht als Bot verwenden würde, können wir ihm doch wohl kaum die Hilfe verweigern.
Beiträge von name22
-
-
Du musst dem Programm sagen was deiner Meinung nach "darüber" etc. ist ;). Ich würde die Koordinaten aller Buttons in der Nähe überprüfen, und den der am "darübersten" ist auswählen :D.
-
Wie wärs denn damit?
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]
$BackgroundPIC = @ProgramFilesDir & "\AutoIt3\Examples\GUI\msoobe.jpg"$Width = 800
[/autoit] [autoit][/autoit] [autoit]
$Height = 600Opt("GuionEventmode", 1)
[/autoit] [autoit][/autoit] [autoit]$hWnd = GUICreate("Test", $Width, $Height)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_Draw")
GUISetOnEvent($GUI_EVENT_PRIMARYUP, "_Clear")GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]Global $BackgroundBMP = _GDIPlus_BitmapCreateFromFile($BackgroundPIC)
[/autoit] [autoit][/autoit] [autoit]
Global $hPen = _GDIPlus_PenCreate(0xFFFF0000, 10)
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $hGraphics)
Global $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)$x1 = 0
[/autoit] [autoit][/autoit] [autoit]
$y1 = $Height
$x2 = $Width
$y2 = $Height
$step = 30
$clearcolor = 0x00FFFFFFWhile True
[/autoit] [autoit][/autoit] [autoit]
Sleep(1000)
WEndFunc _Draw()
[/autoit] [autoit][/autoit] [autoit]
$Mouse = GUIGetCursorInfo()If @error Or Not $Mouse[4] Then Return
[/autoit] [autoit][/autoit] [autoit]$m1 = ($Mouse[1] - $y1) / ($Mouse[0] - $x1)
[/autoit] [autoit][/autoit] [autoit]
$b1 = $Mouse[1] - $m1 * $Mouse[0]
$m2 = ($Mouse[1] - $y2) / ($Mouse[0] - $x2)
$b2 = $Mouse[1] - $m2 * $Mouse[0]_GDIPlus_GraphicsDrawImageRect($hBackbuffer, $BackgroundBMP, 0, 0, $Width, $Height)
[/autoit] [autoit][/autoit] [autoit]For $x = $x1 To $Mouse[0] Step $step
[/autoit] [autoit][/autoit] [autoit]
$y = $m1 * $x + $b1
_GDIPlus_GraphicsDrawEllipse($hBackbuffer, $x, $y, 5, 5, $hPen)
NextFor $x = $x2 To $Mouse[0] Step -$step
[/autoit] [autoit][/autoit] [autoit]
$y = $m2 * $x + $b2
_GDIPlus_GraphicsDrawEllipse($hBackbuffer, $x, $y, 5, 5, $hPen)
Next_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Width, $Height)
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_DrawFunc _Exit()
[/autoit]
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_GraphicsDispose($hBackbuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_BitmapDispose($BackgroundBMP)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
Irgendwie vergisst du immer die Ressourcen aus dem Arbeitsspeicher wieder zu entfernen, oder du weißt nicht wie es geht.
_GDIPlus_Shutdown alleine reicht da nicht, du musst auch Grafiken mit _GDIPlus_GraphicsDispose löschen etc. ;). -
Wenn du eine Variable Local deklarierst, ist sie nur innerhalb der Funktion verfügbar bzw. in keiner Funktion wenn sie im Hauptscript deklariert wurde. Wenn sie Global deklariert wird, ist sie im gesamten Script und in allen Funktionen verfügbar.
-
-
Zitat von Twodollarbillie
Könntest du mir kurz erklären, für was 0x7 steht?
Dafür ist ja eigentlich die Hilfe da ;).Zitat von Hilfe zu RunAlles anzeigenopt_flag: [optional] Steuert verschiedene Optionen, die die Interaktion zwischen Parent- und Child-Prozess betreffen (STDIO).
0x1 ($STDIN_CHILD) = Stellt ein Handle zum STDIN-Stream des Child-Fensters bereit
0x2 ($STDOUT_CHILD) = Stellt ein Handle zum STDOUT-Stream des Child-Fensters bereit.
0x4 ($STDERR_CHILD) = Stellt ein Handle zum STDERR-Stream des Child-Fensters bereit.
0x8 ($STDERR_MERGED) = Stellt das selbe Handle für den STDOUT- und STDERR-Stream bereit (Setzt $STDOUT_CHILD und $STDERR_CHILD).
0x10 ($STDIO_INHERIT_PARENT) = Stellt dem Child-Fenster das Handle zum STDIO-Stream des Parent-Fensters bereit. Kann nicht mit einem anderen STDIO-Flag kombiniert werden. Dieses Flag ist nur dann sinnvoll, wenn die Parent-Anwendung als Kommandozeilenapplikation kompiliert wurde.
0x10000 ($RUN_CREATE_NEW_CONSOLE) = Der Child-Kommandozeilenprozess wird in einem eigenen Kommandozeilenfenster ausgeführt. Dieses Flag ist nur dann sinnvoll, wenn die Parent-Anwendung als Kommandozeilenapplikation kompiliert wurde.Zitat von TwodollarbillieFür ffmpeg klappts inzwischen. Für Rtmpdump leider noch nicht.
Es geht auch nicht bei jedem Programm.
Du kannst dich ja mal ein wenig über die Konsolenausgabe von Rtmpdump informieren, vielleicht findest du ja einen Anhaltspunkt. 
-
Zitat
Jetz verarsch den nicht

Es ist ja bestimmt nicht böse gemeint ;). Aber seinen eigenen Namen sollte man schon richtig schreiben können 'Buphy'
...
Das Script ist sehr umständlich gemacht und ich würde viel lieber ein effektives und funktionierendes Script komplett neu schreiben, als mich durch deinen verwirrenden Code zu kämpfen in der Hoffnung etwas halbwegs Akzeptables daraus zu kreieren.
-
... Oder InetRead() ;).
-
Hast du schon versucht ein Programm das nur eine MsgBox o.Ä enthält über einen HotKey zu starten? Wenn es dort das selbe Problem gibt weißt du, dass es nicht am Script liegt. Das einzige was für eine verzögerung innerhalb des Scripts sorgen könnte, sind die etwas verwirrend aufgebauten Schleifen....
-
Ups... Ich hab ja auch noch was vergessen...
[autoit]
$iPID = Run(@ScriptDir & "\Test.exe", @ScriptDir, @SW_HIDE, 0x7)
[/autoit]
Sleep(1000)
MsgBox(64, "Konsoleninhalt", StdoutRead($iPID)) -
Zitat
ohje ich glaub, das is mir zu kompliziert^^
[autoit]
Aha...$iPID = Run(@ScriptDir & "\Test.exe")
[/autoit]
Sleep(1000)
MsgBox(64, "Konsoleninhalt", StdoutRead($iPID, True))
Ob das funktioniert weiß ich allerdings nicht... Ggf. werden manche Daten auch nur über den Error Stream des Programms ausgegeben, also müsste man statt StdoutRead, StderrRead verwenden ;). -
Ich würde es ja so machen...
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$Wait = 5000 ;Wartezeit in Millisekunden
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("^+s", "_Main")$Form1 = GUICreate("", 517, 170, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
$Label1 = GUICtrlCreateLabel("Der Rechner wird abgeschaltet!", 170, 16, 154, 17)
$Progress1 = GUICtrlCreateProgress(32, 48, 457, 33)
GUICtrlSetData(-1, 25)
$Button1 = GUICtrlCreateButton("Stop", 224, 104, 89, 41, 0)
$check1 = GUICtrlCreateCheckbox(" Nur neu starten!", 370, 115, 120, 20)While Sleep(100)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _Main()
[/autoit] [autoit][/autoit] [autoit]
GUISetState()
$TimerShutdown = TimerInit()While 1
[/autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Return GUISetState(@SW_HIDE)
EndSwitch
If TimerDiff($TimerShutdown) >= $Wait Then
Switch BitAND(GUICtrlRead($check1), $GUI_CHECKED) = $GUI_CHECKED
Case True
Shutdown(2)
Case False
Shutdown(13)
EndSwitch
Exit
EndIf
GUICtrlSetData($Progress1, TimerDiff($TimerShutdown) / $Wait * 100)
WEnd
EndFunc ;==>_Main
Das Programm kann dann die ganze Zeit über laufen, und der HotKey ist im Script integriert, somit dürfte es keine Startprobleme mehr geben ;). Außerdem wird Das Programm so nur zurückgesetzt und nicht beendet wenn man Stop drückt. -
Wenn du sie über Run o.Ä vom AutoIt Script aus startest, kannst du es mit StdoutRead versuchen ;).
-
Sorry, aber ich musste meine Methode jetzt einfach ausprobieren ^^. Und sie funktioniert sogar :P.
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$iGUIColorBG = 0xFFFFFFFF
[/autoit] [autoit][/autoit] [autoit]
$iGUIWidth = 400
$iGUIHeight = 400
$FPS = 40$iX_LineP1 = $iGUIWidth / 2
[/autoit] [autoit][/autoit] [autoit]
$iY_LineP1 = $iGUIHeight / 2
$iX_LineP2 = 350
$iY_LineP2 = 300$iX_Ellipse = $iX_LineP1
[/autoit] [autoit][/autoit] [autoit]
$iY_Ellipse = $iY_LineP1
$iSize_Ellipse = 50
$iSpeedEllipse = 5$aV_Line = _Vector_Create($iX_LineP2 - $iX_LineP1, $iY_LineP2 - $iY_LineP1)
[/autoit] [autoit][/autoit] [autoit]
$aV_LineNorm = _Vector_NormVector($aV_Line)$iX_SpeedEllipse = $aV_LineNorm[0] * $iSpeedEllipse
[/autoit] [autoit][/autoit] [autoit]
$iY_SpeedEllipse = $aV_LineNorm[1] * $iSpeedEllipse$hWnd = GUICreate("Example by name22 (autoit.de)", $iGUIWidth, $iGUIHeight)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)$hBrush_Ellipse = _GDIPlus_BrushCreateSolid(0xFF0000FF)
[/autoit] [autoit][/autoit] [autoit]
$hPen_Line = _GDIPlus_PenCreate(0xFFFF0000, 2)GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
[/autoit] [autoit][/autoit] [autoit]
AdlibRegister("_Draw", 1000 / $FPS)While Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _Draw()
[/autoit] [autoit][/autoit] [autoit]
$iX_Ellipse += $iX_SpeedEllipse
$iY_Ellipse += $iY_SpeedEllipse_GDIPlus_GraphicsClear($hBuffer, $iGUIColorBG)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawLine($hBuffer, $iX_LineP1, $iY_LineP1, $iX_LineP2, $iY_LineP2, $hPen_Line)
_GDIPlus_GraphicsFillEllipse($hBuffer, $iX_Ellipse - $iSize_Ellipse / 2, $iY_Ellipse - $iSize_Ellipse / 2, $iSize_Ellipse, $iSize_Ellipse, $hBrush_Ellipse)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc ;==>_DrawFunc _Vector_NormVector($aV1)
[/autoit] [autoit][/autoit] [autoit]
$i_VLength = Sqrt($aV1[0] * $aV1[0] + $aV1[1] * $aV1[1])
$aV1[0] = $aV1[0] / $i_VLength
$aV1[1] = $aV1[1] / $i_VLengthReturn $aV1
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_Vector_NormVectorFunc _Vector_Create($aV_X, $aV_Y)
[/autoit] [autoit][/autoit] [autoit]
Local $aV[2]
$aV[0] = $aV_X
$aV[1] = $aV_YReturn $aV
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc _Exit()
[/autoit]
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_BrushDispose($hBrush_Ellipse)
_GDIPlus_PenDispose($hPen_Line)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit -
Ja so ähnlich habe ich das am Anfang auch gemacht... Allerdings war mir das bei größeren Bildern zu langsam ;). Ich werde sehen, ob ich das vielleicht noch schneller machen kann... Aber dein Test ist shcon mal eine gute Vorlage, danke :D.
-
Nein, "=" kann man ja schließlich auch zum Stringvergleich verwenden... Laut Hilfe ist der "=" Operator für Zahlen- und Stringvergleiche geeignet, während der "==" Operator nur für Stringvergleiche verwendet werden sollte. Allerdings berücksichtigt "==" die Groß- und Kleinschreibnung, was "=" nicht macht ;).
-
....Ich glaube ich sitze zu lange vor dem PC.... Mir ist gerade aufgefallen, dass im zurückgegebenen Array von _FileListToArray nur die Dateinamen und nicht der Pfad drinsteht :pinch: . Es müsste also so gehen...
Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Sound.au3>SoundSetWaveVolume(100)
[/autoit] [autoit][/autoit] [autoit]$titel = _FileListToArray(@ScriptDir&"\Music","*.mp3",1)
[/autoit] [autoit][/autoit] [autoit]$sound = _SoundOpen(@ScriptDir & "\Music\" & $titel[1])
[/autoit] [autoit][/autoit] [autoit]
_SoundPlay($sound, 0)While 1
[/autoit]
Sleep(1)
WEnd -
Dann liegt es nicht an der Funktion sondern daran, dass du keine .mp3 Datei im Verzeichnis @ScriptDir&"\Music" hast ;).
-
Dann ist das Problem vielleicht SoundSetWaveVolume, welches nicht auf jedem Betriebssystem funktioniert. Kommentiere diese Zeile mal aus um zu sehen ob es daran liegt.
-
Und wenn du ein wenig nachdenkst kommst du darauf, dass die Aut2Exe irgendwie mit deinem Programm auf den fremden PC muss.... Aber wie nur?.... Dafür gibt es dann die Forensuche die dir mit ein wenig Geduld auch Ergebnisse wie
[autoit]FileInstall
[/autoit], und BugFix's Lösung liefert.