Beiträge von Schnitzel
-
-
Das Programm soll erkennen ob der Benutzer über VPN verbunden ist (kein Backup) oder direkt mit dem Firmennetzwerk lokal...
Lösungen gibt es sicher einige aber wir bräuchten ein paar Infos mehr.
Wie baut ihr euer VPN denn auf?
Vergebt ihr für VPN Clients bestimmte IP's?
Fragen die VPN Clients einen anderen DC/DNS ab?
Gibt es eine VPN Client Software?
Usw... -
Warum packst du die letzte Backup Abfrage in die While 1 schleife?
[autoit]
Solange du kein Backup startest wird sich auch die letzte Backupzeit nicht ändern
Du erzeugst nur unnötig Last...While 1
[/autoit]
Local $Zeit = FileGetTime ("U:\Backup")
Local $BackupZeit = $Zeit[2] & "." & $Zeit[1] & "." & $Zeit[0] & " " & $Zeit[3] & ":" & $Zeit[4]
TrayItemSetText($LastBackup,'Letztes erfolgreiches Backup: ' & $BackupZeit) -
Bitte verwende Spoiler für längere Quelltexte:
[autoit]
Natürlich kannst du in eine Datei schreiben.Fileopen()
[/autoit]
Filewrite()
FIleread()
Fileclose()Ist es möglich auszugeben wann genau die Funktion Backup() ausgeführt wurde?
Während der Laufzeit kannst du eine Variable verwenden in der du den Zeitpunkt der letzten ausführung speicherst.
Um die Info nach beenden des scripts nicht zu verlieren musst du sie in eine Datei schreiben (txt, ini, ...), oder in die Registry, oder du erstellst für jedes Backup einen neuen Ordner, dann kannst du den Erstell-Zeitpunkt auslesen -
Du willst ja auch nicht hunderte Trayitems erstellen sondern den Text eines Items ändern oder?
[autoit]TrayItemSetText()
[/autoit] -
Du musst auch den Return wert von Stringreplace verwenden:
[autoit]$var = StringReplace(@DocumentsCommonDir,"Public",@Username)
[/autoit]
msgbox(0, "", $var) -
Und was ist bitte an 3 Zeichen leichter als an 2?
Und übersichtlicher wird es durch """ auch nicht -
So schnell kann es gehen wenn man ein lauffähiges Script postet...
Spoiler anzeigen
[autoit]#AutoIt3Wrapper_Compression=4
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n
#RequireAdmin
#include <GUIConstants.au3>GLOBAL $processname = "calc.exe", $bActive = False
[/autoit] [autoit][/autoit] [autoit]
Global $iPID, $bgpic, $perc$interface = GUICreate("Test", 120, 160, 1143, 239)
[/autoit] [autoit][/autoit] [autoit]
$bgpick = GUICtrlCreatePic("bg.jpg", 1, 1, 120, 160)
GUICtrlSetState($bgpick, $GUI_DISABLE) ; verhindert das der bg das gui übrerlagert$proclab = GUICtrlCreateLabel("Process", 40, 15, 55, 20)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont($proclab, 9, 999, 0, "")
GUICtrlSetBkColor($proclab, $GUI_BKCOLOR_TRANSPARENT)
$procstatus = GUICtrlCreateInput("wait...", 30, 30, 60, 20)
GUICtrlSetState($procstatus, $GUI_DISABLE)$botlab = GUICtrlCreateLabel("Status", 36, 50, 55, 20)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont($botlab, 9, 999, 0, "")
GUICtrlSetBkColor($botlab, $GUI_BKCOLOR_TRANSPARENT)$botstatus = GUICtrlCreateInput("wait...", 30, 65, 60, 20)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($botstatus, $GUI_DISABLE)$percinput = GUICtrlCreateInput($perc, 45, 95, 30, 20)
[/autoit] [autoit][/autoit] [autoit]
$startstop = GUICtrlCreateButton("Start", 40, 125, 40, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUISetState(@SW_SHOW)
AdlibRegister("checkprocess")while 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Select
case $msg = -3
Exit
case $msg = $startstopEndSelect
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
wendFunc checkprocess()
[/autoit]
$iPID = ProcessExists($processname)
If $iPID = 0 And $bActive Then
GUICtrlSetState($startstop, $GUI_DISABLE)
GUICtrlSetState($percinput, $GUI_DISABLE)
GUICtrlSetData($procstatus, "pending...")
$bActive = False
ElseIf $iPID > 0 And Not $bActive Then
GUICtrlSetState($startstop, $GUI_ENABLE)
GUICtrlSetState($percinput, $GUI_ENABLE)
GUICtrlSetData($procstatus, "running...")
$bActive = True
EndIf
EndFunc ;==>checkprocess -
Autoit liefert keine Funktionen dafür aber mit ein paar Dll-Calls solltest du das in den Griff bekommen können:
http://msdn.microsoft.com/en-us/library/…2(v=vs.85).aspxUnd wenn schon ein externes Tool dann wenigstens etwas das mit Windows mitgeliefert wird.
[autoit]
Das könnte dich weiterbringen:Run(@ComSpec & " /c query user")
[/autoit] -
Und mit GuiCtrlGetState() hast du flackernde Controls oder?
Wie gesagt ein Bool und die Sache ist erledigt.
Poste dein Testscript mit dem Calculator! -
Poste doch mal das ganze Script oder zumindest einen lauffähigen Ausschnitt.
Ich würde für den Status einfach eine Bool-Variable verwenden. Wenn das Programm seit dem letzten Aufruf der Funktion nicht gestartet/gestoppt wurde musst du ja auch nichts machen.
Information in der Gui zu speichern ist generell nicht so schöner Programmierstil.
Eine Gui sollte nur anzeigen und Events auslösen -
[autoit]
; $Source = @UserProfileDir & "\Desktop"
[/autoit]
$Source = @DesktopDir ; Besser
RunWait('C:\Program Files (x86)\DirSync\DirSync.exe -s "' & $Source & '" -d "U:\Backup" -start -nostats -nowin -timediff 2 -noautoreport -logdir "U:" -dateformat "$dd.$mm.$yy" -exit') -
Umbenennen ist doch auch nur ein verschieben innerhalb eines Ordners
Ich denke du willst es so in etwa:Spoiler anzeigen
[autoit]Local $startPath = 'C:\Test\'
[/autoit] [autoit][/autoit] [autoit]
Local $ZielPfad = 'C:\Test2\' ; Zielordner darf nicht unterhalb der Struktur des Quellordners liegen, ansonsten wären Anpassungen nötig
Local $ext = 'txt'
Local $sNummer = '001_'
Local $sDateiUmbenannt, $sArchivLocal $artxtFiles = _GetFilesFolder_Rekursiv($startPath, $ext, 0)
[/autoit]
For $i = 1 To $artxtFiles[0]
$sDateiUmbenannt = StringReplace($artxtFiles[$i], "", "" & $sNummer, -1)
FileMove($artxtFiles[$i], $sDateiUmbenannt)
$sArchiv = $ZielPfad & StringTrimLeft($sDateiUmbenannt, StringInStr($sDateiUmbenannt, "", 0, -1))
FileCopy($sDateiUmbenannt, $sArchiv)
If @error Then
MsgBox(262160, "ACHTUNG", "Die Datei" & @CRLF & $artxtFiles[$i] & @CRLF & _
"konnte nicht verschoben werden, da eine Zieldatei mit dem Namen" & @CRLF & _
$sArchiv & @CRLF & "bereits existiert!")
EndIf
Next -
Du hast 2x TCPStartup() --> Wieso?
$ConnectedSocket verwendest du erst für TCPAccept und später überschreibst du es dann durch ein TCPConnect --> Dein Server versucht auf sich selbst zu verbinden --> Das passt nicht
Auch im Client ist so einiges drin das keinen Sinn macht.Und versteh mich nicht falsch. Das ist nicht böse gemeint, wenn ich sage, dass das zusammenkopiert ist.
Fast jeder fängt mal so an.
Aber wenn du einen Chat mit ein paar weiteren Funktionen bauen willst dann solltest du das was bisher in deinem Script ist auch verstehen.
Tutorials gibt es genügend. Kannst ja mal einen Blick in meine Signatur werfenWenn man es versteht bekommt man von der Funktionsweise das was du bisher hast auf geschätzt 30 Zeilen pro Script ( Server / Client ).
-
Wenn du @ComSpec & " /k " verwendest dann bleibt die Konsole offen und du siehst den Output.
[autoit]
Was genau du ausführst kannst du dir doch mit einem Consolewrite ausgeben lassen:ConsoleWrite(@ComSpec & " /c " & "C:\Programme\Java\jdk1.7.0_45\bin\native2ascii -reverse -encoding utf8 " & $Pfad & $k & " " & $Pfad & $k & @LF)
[/autoit]
Probier am besten von Hand mal ob das ausgegebene auch funktioniert.
Hast du im $pfad oder in $k eventuell Leerzeichen? -
Sorry hatte ich vergessen:
[autoit]#include <Constants.au3>
[/autoit]@SW_HIDE musst man nich zwingend mit @ComSpec verwenden. Die Frage ist nur ob sich native2ascii.exe verstecken lässt oder nicht.
[autoit]
Ist das eine Konsolenanwendung? Oder eine anwendung mit eigener GUI?
Java Fenster lassen sich selten gut steuern
Du kannst es auch mal so ausprobieren:RunWait(@ComSpec & " /c " & "C:\Programme\Java\jdk1.7.0_45\bin\native2ascii -reverse -encoding utf8 " & $Pfad & $k & " " & $Pfad & $k, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
[/autoit] -
Wie i2c schon sagt liegt das Problem nicht am Shellexecute sondern wohl eher an dem anderen Zeug das du so machst.
Damit das Script zuverlässig funktioniert solltest du paar Dinge ändern.
Statt dem ganzen Tab gesende solltest du GUICtrlSetState ($CTRL, $GUI_FOCUS ) verwenden
Statt Send("^c") gibt es bestimmt auch was besseres. Was ist das für ein Fenster namens "Rank"?
Lässt sich das service tag nicht besser auslesen? Controlgettext() etc. -
Den Ansatz habe ich dir hier gepostet:
https://autoit.de/index.php?page…1054#post351054Warum machst du es nicht so?
-
Es gibt einzeilige IF's und mehrzeilige bei einzeiligen. Siehe Hilfe
Du solltest erstmal die Basic's verstehen bevor du irgendwelche Scripte zusammenkopierst.
Es hilft dir sicher nichts irgendwelche Variablen zu überschreiben die du später noch benötigen würdest (siehe $ConnectedSocket...) -
Es wird lediglich das eingegebene Zielverzeichnis erstellt und dort hinein alle Dateien verschoben.
Das ist genau das was die Funktion macht. Vom Anlegen der Ordnerstruktur im Zielverzeichnis war nie die Rede