Bitnugger vielen dank für den Code, das werde ich mal bei Gelegenheit ausprobieren. Vorerst werde ich es mal ohne Ladebalken lassen.
Beiträge von bam176
-
-
Hallo Zusammen,
ich habe mir eine kleine Funktion geschrieben, die mir einen lokalen Ordner auf meine NAS kopieren/sichern soll.
Dazu habe ich mir einen Ladebalken mit in die Funktion geschrieben.
Aktuell läuft die Copy-Funktion und dann erst der Ladebalken.
Lässt sich das so gestalten, dass der Ladebalken den tatsächlichen Kopierfortschritt anzeigt?
Später würde ich damit gerne noch ein paar andere Ordner von meinem Rechner auf meine NAS sichern.
Dazu würde ich die Funktion mehrmals mit dem jeweiligen Ordnerpfad als Parameter aufrufen.
Ich habe schon im Forum nach ähnlichen Problemen gesucht aber nichts gefunden, was ich auf meinen Fall hätte anwenden können bzw. verstanden habe.AutoIt
Alles anzeigen#include <FileConstants.au3> #include <Date.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $user = @UserName $todays_date = _NowDate () $backup_path = '' $documents_path = 'C:\Users\'&$user&'\Documents' $bprogress_title = "Backup" $bprogress_text = "Backup" $rprogress_title = "Restore" $rprogress_text = "Restore" ;Aufruf Funktion backup ($bprogress_title,$bprogress_text&' Dokumente Ordner',$documents_path,$backup_path&'Documents') ;Backup Funktion Func backup($bprogress_title,$bprogress_text,$sourcedir, $destdir) ProgressOn ($bprogress_title, $bprogress_text) $copy1=DirCopy ( $sourcedir, $destdir, $FC_OVERWRITE) For $i = 10 To 100 Step 10 Sleep(500) ProgressSet($i, $i & "%") Next ProgressOff() EndFunc
-
autoBert
Vielen Dank für deine Unterstützung. Deine Änderungen haben das Problem gelöst.
Dass mir mein Else-Zweig gleich mehrere Instanzen öffnet, habe ich nicht heraus bekommen. Manchmal sieht man den Wald vor lauter Bäumen nicht...Code: von autoBertElse $Pid = ShellExecute($PPSX_path & $PPSX_name, "", "", "Open", @SW_MAXIMIZE) ConsoleWrite($Pid & @CRLF) Do $pState = WinGetState("PowerPoint-Bildschirmpräsentation - " & "[" & $PPSX_name & "[Schreibgeschützt]]") Sleep(100) ;===> schont Prozessor Auslastung Until $pState
Könntest du mir noch erklären warum du hier den ConsoleWrite eingebaut hast?
-
Hallo autoBert
Ich wollte erreichen dass die Master Präsentation nach z.B.10 Minuten wieder in den Vordergrund geholt wird, wenn der Rechner 10 Minuten im Leerlauf ist. (=Keine Eingaben innerhalb der letzten 10 Min gemacht worden sind)
Das funktioniert auch super.
Ich kann Die Präsentation nur nicht beenden/verlassen.
Die Demo.ppsx ist als Anhang im Beitrag bereits eingefügt Dojo1.zip. Das habe ich auch rein geschrieben.
An dem Rechner hängt ein Touchscreen über den die User sich Infos anschauen, aus der Master Präsentation andere Präsentationen öffnen oder auch mal ins Intranet gehen können. Für das Letzte müssen Sie raus aus der Präsentation und rein in den IE. Das Ist nur ein Beispiel es müssen auch andere Anwendungen zugänglich sein die ich nicht in der Präsentation verlinken kann.
Ich will mit dem Skript verhindern, dass der nächste User z.B. nur das Intanet sieht und nicht das Info-Board (=Master Präsentation). Das liegt leider in der Natur der Anwender, dass Sie das Zeug einfach stehen lassen wie es ist und das Info Board (Master Präsentation) nicht wieder starten.
Jeder Anwender soll die gleiche Ausgangsbasis haben wenn er an das Info-Board kommt.
-
Thema wurde in einem anderem Bereich neu erstellt. Bitte löschen, falls ein Moderator vorbei schaut.
Danke -
Hallo Zusammen,
ich versuche folgendes Projekt zu realisieren und bin auf ein Problem gestoßen.
Gegeben:
Eine PowerPoint Präsentation (*.PPSX) läuft auf einem Touchscreen in Dauerschleife. Die Präsentation (auf´s wesentliche reduziert) ist unten im Anhang "Dojo1.zip", um den Fehler nachstellen zu können.
Da die User aus der Master-Präsentation auch andere Präsentationen aufrufen und sogar die Master-Präsentation beenden können müssen, soll folgendes umgesetzt werden.
Aufgabe:
Das Skript (hängt im Autostart) soll nach einer Leerlaufzeit von X Minuten die Master-Präsentation in den Vordergrund holen.
Hat ein User die Master-Präsentation beendet, soll das Skript dies erkennen und die Master-Präsentation starten.
Damit soll sicher gestellt werden, dass immer die Master-Präsentation auf dem Bildschirm läuft.
Aktuell sind 10 Minuten Leerlaufzeit angedacht.
=>Diese Vorgaben erfüllt das bestehende Skript ohne Probleme zu machen.Umsetzung:
AutoIt
Alles anzeigen#include <Timers.au3> ;Werte aus der Config.ini $PPSX_path = IniRead(@ScriptDir & "\config.ini", "PPSX_path", "PPSX_path1", "") $PPSX_name = IniRead(@ScriptDir & "\config.ini", "PPSX_name", "PPSX_name1", "") $PPSX_IdleTime = IniRead(@ScriptDir & "\config.ini", "IdleTime", "IdleTime1", "600") ;Leerlaufzeit $time=$PPSX_IdleTime While 1 If _Timer_GetIdleTime() >= 1 * $time * 1000 Then ;Prüft ob das Fenster der Master-Präsentation aktiv ist (muss nicht unbedingt im Vodergrund sein) ;WinGetState = 0 wenn das Fenster nicht gefunden wurde $pState = WinGetState ("PowerPoint-Bildschirmpräsentation - "& "[" &$PPSX_name& "[Schreibgeschützt]]") ;Wenn das Fenster der Master-Präsenstation noch aktiv ist wird es in den Vordergrung geholt if $pState > 0 Then WinActivate("PowerPoint-Bildschirmpräsentation - "& "[" &$PPSX_name& "[Schreibgeschützt]]") ;Falls das Fenster nicht mehr aktiv ist, wird die PPSX-Datei mit maximiertem Fenster gestartet. Else ShellExecute($PPSX_path&$PPSX_name,"",Default,Default, @SW_MAXIMIZE) EndIf EndIf WEnd
Code: config.ini[PPSX_path] PPSX_path1 = [PFAD] [PPSX_name] PPSX_name1 = DATEI.ppsx [IdleTime] IdleTime1 = 600
Ich prüfe den Fenster-Titel ob dieser vorhanden ist, falls nicht, starte ich die Master-Präsentation.
Das funktioniert auch gut, weil jede Präsentation einen anderen Titel hat.
Problem:Wenn das Skript die Master-Präsentation einmal gestartet und/oder in den Vordergrund geholt hat, kann diese nicht mehr über ESC beendet werden.
Beendet man die Master-Präsentation über ESC wird Sie 1 Sekunde später sofort wieder gestartet und läuft erneut los.
Das Problem tritt auch auf, wenn das AutoIT-Skript vorher komplett beendet worden ist und man dann erst versucht die Präsentation mit ESC zu beenden.Es hilft nur, die Master-Präsentation über den TaskManager oder die Taskleiste zu beenden.
=>TaskManager/Taskleiste ist keine Option, da der User auch über den Touchscreen die Präsentation beenden können muss.
=>Starte ich die Präsentation ohne das Skript, kann ich Sie ohne Probleme mit ESC beenden.
Getestet:
Auf folgenden Systemen habe ich das Skript getestet immer mit dem selben Ergebnis/Problem.
-Windows 7 Enterprise x64 und Office 2010
-Windows 10 Enterprise x64 und Office 2016
An der Master-Präsentation scheint es nicht zu liegen, um das auszuschließen habe ich die Datei mehrfach von Grund auf neu erstellt.
Ziel:
Der User soll die Master-Präsentation mit ESC beenden können, da Sie ja eh nach x Minuten Leerlauf von alleine wieder neu startet.
Das Skript hängt im Autostart und läuft den ganzen Tag mit.
Zum Testen habe ich in dem Dojo1.zip die Präsentation angehängt.Tipps und Lösungsvorschläge sind willkommen
-
Hallo Zeitriss,
vielen Dank für deinen Tipp, mit ControlCommand() und einer While-Schleife hat es geklappt.
water: Danke auch für deinen Tipp. Ich habe hier ein anderes Produkt, welches zufällig den gleichen Namen hat wie das, dass du mir raus gesucht hast.
Anbei meine Lösung.
Code
Alles anzeigen#RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Language=1031 #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator #AutoIt3Wrapper_Add_Constants=n #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** Run (@ScriptDir & '\Automation Studio V4.2.exe') AutoItSetOption('MouseCoordMode', 0) WinWait('Automation Studio V 4.2.4 Installation') WinActivate('Automation Studio V 4.2.4 Installation') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') Sleep (1000) ControlCommand('Automation Studio V 4.2.4 Installation', '', 'Button4', 'Check') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') WinWait('Automation Studio V 4.2.4 Installation') WinActivate('Automation Studio V 4.2.4 Installation') While Not ControlCommand('Automation Studio V 4.2.4 Installation', '', 'Button2', 'IsEnabled', '') Sleep(2000) WEnd ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2')
-
Hallo Zusammen,
ich habe für eine Software ein Installationsskript geschrieben, welches den Installer durch klickt.
Als vorletzen Klick klickt man auf "Installieren". Dann läuft der Installer ca. 10 Minuten . Währenddesse ist der "Beenden-Button " ausgegraut.
Wenn die Installation "fertig" ist wird in der GUI "Fertig" (ID:1006) angezeigt (über dem blauen Ladebalken) und der "Beenden-Button" (Button2) wird wieder auswählbar.
Ich bräuchte eine Idee wie mein Skript erkennt, dass die Installation fertig ist und dann den "Beenden-Button" klickt.Über den Prozess kann ich es leider nicht erkennen und die Exe hat leider auch keine "Silent"-Parameter.
Ich bin für jede Hilfe dankbar.
Screenshot.pngCode
Alles anzeigen#RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Language=1031 #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator #AutoIt3Wrapper_Add_Constants=n #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** Run (@ScriptDir & '\Automation Studio V4.2.exe') AutoItSetOption('MouseCoordMode', 0) WinWait('Automation Studio V 4.2.4 Installation') WinActivate('Automation Studio V 4.2.4 Installation') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') Sleep (1000) ControlCommand('Automation Studio V 4.2.4 Installation', '', 'Button4', 'Check') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2') ControlClick('Automation Studio V 4.2.4 Installation', '', 'Button2')
-
Vielen Dank euch, es hat geklappt.
Ich habe das $ES_AUTOHSCROLL falsch interpretiert und deshalb auch nicht ausprobiert. -
Hallo Zusammen,
ich habe ein kleines Skript geschrieben, das mir zwei bestimmte Netzlaufwerke verbinden soll.
Dazu Frage ich unter anderem den Benutzer und das Passwort ab.
Natürlich ist es mir sofort auf die Füße gefallen, wo ich einen User mit einem längeren Passwort hatte.
Was ich bis dahin nicht bemerkt hatte war, dass am Ende von der InputBox nichts mehr eingegeben werden kann.
Ich habe mir schon einen Wolf gesucht, finde aber nichts, mit dem ich die InputBox dazu bringe z.B. auch 100 Zeichen aufzunehmen.
Je nach Größe (Bildschirmauflösung) ist beim Passwort-Feld nach 10 oder 13 Zeichen Schluss. Die Lösung von meinem Problem findet glaube ich in Zeile 30 statt.
Ein Paar Werte habe ich in eine ini-Datei ausgelagert.
Kann mir jemand helfen?AutoIt: Netzlaufwerke verbinden
Alles anzeigen#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> #include <ComboConstants.au3> $Drive1 = IniRead(@ScriptDir & "\config.ini", "Drives", "Drive1", "0") $Drive2 = IniRead(@ScriptDir & "\config.ini", "Drives", "Drive2", "0") $Letter1 = IniRead(@ScriptDir & "\config.ini", "Letters", "Letter1", "0") $Letter2 = IniRead(@ScriptDir & "\config.ini", "Letters", "Letter2", "0") $Info1 = IniRead(@ScriptDir & "\config.ini", "Info", "Info1", "Die Konfig-Datei konnte nicht gefunden werden.") $FormTitle = IniRead(@ScriptDir & "\config.ini", "FORM","Title","Netzlaufwerke verbinden") $FormWidth = IniRead(@ScriptDir & "\config.ini", "FORM","Width","300") $FormHeight= IniRead(@ScriptDir & "\config.ini", "FORM","Height","190") $FormLeft= IniRead(@ScriptDir & "\config.ini", "FORM","Left","800") $FormTop = IniRead(@ScriptDir & "\config.ini", "FORM","Top","300") $Domains = IniRead(@ScriptDir & "\config.ini", "Domain","Domains","0") $Form1 = GUICreate($FormTitle, $FormWidth, $FormHeight, $FormLeft, $FormTop) $Label1 = GUICtrlCreateLabel("Domain", 30, 43, 100, 20) $Label2 = GUICtrlCreateLabel("Username ", 30, 73, 100, 20) $Label3 = GUICtrlCreateLabel("Password", 30, 103, 100, 20) $Label4 = GUICtrlCreateLabel($Info1, 15, 10, 340, 20) $Domain = GUICtrlCreateCombo("", 120, 40, 100, 21, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) GUICtrlSetData($Domain, $Domains) $User = GUICtrlCreateInput("", 120, 70, 100, 21,$ES_LOWERCASE) $PW = GUICtrlCreateInput( "", 120, 100, 100, 21, $ES_PASSWORD) $Button1 = GUICtrlCreateButton("Verbinden", 30, 145, 100, 21, $BS_DEFPUSHBUTTON) $Button2 = GUICtrlCreateButton("Abbrechen", 130, 145, 100, 21, $WS_GROUP) GUISetState(@SW_SHOW) While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE Exit Case $Button1 $Domain_read = GUICtrlRead($Domain) $User_read = GUICtrlRead($User) $login = ($Domain_read & "\" & $User_read) $pw_read = GUICtrlRead($PW) DriveMapDel($Letter1) DriveMapDel($Letter2) RunWait(DriveMapAdd($Letter1, $Drive1,0,$login,$pw_read)) sleep (1000) IF @error > 0 Then MsgBox(0,"","Es ist ein Fehler aufgetreten. Domain, Username oder Password sind nicht korrekt bitte versuchen Sie es erneut.") ElseIf @error = 0 Then RunWait(DriveMapAdd($Letter2, $Drive2,0,$login,$pw_read)) sleep (1000) MsgBox(0,"","Die Netzlaufwerke "& $Letter1 &" und " & $Letter2 & " wurden erfolgreich verbunden.") Exit EndIf Case $Button2 Exit EndSwitch WEnd
Code: config.ini
Alles anzeigen[Drives] Drive1 = \\Laufwerk1 Drive2 = \\Laufwerk2 [Letters] Letter1 = H: Letter2 = P: [Info] Info1 = Dieses Skript verbindet die Laufwerke H: und P: [FORM] Title = Netzlaufwerke verbinden Width = 300 Height = 190 Left = 800 Top = 300 [Domain] Domains = EM|F3A|GUEST|AN
-
Hallo BugFix,
an und für sich ist das schon richtig. Nur löscht "FileDelete" nicht rekursiv. Es soll alles weg hauen. (auch Unterordner)
alpines: Dank für den Tipp das werde ich mir mal anschauen.
-
Hallo Zusammen,
Ich möchte ein Verzeichnis durchsuchen und alles darin löschen, das Verzeichnis aber behalten.
Dafür habe ich mir folgendes Skript geschrieben. Leider wird der Temp-Ordner nicht geleert. Falls sich jemand fragt, warum so umständlich? Das Skript soll später auch auf Ordner angewendet werden die ich nicht komplett löschen und neu anlegen kann.
Aktuell habe ich das Problem, dass der DirRemove Befehl nicht zu funktionieren scheint.
Wenn ich den Rückgabewert von $clean auslese, bekomme ich immer 0 (Fehler, 1=erfolgreich) zurück.Kann mir jemand sagen, wo der Fehler liegt?
Final möchte ich eine Löschfunktion schreiben und diese nur noch mit dem zu leerenden Verzeichnis zusammen aufrufen, falls das geht...AutoIt
Alles anzeigen;~ Durchsucht das Verzeichnis und löscht alles darin. Local $search = FileFindFirstFile("C:\temp\*.*") ; Prüfen, ob die Suche erfolgreich war If $search = -1 Then MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden.") EndIf While 1 Local $file = FileFindNextFile($search) If @error Then ExitLoop $clean=DirRemove("C:\temp\"&$file,1) WEnd ; Handle für Suche schliessen FileClose($search)