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-1282607482
Wenn 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
; viel Init-stuff
[/autoit] [autoit][/autoit] [autoit]$hGUI_Main = GUICreate("YT-Downloader", 494, 129, -1, -1, BitOR($WS_DLGFRAME, $WS_POPUP))
GUISetBkColor(0xFFFFFF)
$pGUI_Main = Number($hGUI_Main)
$hLbl_Status = GUICtrlCreateLabel("", 0, 8, 166, 16, $SS_CENTER)
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
_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")
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)
WEnd
Func _Adlib() ; Do every 100 ms !
; 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
EndFunc
Func _OnEventClose_Main()
Exit -3
EndFunc ;==>_OnEventClose_Main
Func _OnClick_Download()
If $bDownloading Then $bDownloading = False
If _GUICtrlListBox_GetCount($hList_Downloads) Then _Timer_SetTimer($hGUI_Main, 100, "_InitializeDownload")
EndFunc ;==>_OnClick_Download
Func _Options()
_LogLoad()
GUISetState(@SW_SHOW, $hGUI_Option) ; Hab ich mir mal gespart, wäre überflüssig gewesen
WinActivate($hGUI_Option)
EndFunc ;==>_Options
Func _Restore()
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
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)
; stuff
$sText = _GUICtrlListBox_GetText($hList_Downloads, 0)
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)
EndIf
If $bDownloading = False Then ; If canceled
; stuff
ExitLoop
EndIf
If $bError = True Then ; If failed
; stuff
ExitLoop
EndIf
WEnd
$bDownloading = False
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_InitializeDownload
[/autoit] [autoit][/autoit] [autoit]Func _Download($sURL)
; stuff
$iDlSize = InetGetSize($sDownloadLink)
If Not $iDlSize Then $bError = True
; stuff
;Download
$hDL = InetGet($sDownloadLink, $sFileName, 0, 1)
Local $Download_percent, $iTotal, $finished, $downloading, $Total_percent
[/autoit] [autoit][/autoit] [autoit]Do
$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
$finished = ($iDownloaded * 100 / $iTotal)
$downloading = $Download_percent / $iTotal
If 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
GUICtrlSetData($hLbl_DlTot, Round($Total_percent, 1) & "%")
Sleep(200)
Until ($iSize2 >= $iDlSize) Or $bDownloading = False
; stuff
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.