Um welches Programm handelt es sich denn? Bei einigen Spielen ist es leider so gut wie unmöglich ein Fenster davorzusetzen (zumindest mit AutoIt).
Beiträge von name22
-
-
Mit dieser UDF kann man ein Video in einer GUI abspielen lassen. Dafür wird die FFMPEG.exe genutzt, welche sich auf dem PC des Benutzers befinden muss.
Sobald die entsprechende Funktion aufgerufen wird, werden mithilfe der FFMPEG.exe alle Einzelbilder des Videos extrahiert und temporär abgespeichert.
Danach werden alle Bilder in den Arbeitsspeicher geladen. Als Nächstes wird eine ChildGUI erzeugt in der das Video abgespielt werden kann.
Sobald das abgeschlossen wurde kann das Video abgespielt werden.
Da alle Einzelbilder/Frames des Videos später im Arbeitsspeicher landen, sollte man sich auf kleine Videos beschränken ;).Die Vorteile des Ganzen sind, dass man mit geringen GDI+ Kenntnissen und ein paar Zeilen Code die Einzelbilder Des Videos vor dem abspielen bearbeiten kann (Wasserzeichen o.Ä.). Außerdem kann man dank der FFMPEG.exe so ziemlich alle gängigen Videoformate und Codecs verwenden.
Die Nachteile sind, der große Speicherverbrauch und die Dauer des Ladeprozesses.Die UDF und ein kleines Beispiel befinden sich im Anhang. Die FFMPEG.exe könnt ihr hier runterladen (zu groß für einen Dateianhang).
-
Nein, das geht nicht. Du kannst stattdessen ja ein Array verwenden.
-
@progandy Ich arbeite lieber direkt mit TCP weil ich dann genau weiß was passiert (ich hab das am Anfang so gemacht um den Umgang mit HTTP zu lernen).

Ansonsten ist progandys Script natürlich einfacher zu verstehen und vermutlich auch geringfügig schneller (wobei das eh von der Internetverbindung abhängt).
-
Zitat
Aber das sieht sehr kompliziert aus

