Beiträge von FichteFoll
-
-
In dem Fall müsstest du mit der WinAPI bzw GDI arbeiten, um das Fenster (welches NICHT im Vordergrund oder ganz zu sehen ist) abbilden zu lassen und anschließend in ein Grafikelement (wie ich es auskommentiert hatte) auszugeben. Allerdings habe ich zu wenig Ahnung davon, um das zu verwirklichen, du müsstest als einen anderen fragen.
-
Definitiv nicht die beste Methode, aber es funktioniert:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <GDIPlus.au3>
#Include <Screencapture.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]#region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$hGUI_Main = GUICreate("Fenstervorschau", 495, 309, 610, 299, BitOR($WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS))
GUISetOnEvent($GUI_EVENT_CLOSE, "_OnEventClose")
GUISetOnEvent($GUI_EVENT_RESIZED, "_OnEventResized")
;~ $hGrph = GUICtrlCreateGraphic(24, 32, 441, 233)
$hPic = GUICtrlCreatePic("", 24, 32, 441, 233, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
GUICtrlSetResizing(-1, $GUI_DOCKHCENTER + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
$hbtn_Fwrd = GUICtrlCreateButton("Weiter", 392, 272, 75, 25, $WS_GROUP)
GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$hbtn_Back = GUICtrlCreateButton("Zurück", 24, 272, 75, 25, $WS_GROUP)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$hbtn_Activate = GUICtrlCreateButton("Aktivieren", 208, 272, 75, 25, $WS_GROUP)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$Label1 = GUICtrlCreateLabel("Fenstervorschau", 24, 8, 83, 17)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###GUICtrlSetOnEvent($hbtn_Fwrd, "_NextWindow")
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetOnEvent($hbtn_Back, "_PrevWindow")
GUICtrlSetOnEvent($hbtn_Activate, "_WinActivate")Global $ahWndAll = WinList(), $ahWnd[1]
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $ahWndAll[0][0]
If BitAND(WinGetState($ahWndAll[$i][1]), 2) And $ahWndAll[$i][0] <> "" And $ahWndAll[$i][0] <> "Start" And $ahWndAll[$i][0] <> "Program Manager" Then ; Nur sichtbare Fenster
ReDim $ahWnd[UBound($ahWnd) + 1]
$ahWnd[UBound($ahWnd) - 1] = $ahWndAll[$i][1]
EndIf
Next_ArrayDelete($ahWnd, 0)
[/autoit] [autoit][/autoit] [autoit]Global $index = 0, $max = UBound($ahWnd) - 1
[/autoit] [autoit][/autoit] [autoit]
If $max = 0 Then
GUICtrlSetState($hbtn_Fwrd, $GUI_DISABLE)
GUICtrlSetState($hbtn_Back, $GUI_DISABLE)
EndIf_UpdateGrph()
[/autoit] [autoit][/autoit] [autoit]While Sleep(50)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _OnEventClose()
[/autoit] [autoit][/autoit] [autoit]
FileDelete(@TempDir & "/Window.jpg")
Exit
EndFuncFunc _OnEventResized()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetImage($hPic, @TempDir & "/Window.jpg")
EndFuncFunc _WinActivate()
[/autoit] [autoit][/autoit] [autoit]
WinActivate($ahWnd[$index])
EndFuncFunc _NextWindow()
[/autoit] [autoit][/autoit] [autoit]
$index += 1
_UpdateGrph()
If $index > 0 Then GUICtrlSetState($hbtn_Back, $GUI_ENABLE)
If $index = $max Then GUICtrlSetState($hbtn_Fwrd, $GUI_DISABLE)
EndFunc ;==>_NextWindowFunc _PrevWindow()
[/autoit] [autoit][/autoit] [autoit]
$index -= 1
_UpdateGrph()
If $index < $max Then GUICtrlSetState($hbtn_Fwrd, $GUI_ENABLE)
If $index = 0 Then GUICtrlSetState($hbtn_Back, $GUI_DISABLE)
EndFunc ;==>_PrevWindowFunc _UpdateGrph()
[/autoit]
For $i = 0 To $max
WinSetTrans($ahWnd[$i], "", 00)
Next
WinSetTrans($ahWnd[$index], "", 255)
$hbmpWin = _ScreenCapture_CaptureWnd(@TempDir & "/Window.jpg", $ahWnd[$index])
For $i = 0 To $max
WinSetTrans($ahWnd[$i], "", 255)
Next
_OnEventResized()
EndFunc ;==>_UpdateGrphIn Windows 7 wird eine Miniaturansicht der Fenster bezüglich der Taskbartabs gespeichert, aber das wäre einen deut komplizierter das zu benutzen.
In meinem Beispiel sieht es scheiße aus, aber funktioniert immerhin. -
Es lag an der Reihenfolge, wie du es gemacht hast. Bei einem Klick auf $Button2 lässt du erst $Obj1 erscheinen und dann $Obj2 verschwinden. Das Problem dabei ist dann, wenn $Obj2 gar nicht sichtbar ist. Dann entsteht dieses weiße Rechteck. Wenn du auf den Browser klickst, kannst du ihn wieder sehen.
So funktioniert es:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>$Form1 = GUICreate("BLUB", 625, 465, 640, 280)
[/autoit] [autoit][/autoit] [autoit]
$Button1 = GUICtrlCreateButton("erster Browser", 136, 96, 113, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("zweiter Browser", 256, 96, 113, 25, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Nichts", 16, 96, 113, 25, $WS_GROUP)
$Obj1 = ObjCreate("Shell.Explorer.2")
$Obj1_ctrl = GUICtrlCreateObj($Obj1, 8, 128, 610, 292)
GUICtrlSetState(-1, $GUI_Hide)
$Obj2 = ObjCreate("Shell.Explorer.2")
$Obj2_ctrl = GUICtrlCreateObj($Obj2, 8, 128, 610, 292)
GUICtrlSetState(-1, $GUI_Hide)GUISetState() ;Show GUI
[/autoit] [autoit][/autoit] [autoit]$Obj1.navigate("http://www.autoitscript.com")
[/autoit] [autoit][/autoit] [autoit]
$Obj2.navigate("http://www.autoit.de")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitCase $Button1
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($Button1, $GUI_Disable)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Button2, $GUI_Enable)
GUICtrlSetState($Button3, $GUI_Enable)GUICtrlSetState($Obj2_ctrl, $GUI_Hide)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Obj1_ctrl, $GUI_SHOW)Case $Button2
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($Button1, $GUI_Enable)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Button2, $GUI_Disable)
GUICtrlSetState($Button3, $GUI_Enable)GUICtrlSetState($Obj1_ctrl, $GUI_Hide)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Obj2_ctrl, $GUI_SHOW)Case $Button3
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($Button1, $GUI_Enable)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Button2, $GUI_Enable)
GUICtrlSetState($Button3, $GUI_Disable)GUICtrlSetState($Obj1_ctrl, $GUI_Hide)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Obj2_ctrl, $GUI_Hide)EndSwitch
[/autoit]
WEnd -
tut mir Leid, dass ich mich in euer Fachgespräch einmische, aber zur Not kannst du eine 2. EXE benutzen, um das Mainscript zu entlasten.
Wenn ich den Download über ein anderes Script/andere exe laufen lasse, kann ich nicht/nur umständlich mit dem Mainthread kommunizieren. Also den Download abbrechen, Variablen überprüfen, auf Optionen Rücksicht nehmen, den Status anzeigen usw.
Ich mach es einfach mal wie in meinem letzten Post beschrieben und teste mal, ob es dann funktioniert.
-
Es handelt sich also um
Spoiler anzeigen
Code
Alles anzeigen<form action="http://localhost/send.php" method="post" id="send"> <DIV id=returnField> <SELECT name=return> <OPTION selected value=0>-</OPTION> <OPTION value=1>12:10:1</OPTION> <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> <OPTION value=5>5</OPTION> </SELECT> </DIV> </form>
?Theoretisch müsstest du es mal so probieren:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <IE.au3>$oForm = $oIE.document.getElementById("send") ; by ID
[/autoit] [autoit][/autoit] [autoit]
;~ $oForm = $oDocument.forms.item(1) ; get Form count 1$oSelect = $oForm.elements.item("return") ; "Select"-Item
[/autoit] [autoit][/autoit] [autoit]
$oSelect.options.item(2).selected = True ; Select item 2; ===================================
[/autoit] [autoit][/autoit] [autoit]_IEGetObjById($oIE, "send") ; by ID
[/autoit] [autoit][/autoit] [autoit]
;~ $oForm = _IEFormGetCollection($oIE, 1) ; get Form count 1$oSelect = _IEFormElementGetObjByName($oForm, "return") ; "Select"-Item
[/autoit]
_IEFormElementOptionSelect($oSelect, 2, 1, "byIndex") ; Select item 2
Habe einmal per UDF und einmal manuell aufgeschrieben^^ Ich kann atm nicht testen, ob es funktioniert, aber es sollte dir auf jeden Fall Anhaltspunkte geben. -
Funktioniert gut, danke.
Allerdings hast du in der Datei im Anhang
Code.40.*="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\Paste\paste.au3" "$(FilePath)" "$(CurrentSelection)"
anstattCodecommand.40.*="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\Paste\paste.au3" "$(FilePath)" "$(CurrentSelection)"
geschrieben -
Ich habe mal das Verhalten während des Downloads analysiert und ein paar Methoden ausprobiert.
Starten des Downloads mit AdlibRegister: Das Fenster reagiert nicht mehr auf die Maus, weil ich die Routine dafür auch in einer Adlib-Funktion gelagert habe, sodass diese auch während des Downloads ausgeführt wird. Da allerdings gewartet wird, bis ein Adlib-Callback abgeschlossen ist, wird diese Funktion nicht aufgerufen.
Benutzen von mehreren Threads via "CreateThread": Die Messagebox zur Überprüfung wird gestartet, aber bei Variablen crasht Autoit.
Starten des Downloads mit "_Timer_SetTimer" (wie ich es zuvor machte): Es wird nach x ms ein neuer Thread mit der Downloadfunktion gestartet, wodurch alles normal funktioniert.
Ich kann mir nur einfach nicht erklären, wieso das unter Vista und Xp anders funktioniert. Werden dort Timer-Events anders gehandhabt und zB kein neuer Thread gestartet? Das erklärt dann allerdings nicht, wieso der Prozess komplett einfriert und die Progressbars ebenfalls nicht aktualisiert werden.
Auf Xp könnte man vielleicht darauf zurückschließen, dass das Timerevent verwaltet und die Funktion gestartet wird. Anschließend wird nachwievor "_Adlib" aufgerufen, aber es wird auf keine anderen Events mehr geachtet bzw diese alle in die Schleife eingehängt, weil ja das Timerevent noch nicht abgeschlossen ist.
Trotzdem ist es bescheuert... Achja, ich vermute demnach übrigens, dass _Timer_SetTimer schuld ist. Alternative dazu wäre, dass ich die Funktion (Wie ganz zuvor, bevor ich mehrere Downloads parallel hatte) über ein Flag in der globalen While-Schleife aufrufen lasse. So wäre es zwar umständlicher, aber was solls.
-
Hallo FichteFoll,
kann in deinem stark gekürztem Skript weder "InetGet" noch "Addlib" finden. Ich tendiere aber dazu das "_InetGetSource" (finde ich zwar auch nicht) die schuldige Func ist. Solange du nicht wenigstens einen Link zum Analyse-Ergenis der Überpüfung des Files bei VirusTotal.com einstellst, wird es kaum jemanden geben der es testet. Bei meinen [Beispiel] NeMP3-P (MP3-Player) Version 0.8.4.7 habe ich es so gemacht, dort habe ich auch dass Problem das am Anfang der Update-Funktion die GUI nicht reagiert,
Besser wäre natürlich der Source.Mir ist aufgefallen dass du dich mit "fremden Federn schmückst" soll hsisen du benutzt ffmpeg zur Konvertierung des downgeloadeten Files erwähnst aber in keiner Weise, dass du ein Fremdprogramm benutzt. Dies ist eindeutig ein Verstoss gegen die GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 die dem Originaldownload von ffmpeg beiliegt,
Du hast recht, den Teil mit InetGet hatte ich vergessen, habe es jetzt korrigiert. AdlibRegister kommt jedoch am Anfang vor (bei den anderen OnEvent-Registrierungsfunktionen) und _InetGetSource habe ich gar nicht benutzt, sondern die Schritte manuell gemacht. Daran kann es aber irgendwie nicht liegen, weil das viel zu schnell geht.
Virustotal Link habe ich oben eingefügt, danke.
In der ReadMe.txt habe ich vermerkt, dass ich ffmpeg zum Konvertieren verwende, aber im "About"-Tab noch nicht. Ich muss sowieso erst noch gucken, ob ich das YT-Logo überhaupt verwenden darf.
-
Es geht um folgendes Programm (ich hoffe mal, ich darf einfach den Link zu den Dateien posten):
http://yt-downloader.ath.cx/download/files/V2.5.0.100811/
Virustotal: http://www.virustotal.com/file-scan/repo…79bf-1282607482Wenn Links eingefügt sind und man auf "Download All" klickt, wird der Download gestartet.
Auf Vista geschiet dann folgendes: Gar nichts. Das Fenster slidet nicht mehr nach rechts (was es tun sollte, sobald die Maus nicht darüber ist) und das Traymenü erscheint auch nicht mehr. Nach mehrfachen Klicks kommt das Bekannte "YT-Downloader blabla reagiert nicht mehr.". Wenn man einige zeit wartet, ist der Download jedoch dennoch fertig und alles ist wieder normal, wie es sein sollte.Auf Xp aktualisiert er das GUI immerhin so lange, bis es der Mauszeiger verlässt. Beim anschließenden Reinsliden sieht man nur die ProgressBar(s) und evtl. einen Button. Es passiert jedoch nichts, wenn man diesen klickt. Ob das Traymenü reagiert, weiß ich gerade allerdings nicht.
Auf 7 dagegen funktioniert alles genau so, wie es sein sollte.
Zusätzlich dazu: http://yt-downloader.ath.cx/mantisbt/view.php?id=2
Ich habe mal die wichtigen Teile aus dem Source rausholt, weil ich den gesamten Code nicht gerne verteilen würde und es außerdem 1800 Zeilen wären.
Spoiler anzeigen
[autoit][/autoit] [autoit][/autoit] [autoit]; viel Init-stuff
[/autoit] [autoit][/autoit] [autoit]$hGUI_Main = GUICreate("YT-Downloader", 494, 129, -1, -1, BitOR($WS_DLGFRAME, $WS_POPUP))
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xFFFFFF)
$pGUI_Main = Number($hGUI_Main)$hLbl_Status = GUICtrlCreateLabel("", 0, 8, 166, 16, $SS_CENTER)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
GUICtrlCreatePic(@ScriptDir & "\Data\YT.jpg", 8, 40, 148, 57, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$hBtn_Download = GUICtrlCreateButton("Download All", 336, 96, 80, 25, $WS_GROUP)
$hBtn_Options = GUICtrlCreateButton("Options", 441, 100, 44, 21, $WS_GROUP)
$hLbl_Video = GUICtrlCreateLabel("YouTube Videos:", 168, 8, 148, 15, $SS_CENTER)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$hList_Downloads = GUICtrlCreateList("", 168, 24, 148, 97, BitOR($LBS_SORT, $LBS_STANDARD, $WS_VSCROLL, $WS_BORDER))
GUICtrlSetData(-1, "")
$hCB_HD = GUICtrlCreateCheckbox("HD", 336, 8, 41, 17)
$hCB_FHD = GUICtrlCreateCheckbox("Full-HD", 382, 8, 54, 17, BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_LEFT, $WS_TABSTOP))
$hCB_Mp3 = GUICtrlCreateCheckbox("Mp3", 444, 8, 41, 17, BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_RIGHT, $WS_TABSTOP))
$hPrg_Current = GUICtrlCreateProgress(336, 26, 148, 17)
$hLabel3 = GUICtrlCreateLabel("Total:", 424, 48, 27, 17)
$hLbl_DlCur = GUICtrlCreateLabel("0%", 386, 48, 30, 17, $SS_RIGHT)
$hLbl_DlTot = GUICtrlCreateLabel("0%", 454, 48, 30, 17, $SS_RIGHT)
$hLbl_Dl = GUICtrlCreateLabel("Waiting", 336, 48, 49, 17, $SS_RIGHT)
$hPrg_Total = GUICtrlCreateProgress(336, 66, 148, 17)WinSetTrans($hGUI_Main, '', 0) ; Invisible
[/autoit] [autoit][/autoit] [autoit]
_SlideWin($hGUI_Main, "in", "right") ; Set position
$bSlidedIn = True
GUISetState(@SW_SHOW, $hGUI_Main)
For $iStep = 000 To 255 Step 12 ; Fade in
WinSetTrans($hGUI_Main, '', $iStep)
Sleep(10)
Next; stuff
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetOnEvent($hBtn_Download, "_OnClick_Download")
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetOnEvent($hBtn_Options, "_Options")
; ===========================
GUISetOnEvent($GUI_EVENT_RESTORE, "_Restore", $hGUI_Main)
GUISetOnEvent($GUI_EVENT_CLOSE, "_OnEventClose_Main", $hGUI_Main)
; ===========================
AdlibRegister("_Adlib", 100)While Sleep(200)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _Adlib() ; Do every 100 ms !
[/autoit] [autoit][/autoit] [autoit]
; Slide
Switch _WinIsHovered($hGUI_Main, $hDll_User32)
Case 1
If ($bNoSlide = False) And ($bSlidedIn = False) Then
_SlideWin($hGUI_Main, "in", "right")
$bSlidedIn = True
EndIf
Case 0
If $bSlidedIn And ($bNoSlide = False) Then
_SlideWin($hGUI_Main, "out", "right")
$bSlidedIn = False
EndIf
EndSwitch
EndFuncFunc _OnEventClose_Main()
[/autoit] [autoit][/autoit] [autoit]
Exit -3
EndFunc ;==>_OnEventClose_MainFunc _OnClick_Download()
[/autoit] [autoit][/autoit] [autoit]
If $bDownloading Then $bDownloading = False
If _GUICtrlListBox_GetCount($hList_Downloads) Then _Timer_SetTimer($hGUI_Main, 100, "_InitializeDownload")
EndFunc ;==>_OnClick_DownloadFunc _Options()
[/autoit] [autoit][/autoit] [autoit]
_LogLoad()
GUISetState(@SW_SHOW, $hGUI_Option) ; Hab ich mir mal gespart, wäre überflüssig gewesen
WinActivate($hGUI_Option)
EndFunc ;==>_OptionsFunc _Restore()
[/autoit] [autoit][/autoit] [autoit]
If Not $bSlidedIn And Not $bNoSlide Then ; If Not ($bSlidedIn Or $bNoSlide)
_SlideWin($hGUI_Main, "in", "right")
$bSlidedIn = True
Sleep(700)
EndIf
EndFunc ;==>_Restore; jetzt gehts los
[/autoit] [autoit][/autoit] [autoit]
Func _InitializeDownload($hWnd, $Msg, $iIDTimer, $dwTime) ; Timer params
_Timer_KillTimer($hGUI_Main, $iIDTimer) ; $iTimerID3$bDownloading = True
[/autoit] [autoit][/autoit] [autoit]Dim $sFinished = "", $iDownloaded = 0, $bError = False, $iIcon = 1
[/autoit] [autoit][/autoit] [autoit]While _GUICtrlListBox_GetCount($hList_Downloads)
[/autoit] [autoit][/autoit] [autoit]
; stuff$sText = _GUICtrlListBox_GetText($hList_Downloads, 0)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($hLbl_Video, $sText)
_GUICtrlListBox_DeleteString($hList_Downloads, 0)
$sYtURL = Eval(StringRegExpReplace($sText, "[\[\]]", ''))
If @error Then
$bError = True
_LogWrite("Error - Download", "Could not allocate URl", $sText)
Else
_Download($sYtURL)
EndIfIf $bDownloading = False Then ; If canceled
[/autoit] [autoit][/autoit] [autoit]
; stuff
ExitLoop
EndIfIf $bError = True Then ; If failed
[/autoit] [autoit][/autoit] [autoit]
; stuff
ExitLoop
EndIf
WEnd$bDownloading = False
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_InitializeDownload
[/autoit] [autoit][/autoit] [autoit]Func _Download($sURL)
[/autoit] [autoit][/autoit] [autoit]
; stuff
$iDlSize = InetGetSize($sDownloadLink)
If Not $iDlSize Then $bError = True
; stuff;Download
[/autoit] [autoit][/autoit] [autoit]
$hDL = InetGet($sDownloadLink, $sFileName, 0, 1)Local $Download_percent, $iTotal, $finished, $downloading, $Total_percent
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
$iSize2 = InetGetInfo($hDL, 0)
$Download_percent = Round((100 * $iSize2) / $iDlSize, 1)
GUICtrlSetData($hPrg_Current, Floor($Download_percent))
GUICtrlSetData($hLbl_DlCur, $Download_percent & "%") ; Set GUI
GUICtrlSetData($hLbl_Dl, "Dl:" & $sFMT)$iTotal = $iDownloaded + _GUICtrlListBox_GetCount($hList_Downloads) + 1 ; Currently downloading but deleted in List
[/autoit] [autoit][/autoit] [autoit]
$finished = ($iDownloaded * 100 / $iTotal)
$downloading = $Download_percent / $iTotalIf GUICtrlRead($hCB_Mp3) = 1 Then $downloading = $downloading * (3 / 4) ; Needs to convert
[/autoit] [autoit][/autoit] [autoit]$Total_percent = $finished + $downloading
[/autoit] [autoit][/autoit] [autoit]; Taskbar-Zeugs entfernt, würde eh nur verwirren
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($hPrg_Total, Floor($Total_percent)) ; Set GUI
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($hLbl_DlTot, Round($Total_percent, 1) & "%")
Sleep(200)
Until ($iSize2 >= $iDlSize) Or $bDownloading = False; stuff
[/autoit]
EndFunc ;==>_Download
Kann noch improvisiert werden, aber atm würde ich gerne das Problem lösen. Ich hab einige Dinge ausgelassen, die aber an sich nichts mit dem Download zu tun haben sondern nur drum herum sind. Variablendeklaration hab ich weggelassen, die globalen Variablen sollten sowieso offensichtlich sein.Meine Vermutung geht in Richtung InetGet oder AdlibRegister, was evtl verschiedene Verhaltensweisen auf Vista, Xp und 7 hervorrufen könnte, aber ich habe keinerlei Anhaltspunkte.
Ich habe bereits auf autoitsoure danach gesucht, aber es scheint niemand, dasselbe Problem zu haben.
Wenn jemand Xp oder Vista benutzt, dann lädt er das Programm am besten selbst runter und spielt damit was rum.
Es wäre schön, wenn jemand von euch ne Idee dazu hätte
Bei Unklarheiten natürlich fragen. -
Möchtest du abfragen, welcher Browser der Standardbrowser ist, oder möchstest du überprüfen, ob ein bestimmter Browser installiert ist?
-
Ich bin mir nicht sicher, ob ich es verstanden habe, aber ich würde es so machen
[autoit]
[/autoit][autoit][/autoit][autoit]
Func _StartUploadDat()
Run("upload.bat", @WindowsDir)
EndFuncAdlibRegister("_StartUploadDat", 5000)
[/autoit]Dann brauchst du auch die "startbat.txt" nicht mehr.
Übrigens: Wenn du eine Datei umbenennst heißt das nicht automatisch, dass die Datei dann auch funktioniert.
Eine von ".txt" zu ".exe" umbenannte Datei wird nicht starten. -
Achso^^ jetzt verstehe ich es. Dann solltest du aber trotzdem den Aufruf ohne optionalen Parameter machen.
[autoit]Func _CheckIfAutoItExe($strFunc_Exe)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit] -
Gibt auch andere alternativen:
[autoit]If @Compiled = 1 Then MsgBox(0, "Test", "Das Skript ist kompiliert")
[/autoit][autoit]If @AutoItExe = @ScriptName Then MsgBox(0, "Test", "Das Skript ist kompiliert")
[/autoit] -
Ist wirklich ganz gut gemacht das Spiel^^
Das Spiel könnte allerdings durchaus ein bisschen schneller sein, damit mehr Action rein kommt.
Und (falls es noch nicht genannt wurde) die weißen Plattformen verschwinden nicht, wenn man auf sie springt. Man fällt zwar danach durch sie durch, aber sie sind noch zu sehen.
-
Raupi : Kaum fang ich damit an, hat es schon einer fertig gemacht...
Hab den Code auch mal deutlich verkleinert und einige kleine Korrekturen vorgenommen sowie einige Sachen hinzugefügt.
Spoiler anzeigen
[autoit]Global $Buchstabe = "AB", $Zahl = 1, $StadtName = "", $FlussName = "", $LandName = ""
[/autoit] [autoit][/autoit] [autoit]
Global $Runde = "1"
Global $Punkte = ""#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$StadtLandFluss_1 = GUICreate("Stadt, Land, Fluss", 478, 169, -1, -1)
$Start = GUICtrlCreateButton("Starte Spiel", 0, 0, 151, 31, $WS_GROUP)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$ListView1 = GUICtrlCreateListView("Stadt|Land|Fluss|Punkte", 172, 0, 304, 166)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 83)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 83)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 83)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
$Label1 = GUICtrlCreateLabel("Buchstabe:", 4, 30, 116, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Stadt = GUICtrlCreateButton("Stadt", 2, 54, 75, 25, $WS_GROUP)
$Land = GUICtrlCreateButton("Land", 2, 78, 75, 25, $WS_GROUP)
$Fluss = GUICtrlCreateButton("Fluss", 2, 102, 75, 25, $WS_GROUP)
$Punkte = GUICtrlCreateButton("Punkte eintragen", 76, 142, 95, 25, $WS_GROUP)
$Credits = GUICtrlCreateButton("Credits", 2, 142, 75, 25, $WS_GROUP)
GUICtrlSetState ($Punkte, $GUI_DISABLE)
GUICtrlSetState ($Land, $GUI_DISABLE)
GUICtrlSetState ($Fluss, $GUI_DISABLE)
GUICtrlSetState ($Stadt, $GUI_DISABLE)
GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
_Main()
WEndFunc _Main()
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitCase $Start
[/autoit] [autoit][/autoit] [autoit]
$Zahl = Random(1, 26, 1) + 65
GUICtrlSetState ($Punkte, $GUI_ENABLE)
GUICtrlSetState ($Land, $GUI_ENABLE)
GUICtrlSetState ($Fluss, $GUI_ENABLE)
GUICtrlSetState ($Stadt, $GUI_ENABLE)
GUICtrlSetState ($Start, $GUI_DISABLE)$Buchstabe = Chr($Zahl)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($Label1, "Buchstabe: "&$Buchstabe)Global $LVItem = GUICtrlCreateListViewItem ("", $ListView1)
[/autoit] [autoit][/autoit] [autoit]Case $Stadt
[/autoit] [autoit][/autoit] [autoit]
If $Buchstabe = "AB" Then
MsgBox (0, "Error", "Du hast das Spiel noch nicht gestartet!")
Return
EndIf$StadtName = InputBox ("Stadt", "Den Namen der Stadt", $Buchstabe)
[/autoit] [autoit][/autoit] [autoit]
If StringUpper(StringLeft($StadtName, 1) ) <> $Buchstabe Then ReturnGuiCtrlSetData($LVItem,$StadtName&"|"&$LandName&"|"&$FlussName)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Stadt, $GUI_DISABLE)Case $Land
[/autoit] [autoit][/autoit] [autoit]
If $Buchstabe = "AB" Then
MsgBox (0, "Error", "Du hast das Spiel noch nicht gestartet!")
Return
EndIf$LandName = InputBox ("Stadt", "Den Namen des Landes", $Buchstabe)
[/autoit] [autoit][/autoit] [autoit]
If StringUpper(StringLeft($LandName, 1) ) <> $Buchstabe Then ReturnGuiCtrlSetData($LVItem,$StadtName&"|"&$LandName&"|"&$FlussName)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Land, $GUI_DISABLE)Case $Fluss
[/autoit] [autoit][/autoit] [autoit]
If $Buchstabe = "AB" Then
MsgBox (0, "Error", "Du hast das Spiel noch nicht gestartet!")
Return
EndIf$FlussName = InputBox ("Stadt", "Den Namen des Flusses", $Buchstabe)
[/autoit] [autoit][/autoit] [autoit]
If StringUpper(StringLeft($FlussName, 1) ) <> $Buchstabe Then ReturnGuiCtrlSetData($LVItem,$StadtName&"|"&$LandName&"|"&$FlussName)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Fluss, $GUI_DISABLE)Case $Punkte
[/autoit] [autoit][/autoit] [autoit]
Local $Punkte = InputBox ("Wieviele Punkte?", "Wie viele Punkte hast du für die Stadt ?", 10)
$Punkte += InputBox ("Wieviele Punkte?", "Wie viele Punkte hast du für das Land ?", 10)
$Punkte += InputBox ("Wieviele Punkte?", "Wie viele Punkte hast du für den Fluss ?", 10)GuiCtrlSetData($LVItem,$StadtName&"|"&$LandName&"|"&$FlussName&"|"&$Punkte)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState ($Punkte, $GUI_DISABLE)
GUICtrlSetState ($Start, $GUI_ENABLE)
GUICtrlSetState ($Land, $GUI_DISABLE)
GUICtrlSetState ($Fluss, $GUI_DISABLE)
GUICtrlSetState ($Stadt, $GUI_DISABLE)
GUICtrlSetData ($Start, "Starte neue Runde")Case $Credits
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MsgBox (0, "Credits", "Version 1.0 made by EliteMattthias"&@CRLF&"Special Thanks:"&@CRLF&"AutoBert (Für Hilfe)"&@CRLF&@CRLF&"(C) EliteMattthias"&@CRLF&"Alle Rechte sind vorbehalten!"&@CRLF&@CRLF&@CRLF&@CRLF&"Update coming next Time...")EndSwitch
[/autoit]
EndFunc€dit: Also das mit Online könnte auch relativ schnell gehen, du musst dir nur ein Muster dafür ausdenken. Ich empfehle dir dich diesbezüglich mal mit TCP zu beschäftigen, also mit den Funktionen.
-
Du könntest vielleicht "Opt('ExpandVarStrings', 1)" benutzen, sodass du stattdessen einfach "@SW_SHOW@" schreiben kannst...
-
Wenn ich im Music Manager einen Song hinzufüge und in anschließend abspielen will kommt
CodeLine -1: Error: Array variable has incorrect number of subscripts or subscript dimension range exeeded.
Angesichts der Tatsache, dass in der Music.txt kein Pfad gespeichert wird, denke ich dass du vergessen hast diesen in diesen Array zu schreiben o.ä.
Und "Favoriten" schreibt man so.
Ansonsten funzt das natürlich nice
Ich frage mich nur, wie du die Onlinestrams abspielst. -
[autoit]
_SoundPlay($sound)
[/autoit][autoit][/autoit][autoit]
ConsoleWrite("Status nach _SoundPlay: " & _SoundStatus($sound) & @CRLF)Sleep(1000)
[/autoit][autoit][/autoit][autoit]_SoundPause($sound)
[/autoit][autoit][/autoit][autoit]
ConsoleWrite("Status nach _SoundPause: " & _SoundStatus($sound) & CRLF)Sleep(1000)
[/autoit]
_SoundResume($sound)Beim 2. @CRLF fehlt das @
-
[autoit]
_ExcelBookClose($oExcel)
[/autoit][autoit][/autoit][autoit]
FileCopy(@ScriptDir & "\Skripte\Start\Liste\ExcelListen\Daten.xls", @ScriptDir & "\Skripte\Start\", 9)
ShellExecuteWait("start.bat","",@ScriptDir & "\Skripte\Start","")
$readts4 = FileOpen(@ScriptDir & "\Skripte\Start\Liste\Listen\ts3.log", 0)
$readts3 = FileRead($readts4)
FileClose($readts4)
copie()
EndFunc ;==>allgemeinFunc move1()
[/autoit][autoit][/autoit][autoit]
MsgBox(0,"info", $sdv & "Sicherungen\sicherung\" & $readts3)
FileMove(@ScriptDir & "\Skripte\Start\algemein.zip", $sdv & "Sicherungen\allgemein\" & $readts3, 9)
FileDelete(@ScriptDir & "\Skripte\Start\Daten.xls")
EndFunc ;==>move1Func move2()
[/autoit]
MsgBox(0,"info", $sdv & "Sicherungen\sicherung\" & $readts3)
FileCopy(@ScriptDir & "\Skripte\Start\algemein.zip", ($sdv & "Sicherungen\allgemein\" & $readts3), 9)
FileDelete(@ScriptDir & "\Skripte\Start\algemein.zip")
FileDelete(@ScriptDir & "\Skripte\Start\Daten.xls")
EndFunc ;==>move2Wenn du FileMove() Benutzt, musst du die Datei nicht mehr löschen.
Kannst du die Datei denn überhaupt löschen? Dann wäre wohl die 2. Variante am besten, da diese (fast) IMMER kopiert und danach erst löscht.