Wenn es sich um 100% identische (bit-genaue) Bilddateien handelt, geht es einfach so:
[autoit]$bild1 = FileRead("lw:\Bild1.jpg")
$bild2 = FileRead("lw:\Bild2.jpg")
If $bild1 = $bild2 Then MsgBox(0, "Info", "Bilder sind identisch")
[/autoit]Wenn es sich um 100% identische (bit-genaue) Bilddateien handelt, geht es einfach so:
[autoit]$bild1 = FileRead("lw:\Bild1.jpg")
$bild2 = FileRead("lw:\Bild2.jpg")
If $bild1 = $bild2 Then MsgBox(0, "Info", "Bilder sind identisch")
[/autoit]"_FTP_Open()" baut ja nicht mal eine Verbindung auf, das würde erst "_FTP_Connect()" tun. Soweit ich das verstanden habe, wird nur die Struktur /der Handle für eine mögliche Datenübertragung aus der "WinINet.dll" bereitgestellt.
Also noch keine Verbindung nach außen ! Alles nur zwischen Deinem AutoIt-Tool und der DLL.
Hast Du auf den bereffenden Rechnern, mal eine Verbindung mit dem Windows-FTP-Client aus der Konsole heraus versucht ?
Ich würde es, basierend auf dem "Code-Schnipsel", so verändern:
If Not @error Then
DriveMapDel("G:")
_WriteLogData("Laufwerk G:\ getrennt.")
DriveMapDel("H:")
_WriteLogData("Laufwerk H:\ getrennt.")
$count = 0
Do
DriveMapAdd("G:", \\domäne.local\dfs\Abteilung)
$error = @error
If $error Then
$count += 1
Else
ExitLoop
EndIf
Until $count >= 3
If $count >= 3 Then
$Laufwerk = "G:\"
_ErrorLog($Error, $Laufwerk)
Else
$Error = ""
$Laufwerk = ""
If WinActive ("Connect") Then
ControlSetText("Connect","",5,@CRLF & @CRLF & "Netzlaufwerke werden verbunden," & @CRLF & @CRLF & "Laufwerk G:\ erfolgreich verbunden.")
Sleep(250)
_WriteLogData("Laufwerk G:\ verbunden.")
ElseIf WinActive ("VPN- Status") Then
ControlSetText("VPN- Status","",11, "Netzlaufwerke werden verbunden," & @CRLF & "Laufwerk G:\ erfolgreich verbunden.")
Sleep(250)
_WriteLogData("Laufwerk G:\ aus Childform verbunden.")
EndIf
EndIf
Funktioniert bei mir (ftp.strato.de, Upload eine Textdatei) ohne Fehler !
Ich glaube er sucht
[autoit]ConsoleWrite()
[/autoit]wobei im AutoIt-Compiler noch "Compile for System = Console" gewählt werden muss.
Oder der im Script davor liegende Befehl _FTP_Connect() muss unter Umständen passiv (Parameter Nr. 5) erfolgen !
Vielleicht hilft Dir dies: _RobocopyBackup_WithProgress()
Das ging meines Wissens nach für USB-Speicher noch nie. Autorun nur für CD-Laufwerke, Icon setzen auch bei USB-Stick.
Eine mögliche Lösung wäre ein zusätzliches Tool (läuft ständig im Hintergrund, z.B. über Autostart), welches die INF-Datei auswertet und das betreffende Programm startet.
Ich hatte mal etwas in der Art erstellt:
Ich verstehe kein Wort !
Edit:
Das einzige was ich aus den gestückelten Sätzen herauslesen kann, wäre etwas in der Art:
$sShare = "\\Server\Share"
$sLetter = "T:"
$sName = "Testlaufwerk"
DriveMapAdd($sLetter, $sShare)
$oShell = ObjCreate("shell.application")
$oShell.NameSpace($sLetter).Self.Name = $sName
Du musst mal bei winscp nachsehen, ob Du an die Infomation kommst, wie weit der Vorgang fortgeschritten ist.
Du brauchts irgendwie einen Wert in % oder "y byte kopiert von X" mit dem Du die ProgressBar steuerst.
Edit: und Dich dann in der AutoIt-Hilfe unter "StdOutRead" informieren.
1. "\WinSCP>winscp.com" könnte "\WinSCP\winscp.com" sein
2. Pfad "C:\Program Files (x86)\WinSCP" existiert nicht
3. "winscp.com" liegt nicht in dem Pfad
4. Server "server@test.com" gibt es nicht
5. Quell-Datei "c:\test.txt" fehlt
6. Zielpfad "/cygdrive/c/" existiert nicht, wird aber nicht automatisch angelegt
An obigem siehst Du, es kann an vielem liegen. Etwas mehr Infos sind schon notwendig.
Funktioniert die Programmzeile in einer Kommandozeile ? Bzw. welche Fehlermeldung
kommt in der Kommandozeile oder unter AutoIt ?
Ein wenig tun musst Du schon ![]()
Ich gehe davon aus, das das Laufwerk "L:" ein Netzlaufwerk ist.
Da Du am Scriptanfang #RequireAdmin verwendest, wird das Script aber unter einem anderen User ausgeführt, wenn Du nicht Admin bist. Dieser andere User hat aber DEIN (jeder angemeldete User hat seine eigenen) Netzlaufwerk "L:" nicht !
Ich glaub ich habs:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIScroll.au3>
$sWinTitle = "Form1"
Dim $Oben = 50
Dim $Links = 40
Dim $Spalten = 4
Dim $Buttonbreite = 80
Dim $Buttonhoehe = 150
Dim $Spaltenstart = 0
$var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
If @error Then
MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
Else
$Form1 = GUICreate($sWinTitle, 650, 400, 200, 100, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_VSCROLL))
GUISetState(@SW_SHOW)
GUISetState(@SW_MAXIMIZE)
Scrollbar_Create($Form1, $SB_VERT, (Ceiling($var[0][0]/$Spalten) * $Buttonhoehe) + $Oben); Höhe für vertikale Scrollbar = Anzahl Reihen * Buttonhöhe + Kopfzeilenhöhe
Scrollbar_Step(20, $Form1, $SB_VERT); Scrolls per 20 pixels.
$aGUISize = WinGetClientSize ($sWinTitle)
$Buttonbreite = ($aGUISize[0] - $Links) / $Spalten
For $i = 1 To $var[0][0]
GUICtrlCreateButton($var[$i][1],$Links,$oben,$Buttonbreite,$Buttonhoehe)
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
$Links += $Buttonbreite
$Spaltenstart +=1
If $Spaltenstart = $Spalten Then
$Spaltenstart = 0
$Links =40
$oben +=$Buttonhoehe
endif
Next
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Und hier die GUIScroll-UDF:
Ich hab es am Anfang erwähnt - Ein vernünftige Beschreibung ist Gold wert !
Mein Beispiel funktioniert auch bei 30 Buttons noch !
Ich habe über die letzten Beiträge etwas den Faden verloren, was nicht geht. Aber trotzdem:
Laut dein Beschreibung sollte dies doch etwa das sein, was Du wolltest:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$sWinTitle = "Form1"
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate($sWinTitle, 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
$aGUISize = WinGetClientSize ($sWinTitle)
Dim $Oben = 50
Dim $Links = 40
Dim $Spalten = 4
Dim $Buttonbreite = 50
Dim $Buttonhoehe = 20
Dim $Spaltenstart = 0
$Buttonbreite = ($aGUISize[0] - $Links) / $Spalten
$var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
If @error Then
MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
Else
$Buttonhoehe = Int(($aGUISize[1] - $Oben) / Ceiling(($var[0][0] / $Spalten)))
For $i = 1 To $var[0][0]
GUICtrlCreateButton($var[$i][1],$Links,$oben,$Buttonbreite,$Buttonhoehe)
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
$Links += $Buttonbreite
$Spaltenstart +=1
If $Spaltenstart = $Spalten Then
$Spaltenstart = 0
$Links =40
$oben +=$Buttonhoehe
endif
Next
EndIf
GUISetState(@SW_SHOW)
GUISetState(@SW_MAXIMIZE)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Anfänglich ist doch schon einmal eine Frage offen:
Deine GUI im Script hat eine feste Größe. Damit wäre eine Abhängigkeit der Buttons von "@DesktopWidth" doch Blödsinn.
Folgende Punkte wären zu klären:
Wie groß soll die GUI sein ? Fest, Variabel, Fullscreen ? x-Prozent von Desktop ?
Wieviel Rand in der GUI bis zu den Buttons ? Oben, Unten, Links und Rechts gleich ?
Größe der Buttons soll immer das mögliche Maximum ergeben ?
Wieviel Abstand horizontal/vertikal ? Relativ zur Buttongröße ?
Das wären so auf Anhieb mal meine Fragen ?
Gruß
Micha_he