Das ist eigentlich gar nicht so schwer. Mein Script macht im grunde nur das, was normalerweise der Firefox oder IE macht, nur stark vereinfacht.
Wenn man sich ein bisschen mit HTTP auskennt, dann ist das schon wesentlich verständlicher ^^. -
So. Ich hoffe euch gefällt mein Stooorage.com Downloader.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
; - Author: name22 (http://www.autoit.de)$sInputURL = InputBox("Downloader", "Page URL")
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(16, "Error", "Invalid URL")TCPStartup()
[/autoit] [autoit][/autoit] [autoit]$sIP = TCPNameToIP("stooorage.com")
[/autoit] [autoit][/autoit] [autoit]$iSocket = TCPConnect($sIP, 80)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(16, "Error", "Unable to connect to Server")$sRequest = 'GET ' & $sInputURL & ' HTTP/1.1' & @CRLF & _
[/autoit] [autoit][/autoit] [autoit]
'Host: stooorage.com:80' & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)' & @CRLF & _
'Connection: keep-alive' & @CRLF & @CRLFTCPSend($iSocket, $sRequest)
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
$sHTTP_Header = TCPRecv($iSocket, 1)
Until $sHTTP_Header <> ""
Do
$sHTTP_Header &= TCPRecv($iSocket, 1)
Until StringRight($sHTTP_Header, 4) = @CRLF & @CRLF$sHTTP_Content = ""
[/autoit] [autoit][/autoit] [autoit]
Do
$sHTTP_Content &= TCPRecv($iSocket, 1)
Until StringRight($sHTTP_Content, 7) = "</html>"$aPictureURL = StringRegExp($sHTTP_Content, '<img src="([^"<>]+?)" alt="', 1)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(16, "Error", "Could not find Picture URL.")$aURLSplit = StringRegExp($aPictureURL[0], 'http://(.+?)(/.+)', 1)
[/autoit] [autoit][/autoit] [autoit]$sIP = TCPNameToIP($aURLSplit[0])
[/autoit] [autoit][/autoit] [autoit]$iSocket = TCPConnect($sIP, 80)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(16, "Error", "Unable to connect to Server")$sRequest = 'GET ' & $aURLSplit[1] & ' HTTP/1.1' & @CRLF & _
[/autoit] [autoit][/autoit] [autoit]
'Host: ' & $aURLSplit[0] & ':80' & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)' & @CRLF & _
'Referer: ' & $sInputURL & @CRLF & _
'Connection: keep-alive' & @CRLF & @CRLFTCPSend($iSocket, $sRequest)
[/autoit] [autoit][/autoit] [autoit]$sHTTP_Header = ""
[/autoit] [autoit][/autoit] [autoit]
Do
$sHTTP_Header = TCPRecv($iSocket, 1)
Until $sHTTP_Header <> ""
Do
$sHTTP_Header &= TCPRecv($iSocket, 1)
Until StringRight($sHTTP_Header, 4) = @CRLF & @CRLFConsoleWrite($sHTTP_Header)
[/autoit] [autoit][/autoit] [autoit]$aContentLength = StringRegExp($sHTTP_Header, 'Content-Length: (\d+)', 1)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(16, "Error", "FileSize Error.")$bContent = "0x"
[/autoit] [autoit][/autoit] [autoit]
Do
$bContent &= StringTrimLeft(TCPRecv($iSocket, 1024, 1), 2)
Until BinaryLen($bContent) = $aContentLength[0]$iFile = FileOpen(@ScriptDir & "\Download.jpg", 18)
[/autoit] [autoit][/autoit] [autoit]
FileWrite($iFile, $bContent)
FileClose($iFile)TCPCloseSocket($iSocket)
[/autoit]
TCPShutdown() -
Ich würde an deiner Stelle dann mit Arrays arbeiten... Das macht das ganze wesentlich übersichtlicher.
-
Zitat
Also ich bekomme das Bild sofort, Rechtsklick - Grafik anzeigen - auf neue Grafik Rechtsklick - Grafik speichern unter; wo liegt jetzt dein Problm ?!?
Das Problem liegt darin, dass InetGet Cookies nicht unterstützt und logischerweise auch keinen Referer hat. Deshalb war ja mein Vorschlag, das entweder mit der IE.au3 zu lösen (siehe PokerFaces Script) oder mit TCP und HTTP zu arbeiten. Beim Zweiten wäre das kein Problem, da Cookies, Referer, User-Agent etc. ganz leicht manipuliert werden können ;). -
Nachdem ich den Werbeblocker aus, die Cookies ein und den Referer eingeschaltet habe funktioniert es :pinch: ... Der Imagehoster ist meiner Meinung nach der letzte Dreck und ich würde niemals einen Hoster verwenden bei dem ü18 Werbung angezeigt wird
. -
Das liegt daran, dass die Controls die nach dem zweiten Dummycontrol erzeugt werden eine höhere ControlID als dieses haben, und somit nicht mehr gespeichert werden (die For Schleife zählt ja nur bis zur ControlID des zweiten Dummys ;)). Du kannst die Dummys auch weglassen, ich habe die nur eingebaut, damit mann einfach beeinflussen kann ab wann und bis wohin die Positionen der Controls gespeichert werden.
-
Bin ich jetzt doof? :pinch: Hast du den Referer aktiviert?
-
Ich nehme an, das liegt daran, dass ich Firefox verwende... Benutzt du IE? Ich versuch es mal mit einem gefälschten User-Agent.
-
Zitat
genau machst? Du splittest den String, die Koordinate, ja, aber wofür genau?
Damit ich die X und Y Komponente habe?
Oder wo soll ich denn bitte 300:400 als Koordinaten angeben? Bei X oder bei Y? 
-
Ich hab mir die Kommunikation zwischen Server und Client mal angeschaut, und sobald ich versuche das Bild zu öffnen (mit der direkten URL), wird einfach nur ein 301 (moved permanently) zurückgegeben und man wird auf die ursprüngliche Seite umgeleitet.
-
Zitat
Wenn du dir den Quelltext anschaust, findest du den direkten Link zu dem Foto und damit kannst du es sofort runterladen!!
Nein, eben nicht. -
Man könnte auch mit TCP und HTTP arbeiten. Ich kenn mich damit zwar aus, aber da ich bei deinem tollen Hoster noch nicht mal das Bild sehe egal ob ich Cookies akzeptiert oder den Werbeblocker ausgeschaltet habe.
PS: Den Werbeblocker auf dieser Seite auszuschalten, würde ich minderjährigen nicht empfehlen :pinch: ... -
Du vergisst, dass der Schlüssel in dieser Ini nur die ControlID des jeweiligen Controls darstellt. Du musst die Werte der Schlüssel mit StringSplit bearbeiten um den X und Y Wert zu bekommen.
Du könntest es ja z.B. so machen:Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Misc.au3>;- Author: name22 (http://www.autoit.de)
[/autoit] [autoit][/autoit] [autoit]$hWnd = GUICreate("Drag/Drop Controls", 400, 400)
[/autoit] [autoit][/autoit] [autoit]
$cDummy_Start = GUICtrlCreateDummy()
$cButton = GUICtrlCreateButton("Button", 50, 50, 60, 25)
$cLabel = GUICtrlCreateLabel("Label", 100, 200)
$cEdit = GUICtrlCreateEdit("Edit", 200, 50, 180, 100)
$cDummy_End = GUICtrlCreateDummy()
Switch FileExists(@ScriptDir & "\ControlPos.ini")
Case True
$aSection = IniReadSection(@ScriptDir & "\ControlPos.ini", "Controls")
If @error Then ContinueCase
For $i = 1 To $aSection[0][0]
$aPos = StringSplit($aSection[$i][1], ":", 2)
GUICtrlSetPos($aSection[$i][0], $aPos[0], $aPos[1])
Next
EndSwitch
GUISetState()$vUser32Dll = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
For $i = $cDummy_Start + 1 To $cDummy_End - 1
$aPos = ControlGetPos($hWnd, "", $i)
IniWrite("ControlPos.ini", "Controls", $i, $aPos[0] & ":" & $aPos[1])
Next
DllClose($vUser32Dll)
Exit
Case $GUI_EVENT_PRIMARYDOWN
$aMousePos = GUIGetCursorInfo($hWnd)
If $aMousePos[4] Then
$iControl = $aMousePos[4]
$aPos = ControlGetPos($hWnd, "", $iControl)
$iDist_X = $aMousePos[0] - $aPos[0]
$iDist_Y = $aMousePos[1] - $aPos[1]
While _IsPressed("01", $vUser32Dll)
$aMousePos = GUIGetCursorInfo($hWnd)
ControlMove($hWnd, "", $iControl, $aMousePos[0] - $iDist_X, $aMousePos[1] - $iDist_Y)
Sleep(10)
WEnd
EndIf
EndSwitch
WEnd -
Cool. Stargate :D.
-
Wieso schreibst du die Positionen nicht einfach manuell ins Script?

-
Zitat
Achso, ich haben den sarkastischen Unterton nicht mitbekommen

Passiert mir auch manchmal...
Das kann bei Lehrern und anderen "Autoritätspersonen" allerdings problematisch werden ^^. "Redet von mir aus ruhig weiter, ist ja nicht so als ob ihr den Unterricht stört" - "Na dann..."