Das wäre ja jetzt einfacher als ich zu hoffen gewagt hätte, ich meine mit ExitLoop hatte ich schon verucht, aber ok ohne IF Anweisung.
Danke
Das wäre ja jetzt einfacher als ich zu hoffen gewagt hätte, ich meine mit ExitLoop hatte ich schon verucht, aber ok ohne IF Anweisung.
Danke
So mein ScreenShot Tool ist jetzt soweit noch mal überarbeitet, aber 2 Fragen hätte ich da noch.
Noch mal zur Auffrischung. Es gibt 2 Mess Fenster (hier als Beispiel Notepad und Taskmanager), diese sollen wahlweise manuel einzeln aufgezeichnet werden oder, jetzt neu imIntervall beide Fenster. Ich weiss ist zwar nicht besonders elegant gelöst, aber es funkltioniert so wie gewünscht.
DIe Frage wären nun: Wie kann ich die Intervallfunktion abbrechen, ohne das Tool direkt zu beenden?
Die zweite Frage bezieht sich auf die ScreenSHotfunktion selbst. Sofern das Fenster nicht im Task liegt, und sich ein Fenster drüberschiebt, wird das mit in den Screenshot eingefügt, das ist natürlich äusserst unschön, hat da jemand ne Idee? Würde ich mich sehr freuen.
Das Script schaut nun so aus
#include <Constants.au3>
#include <ScreenCapture.au3>
#include <File.au3>
#include <GuiButton.au3>
#include <Array.au3>
#include <StringSize.au3>
FileInstall("C:\kamera.mp3", "C:\Windows\Temp\kamera.mp3", 2)
Opt("TrayMenuMode",1) ; Hide default tray menu items
Opt("TrayAutoPause", 0); This will allow you to click on the TrayIcon without pause the script
TraySetIcon("Shell32.dll",-325)
TraySetClick(8) ;only show the menu when right clicking
TraySetToolTip ("Andis ClippingTool - Bitte klicken für Screenshot")
#Tray Tip
;HOTKEYS
HotKeySet("+{F2}", "Shot") ;Screenshot spezielle Anwendung
HotKeySet("+{F3}", "ActiveWindow") ;Screnshot aktives Fenster
HotKeySet("+{F4}", "HoleScreen") ;hole Screen
HotKeySet("{ESC}", "_Exit")
;Variablen--------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
;ANPASSUNGEN BITTE NUR HIER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;------------------------------------------------------------------------------------------------------------
Global $targetdirPath = ("\\eintopf\c$\clips\")
Global $Title1 = "Unbenannt - Editor";FensterTitel1
Global $name1 = "Editor_";Bildname1
Global $Title2 = "Task-Manager";FensterTitel2
Global $name2 = "TaskMan_";Bildname1
;Global $Title1 = "Lüftung Anlage LTA2 Raumfühler"
Global $min = .1;min bei Intervall
;------------------------------------------------------------------------------------------------------------
Global $checkPathF = _PathFull("act.ini", @ScriptDir)
Global $appPath = _PathFull("Microsoft\Windows\Start Menu\Programs\Startup\AndisClippingTool.exe", @AppDataDir)
Global $checkPath = _PathFull("Microsoft\check.txt", @AppDataDir)
Global $BeepFile = 'C:\Windows\Temp\kamera.mp3'
Global $sTimestamp, $Mailforwardstate
Local $appPath
global $CmdPid
;MENUITEMS-----------------
$Folderitem = TrayCreateItem("Clip Ordner")
$delitem = TrayCreateItem("Clip Ordner leeren")
TrayCreateItem("") ; Create a separator line.
$Spezitem = TrayCreateItem("Messbildschirm 1")
TrayItemSetState($spezitem,$TRAY_UNCHECKED)
$Spez2item = TrayCreateItem("Messbildschirm 2")
TrayItemSetState($spezitem,$TRAY_UNCHECKED)
$Holeitem = TrayCreateItem("Ganzer Bildschirm")
$specWinitem = TrayCreateItem("sonst. Fenster (Rechtsklick->WindowShot)")
$Intervalitem = TrayCreateItem("Intervall-Shot")
TrayCreateItem("") ; Create a separator line.
$aboutitem = TrayCreateItem("Über")
$infoitem = TrayCreateItem("Info")
$Supportitem = TrayCreateItem("Support-Mail")
TrayCreateItem("") ; Create a separator line.
$Mailforwarditem = TrayCreateItem("weiterleiten per Mail (Newest)")
;TrayItemSetState($Mailforwarditem,$TRAY_CHECKED)
$autostartitem = TrayCreateItem("mit Windows starten")
;TrayItemSetState($autostartitem,$TRAY_CHECKED)
TrayCreateItem("") ; Create a separator line.
$exititem = TrayCreateItem("Exit")
;$testsplashitem = TrayCreateItem("TestSplash")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Function CALLS
Firststartcheck()
startcheck()
;CHECKS
;Mehrere Instanzen vermeiden---------------------------------------------------------------------------------
$process = ProcessList (@ScriptName)
if $process[0][0] > 1 then
consolewrite ("Prozess existiert bereits - EXIT" & @crlf)
exit
endif
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func startcheck();Auslesen Ini Datei
If FileExists(@StartupDir & "\ACT.lnk") Then
TrayItemSetState($autostartitem, $TRAY_CHECKED)
Else
TrayItemSetState($autostartitem, $TRAY_UNCHECKED)
EndIf
$Mailforwardstate = IniRead("act.ini","settings","Mailforwardstate", "")
If $Mailforwardstate = "1" Then
TrayItemSetState($Mailforwarditem, $TRAY_CHECKED)
global $CmdPid = Run("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .\mailer.ps1 -noexit" & 'Get-ChildItem',@ScriptDir, @SW_hide); Starting PicMailer
MsgBox(0,"info", "Email Demon gestartet" , 10)
Else
TrayItemSetState($Mailforwarditem, $TRAY_UNCHECKED)
ProcessClose ($CmdPid)
EndIf
EndFunc
;------------------------------------------------------------------------------------------------------------
Func _Exit()
MsgBox("Title", "", "Script wurde abgebrochen.", 2)
Exit 0
EndFunc
;------------------------------------------------------------------------------------------------------------
;Erster Prgrammstart
Func Firststartcheck()
If FileExists($checkPathF) = 1 Then ;Checkdatei auf Existenz prüfen
;Mache nix
Else
$mailforwardstate = "0"
TrayItemSetState($Mailforwarditem, $TRAY_UNCHECKED)
IniWrite("act.ini","settings","mailforwardstate", $mailforwardstate)
MakeShellmenu()
TrayItemSetState($autostartitem, $TRAY_CHECKED)
FileCreateShortcut(@ScriptFullPath, @StartupDir & "\ACT.lnk", @ScriptDir, "", "AutoIT Script Description")
if $mailforwardstate = "1" then; Mailweiterleitung ein
;Powerhell Mail Cred setzen
MsgBox(0,"info", "Geben Sie Ihre Daten für die automatische Email Weiterleitung ein, falls nicht gewünscht auf x klicken und entsprechend im Traymenu deaktivieren!" , 10)
$CmdPid = Run("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .\WriteCred.ps1 -noexit" & 'Get-ChildItem',@ScriptDir, @SW_HIDE); Starting
Else
endif
$sMessage = "Für den automatischen Screenshot-Versand melden Sie sich bitte an Ihrem Mailserver an, Andis Clipping Tool residiert ab jetz hier unten im Traymenu ⇲ ! "
SplashTextOn("", $sMessage, 300, 110, @DesktopWidth - 320, @DesktopHeight - 80,$DLG_TEXTLEFT+$DLG_NOTITLE+$DLG_MOVEABLE, "Arial", 11, "")
Sleep(9000)
SplashOff()
_FileCreate($checkPathF)
EndIf
EndFunc
;------------------------------------------------------------------------------------------------------------
;Clipverzeichnis anlegen-------------------------------------------------------------------------------------
If FileExists ($targetdirPath) = 1 Then
Else
;MsgBox(0,"info", "File does not exist" , 10)
DirCreate ( $targetdirPath )
DirCreate ( $targetdirPath & "app" )
EndIf
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func MakeShellmenu()
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\WindowShot", "Icon", "REG_SZ", "Shell32.dll,325")
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\WindowShot\command", "", "REG_SZ", "" & @Scriptdir & "\HOTKEYMakeShotActiveWindow.exe %W")
EndFunc
;------------------------------------------------------------------------------------------------------------
;MAIN LOOP---------------------------------------------------------------------------------------------------
While 1
Switch TrayGetMsg() ;switch seems nicer in this case
Case 0
ContinueLoop
Case $TRAY_EVENT_PRIMARYDOWN ;reaction to left clicking
checkapp()
;WinSetState($hWnd, "", @SW_Restore)
Case $delitem
TrayItemSetState($delitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
;ProcessClose ($CmdPid)
FileDelete($targetdirPath & "\app\*.*")
FileDelete($targetdirPath & "\*.*")
$CmdPid
Case $spezitem
TrayItemSetState($spezitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
CheckApp()
Case $spez2item
TrayItemSetState($spez2item,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
CheckApp2()
Case $holeitem
TrayItemSetState($holeitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
SoundPlay($BeepFile)
HoleScreen()
Case $Intervalitem
TrayItemSetState($Intervalitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
Intervall()
Case $aboutitem
TrayItemSetState($aboutitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
Msgbox(64, "Über", "Mit diesem Tool wird per Doppelklick ein Snapshot von der Anwendung ... erzeugt, diese wird anschliessend auf Rechner ..., in Verzeuichnis ... abgelegt.")
Case $Folderitem
TrayItemSetState($Folderitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
Run("Explorer.exe " & $targetdirPath)
Case $supportitem
TrayItemSetState($supportitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
ShellExecute("mailto:xyz@xy.de")
Case $infoitem
TrayItemSetState($infoitem,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
Msgbox(64, "About", "Bei Fragen und Anregungen, sowie Problemen kontaktieren Sie bitte mich!")
Case $autostartitem
If BitAND(TrayItemGetState($autostartitem), $TRAY_CHECKED) Then
FileCreateShortcut(@ScriptFullPath, @StartupDir & "\ACT.lnk", @ScriptDir, "", "AutoIT Script Description")
Else
FileDelete(@StartupDir & "\ACT.lnk")
EndIf
Case $Mailforwarditem
If BitAND(TrayItemGetState($Mailforwarditem), $TRAY_CHECKED) Then
$mailforwardstate = "1"
IniWrite("act.ini","settings","mailforwardstate", $mailforwardstate)
Msgbox(64, "About", "mailer wird in Zukunft verwendet")
If FileExists ("Credential.xml") then
global $CmdPid = Run("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .\mailer.ps1 -noexit" & 'Get-ChildItem',@ScriptDir, @SW_hide); Starting PicMailer
Else
$CmdPid = Run("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .\WriteCred.ps1 -noexit" & 'Get-ChildItem',@ScriptDir, @SW_HIDE); Starting PicMailer
global $CmdPid = Run("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .\mailer.ps1 -noexit" & 'Get-ChildItem',@ScriptDir, @SW_hide); Starting PicMailer
EndIf
Else
;Msgbox(64, "About", "kein mailer verwenden")
ProcessClose ($CmdPid)
$mailforwardstate = "0"
IniWrite("act.ini","settings","mailforwardstate", $mailforwardstate)
EndIf
Case $exititem
ProcessClose ($CmdPid)
ExitLoop
EndSwitch
WEnd
Exit
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func CheckApp() ;Prüfen ob Zielanwendung läuft
If WinExists ($Title1) Then
SoundPlay($BeepFile)
If $Mailforwardstate = "1" Then
$sMessage = "Mail wurde versendet! "
SplashTextOn("", $sMessage, 300, 40, @DesktopWidth - 320, @DesktopHeight - 60,$DLG_TEXTLEFT+$DLG_NOTITLE+$DLG_MOVEABLE, "Arial", 11, "")
Sleep(2000)
SplashOff()
Else
;Msgbox(64, "Info", "kein Mailversandt!")
EndIf
global $chk = "1"
shot()
Else
Msgbox(64, "About", "Applikation läuft nicht!")
EndIf
EndFunc
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func CheckApp2() ;Prüfen ob Zielanwendung läuft
If WinExists ($Title2) Then
SoundPlay($BeepFile)
If $Mailforwardstate = "1" Then
$sMessage = "Mail wurde versendet! "
SplashTextOn("", $sMessage, 300, 40, @DesktopWidth - 320, @DesktopHeight - 60,$DLG_TEXTLEFT+$DLG_NOTITLE+$DLG_MOVEABLE, "Arial", 11, "")
Sleep(2000)
SplashOff()
Else
;Msgbox(64, "Info", "kein Mailversandt!")
EndIf
global $chk = "2"
shot()
Else
Msgbox(64, "About", "Applikation läuft nicht!")
EndIf
EndFunc
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func Shot()
$sTimestamp = @YEAR & @MON & @MDAY & "-" & @HOUR & @MIN & @SEC ; ggf. noch & @MSEC
if $chk = "2" Then
$title = $title2 ;
$sFileName= $targetdirPath & "app\" & $name2 & $sTimestamp &".jpg"
else
$title = $title1 ;
$sFileName= $targetdirPath & "app\" & $name1 & $sTimestamp &".jpg"
endif
$list = WinList() ;liste alle Fenster
If $list[0][0] > 0 Then ;wenn Liste nicht leer, dann weiter
$i = 1
Do
If StringInStr($list[$i][0], $title) > 0 Then ;finde erstes Notepad Fenster
$hWnd = $list[$i][1] ;merke Handel vom Fenster
WinSetState($hWnd, "", @SW_RESTORE) ;stelle wieder das Notepad Fenster her, da minimiert der Screenshot sonst schwarz wäre
Sleep(250) ;warte auf das Notepad Fenster
_ScreenCapture_CaptureWnd($sFileName, $hWnd) ;mache ein Foto und speichere das Bild ab
WinSetState($hWnd, "", @SW_MINIMIZE) ;minimiere das Fenster wieder
ExitLoop ;verlasse Schleife
EndIf
$i += 1
Until $i >= $list[0][0] ;suche solange bis alle Fenster durchsucht sind!
EndIf
EndFunc
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func HoleScreen()
$sTimestamp = @YEAR & @MON & @MDAY & "-" & @HOUR & @MIN & @SEC ; ggf. noch & @MSEC
$sFileName= $targetdirPath & "FullScreen_" & $sTimestamp & ".jpg"
_ScreenCapture_Capture($sFileName,0,0,@DesktopWidth,@DesktopHeight)
ShellExecute($sFileName)
EndFunc
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func ActiveWindow()
$sTimestamp = @YEAR & @MON & @MDAY & "-" & @HOUR & @MIN & @SEC ; ggf. noch & @MSEC
$sFileName= $targetdirPath & "ActiveWindow_" & $sTimestamp &".jpg"
$ActiveWindow = WinGetHandle("[active]")
; If GUICtrlRead ( $Mouse ) = $GUI_CHECKED Then
; $CaptureMouse = True
; Else
; $CaptureMouse = False
; EndIf
SoundPlay($BeepFile)
$Image = _ScreenCapture_CaptureWnd ( "", $ActiveWindow, 0, 0, -1, -1, True )
$fFreeBmp = True
_ScreenCapture_SaveImage ( $sFilename & "PictuRec.jpg", $Image, $fFreeBmp )
EndFunc
;------------------------------------------------------------------------------------------------------------
;INTERVALL BEIDE FENSTER
;------------------------------------------------------------------------------------------------------------
Func Intervall()
Global $Timer = TimerInit(), $Diff = 0
While 1
$Diff = TimerDiff($Timer)
If $Diff >= $min * 60000 Then
ConsoleWrite($Diff / 1000 & @CRLF)
$Timer = TimerInit()
shot1()
shot2()
EndIf
Sleep(10) ; so you don't burn up your CPU or use too much of it
WEnd
EndFunc
Func Shot1()
$sTimestamp = @YEAR & @MON & @MDAY & "-" & @HOUR & @MIN & @SEC ; ggf. noch & @MSEC
$title = "Task-Manager" ;
$title2 = "Unbenannt - Editor"
$sFileName= $targetdirPath & "app\" & "Taskmanager_" & $sTimestamp &".jpg"
$list = WinList() ;liste alle Fenster
If $list[0][0] > 0 Then ;wenn Liste nicht leer, dann weiter
$i = 1
Do
If StringInStr($list[$i][0], $title) > 0 Then ;finde erstes Notepad Fenster
$hWnd = $list[$i][1] ;merke Handel vom Fenster
WinSetState($hWnd, "", @SW_RESTORE) ;stelle wieder das Notepad Fenster her, da minimiert der Screenshot sonst schwarz wäre
Sleep(250) ;warte auf das Notepad Fenster
_ScreenCapture_CaptureWnd($sFileName, $hWnd) ;mache ein Foto und speichere das Bild ab
WinSetState($hWnd, "", @SW_MINIMIZE) ;minimiere das Fenster wieder
ExitLoop ;verlasse Schleife
EndIf
$i += 1
Until $i >= $list[0][0] ;suche solange bis alle Fenster durchsucht sind!
EndIf
EndFunc
Func Shot2()
$sTimestamp = @YEAR & @MON & @MDAY & "-" & @HOUR & @MIN & @SEC
$title2 = "Unbenannt - Editor"
$sFileName2 = $targetdirPath & "app\" & "mess_" & $sTimestamp &".jpg"
$list2 = WinList()
If $list2[0][0] > 0 Then
$i = 1
Do
If StringInStr($list2[$i][0], $title2) > 0 Then
$hWnd = $list2[$i][1]
WinSetState($hWnd, "", @SW_RESTORE)
Sleep(250)
_ScreenCapture_CaptureWnd($sFileName2, $hWnd)
WinSetState($hWnd, "", @SW_MINIMIZE)
ExitLoop
EndIf
$i += 1
Until $i >= $list2[0][0]
EndIf
EndFunc
;------------------------------------------------------------------------------------------------------------
Alles anzeigen
Vielen Dank schon mal und ein schönes Wochenende
Klappt wunderbar,
dann nehme ich mal mit, quasi als Learning, sobald man voher nicht genau weiss, wieviele Daten man zurückbekommt oder Prozesse gestartet werden, besser immer gleich per Array.
Recht schönen Dank noch mal
PS
und ein großes Lob noch mal an die gesammte Comunity hier, dass ist eigentlich das erste deutsche Forum, wo die Leute wirklich Ahnung haben und nicht nur dumme Fragen gestellt werden, wie warum machste das denn, warum lebst Du überhaupt und dergleichen...
Das sieht nacxh ner sehr guten Idee aus mit den Arrays, werde ich morgen gleich mal checken, ja sind globale Variablen. Vielen Dank für den Hinweis mit der Parameterübergabe.
lg und eine schöne Wochen noch
die Formatierungen sollen ja paralel laufen, nur die Ready Meldung soll nicht schon vorher kommen. Nein konnte ich nicht, wenn ich vor den Funktionsaufruf RunWait mache kommt nur ungültige Expression, alles schon versucht.
lg
Hallo liebe Scripter,
ma eine kleine Frage. Wenn ich auf einen anderen Prozeß warten möchte, kann ich RunWait nehmen, das ist mir klar. Aber wenn ich jetzt folgendes habe:
Func _Format()
For $i = 1 To $aArray[0][0]
Run(@ComSpec & " /c " & "FORMAT " & $aArray[$i][0] & " /FS:" & $Formattyp & " /Y /V:" & $sStickname & " " & $Formatartset, "", @SW_SHOW); /Q für Quickformat
ConsoleWrite($aArray[$i][0] & @CRLF) ; *** nur zur Testanzeige
Next
MsgBox(262144,"Info", "Alle Formatierungen beendet", $WS_EX_TOPMOST)
EndFunc
Alles anzeigen
ich möchte dass die Messagebox erst kommt wenn beide Prozeße beendet sind, die in der Schleife gestartet sind, auf die Funktion kann ich ja wohl kein RunWAIT anwenden, oder?
schön guten Abend und Danke schon mal
lg
Cool, das war genau das was ich gebraucht hatte, funktioniert super, danke noch mal
okidoki, das probier ich mal aus, denkeschönn
hehe Danke vielmals, aber wie kommt es dass es fürs Entpacken keinen Befehl gibt;) Sehr positiv ist mir aufgefallen, dass der Download nur ein Bruchteil dauert, wie der PS Befehl. Ok dann bin ich erst mal wieder gebrieft und bedanke mich recht herzlich
eine schöne Woche noch
PS: achso: Wie bereits erwähnt in C oder Programme kann er nicht speichern, trotz admin Rechten, dat ist leider blöd (also die Autoit DL Variante)
oh irgendwie haben wir uns überschnitten, danke noch mal Bitnugger
ein Problem was sich mit dieser Methode ergibt, ist, dass ich hiermit nicht in c oder c:\programme speichern kann, und zwar trotz #RequireAdmin
okidoki, das klappt und ist auch sehr elegant, Hut ab. Wieder was dazu gelernt. Trotzdem bleibt bei mir die Frage zurück, warum der Befehl mit Powershell moniert wird, als nächtes würde dann nämlich kommen, wie entpacke ich das, da häte ich auch nen einfachen PS Befehl. Wollte mein Script eigentlich nicht so aufblähen.
danke noch mal und lg
Hallo liebe Forengemeinde,
mal ne kurze Frage, ich versuche mit einem Powershellbefehl eine Datei ziehen zu lassen, was ist an diesem ausdruck auszusetzen, der Befehl selber funktioniert in CMD allein.
$command = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -command Invoke-WebRequest -Uri "https://download.teamviewer.com/download/TeamViewerPortable.zip" -OutFile "teamviewer.zip""
RunWait($command, "", @SW_Show)
vielen Dank schon mal und eine schöne Woche noch
Hallo Concara,
cool das klappt wunderbar, recht herzlichen Dank
und eine schöne Woche noch
Hallo noch mal,
eine Frage noch, aber wie sieht es aus mit Inputfeldern, also, ZB dieses hier
Da scheint es nicht so einfach zu funktionieren, brauch ich da noch zwingend ein SubmitButton?
lg und ein wunderschönes Wochenende
ok dann habe ich da wohl zu kompliziert gedacht und er schreibt automatisch mit IniWrite die neu gesetzten Werte, zumindest bei RadioButtons.
Vielen Dank und schönen Abend
Hallo allerseits, ich versuche für ein kleines Formatierungstool, eine Settings GUI zu schreiben, diese liesst zunächst aus einer vorhandenen INI Datei die Werte, das klappt auch. Bei setzen von Haacken bei trayitem Einträgen hatte ich dass schon gemacht, aber hier funktioniert es irgendwie nicht. Er läuft irgendwie in eine Art Dauerschleife. Hier mal der wesentliche Teil des Scrips: Vielleicht sieht ja einer was ich falsch gemacht habe. Wahrscheinlich nur wieder den falschen Befehl verwendet:(
#include <Array.au3>
#include <Constants.au3>
#include <ScreenCapture.au3>
#include <File.au3>
#include <GuiButton.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIError.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
Opt("TrayMenuMode",1) ; Hide default tray menu items
Opt("TrayAutoPause", 0); This will allow you to click on the TrayIcon without pause the script
TraySetIcon("Shell32.dll",-27)
TraySetClick(8) ;only show the menu when right clicking
#Tray Tip
TraySetToolTip ("TrayTool")
global $idButton_200, $Formatartset, $editradio
global $checkPathF = _PathFull("usf.ini", @ScriptDir)
$autostartitem = TrayCreateItem("mit Windows starten")
$Settings= TrayCreateItem("Einstellungen")
$exititem = TrayCreateItem("Exit")
Firststartcheck()
startcheck()
;CHECKS------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func Firststartcheck()
If FileExists ($checkPathF) = 1 Then ;Checkdatei auf Existenz prüfen
; Nichts tun
Else
_FileCreate($checkPathF);ini Datei erstellen
;Standard Settings setzen
$formatart = "1" ;1:Qickformat 0:Longformat
$formattyp = "FAT32"
$ILWprev = "1"
IniWrite("USF.ini","settings","Formatart", $formatart); StandardSetting LangFormat
IniWrite("USF.ini","settings","Formatyp", $formattyp); StandardSetting LangFormat
IniWrite("USF.ini","settings","Preview", $ILWprev); StandardSetting LangFormat
FileCreateShortcut(@ScriptFullPath, @StartupDir & "\USB-Formatter.lnk", @ScriptDir, "", "AutoIT Script Description")
;TrayItem Stati Grundeinstellung setzen
TrayItemSetState($autostartitem, $TRAY_CHECKED)
; TrayItemSetState($ILWprevItem, $TRAY_CHECKED)
SplashTextOn("Achtung", "Das Tool befindet sich im Traymenu ⇲ ! ", 1000, 100, 900, 950, 1, "Verdana")
sleep(5000)
SplashOff()
EndIf
EndFunc
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
Func startcheck();Auslesen Ini Datei
If FileExists(@StartupDir & "\USB-Formatter.lnk") Then
TrayItemSetState($autostartitem, $TRAY_CHECKED)
Else
TrayItemSetState($autostartitem, $TRAY_UNCHECKED)
EndIf
;Einlesen der Parameter aus IniDatei
Global $Formatart = IniRead("USF.ini","settings","Formatart", "")
Global $Formattyp = IniRead("USF.ini","settings","Formatyp", "")
Global $ILWprev = IniRead("USF.ini","settings","Preview", "")
;TrayItemStati neu setzen
EndFunc
;------------------------------------------------------------------------------------------------------------
;MAIN LOOP---------------------------------------------------------------------------------------------------
While 1
Switch TrayGetMsg() ;switch seems nicer in this case
Case 0
ContinueLoop
Case $TRAY_EVENT_PRIMARYDOWN ;reaction to left clicking
Case $settings
TrayItemSetState($settings,$TRAY_UNCHECKED) ;stop the automated (un)checking when clicked
Settings()
Case $autostartitem
If BitAND(TrayItemGetState($autostartitem), $TRAY_CHECKED) Then
FileCreateShortcut(@ScriptFullPath, @StartupDir & "\USB-Formatter.lnk", @ScriptDir, "", "AutoIT Script Description")
Else
FileDelete(@StartupDir & "\USB-Formatter.lnk")
EndIf
Case $exititem
ExitLoop
EndSwitch
WEnd
Exit
;------------------------------------------------------------------------------------------------------------
Func Settings()
;Create a GUI with various controls.
Local $hGUI = GUICreate("SETTINGS", 400, 200)
Local $idOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)
Local $aWindow_Size = WinGetPos($hGUI)
Local $aWindowClientArea_Size = WinGetClientSize($hGUI)
AutoItSetOption ( "option" )
; Display the GUI.
GUISetState(@SW_SHOW, $hGUI)
GUIStartGroup()
$hRadio_1 = GUICtrlCreateRadio("FAT32", 20, 30, 200, 20)
$hRadio_2 = GUICtrlCreateRadio("ExtFAT", 20, 50, 200, 20)
$hRadio_3 = GUICtrlCreateRadio("NTFS", 20, 70, 200, 20)
GUIStartGroup()
$hRadio_4 = GUICtrlCreateRadio("Qick Format", 20, 130, 200, 20)
$hRadio_5 = GUICtrlCreateRadio("Long Format", 20, 150, 200, 20)
GUIStartGroup()
$hGroup_1 = GUICtrlCreateGroup("Group 1", 10, 10, 120, 90)
$hGroup_2 = GUICtrlCreateGroup("Group 2", 10, 110, 120, 70)
Local $idInputName = GUICtrlCreateInput("Ihr Name", 170, 20, 150, 20)
Local $idInputStickName = GUICtrlCreateInput("Stickname", 170, 40, 150, 20)
;Einlesen aus Ini
If $Formattyp = "FAT32" Then
GUICtrlSetState ($hRadio_1, $GUI_CHECKED)
EndIf
If $Formattyp = "ExtFat" Then
GUICtrlSetState ($hRadio_2, $GUI_CHECKED)
EndiF
If $Formattyp = "NTFS" Then
GUICtrlSetState ($hRadio_3, $GUI_CHECKED)
ENDIF
If $Formatart = "1" Then
GUICtrlSetState ($hRadio_4, $GUI_CHECKED)
ENDIF
If $Formatart = "0" Then
GUICtrlSetState ($hRadio_5, $GUI_CHECKED)
ENDIF
; Loop until the user exits.
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $idOK
ExitLoop
; Select
; Case BitAND(GUICtrlRead($hRadio_3), $GUI_CHECKED)
; MsgBox(4096, "$hRadio3", GUICtrlRead($hRadio_3, 1))
; Case BitAND(GUICtrlRead($hRadio_2), $GUI_CHECKED) = $GUI_CHECKED
; MsgBox(4096, "$hRadio2", GUICtrlRead($hRadio_2, 1))
Case BitAND(GUICtrlRead($hRadio_3), $GUI_CHECKED) = $GUI_CHECKED
MsgBox(4096, "$hRadio3", GUICtrlRead($hRadio_3, 1))
EndSwitch
WEnd
GUIDelete($hGUI)
EndFunc ;==>Example
Alles anzeigen
Liebe Dank schon mal und eine schöne Woche noch
Jo danke sehr, das Problem ist halt, sobald kein Stick angeschlossen ist, wird nur lapidar geschrieben, es ist ein Fehler aufgetrten, dass ist für mein MInitool natütlich sehr unschön, wie kann ich da abfangen?
lg und Danke noch mal
ich muss mich wohl korrigieren, der Formataufruf funktionierte doch parallel, aber einer meiner Sticks hatte ioffenbar einen Fehler. Das bringt mich zu dern Frage @ Musashi, Du hattest doch da eine Fehlerkorrektur in deinem Scriptvorschlag, hätte die noin diesem Falle nicht anspringen müssen? Ok mit DT_All geht jetzt auch:)
@Nugger, ja dass ist mir schon klar mit den Arays;)
Vielen Dank noch mal an alle
schönen Sonntah noch
jo, bins noch mal kurz, dass ist eine super elegante Lösung.
#include <Array.au3>
Local $aArray = DriveGetDrive($DT_REMOVABLE) ; ($DT_REMOVABLE) , ($DT_ALL)
If @error Then
Exit MsgBox(BitOR(4096, 16), "Message : ", "Es ist ein Fehler aufgetreten")
Else
_ArrayColInsert($aArray, 1)
For $i = 1 To $aArray[0][0]
$aArray[$i][1] = "DRIVETYP=" & DriveGetType($aArray[$i][0], $DT_DRIVETYPE)
Next
_ArrayColInsert($aArray, 2)
For $i = 1 To $aArray[0][0]
$aArray[$i][2] = "BUSTYPE=" & DriveGetType($aArray[$i][0], $DT_BUSTYPE)
Next
_ArrayColInsert($aArray, 3)
For $i = 1 To $aArray[0][0]
$aArray[$i][3] = "DRIVELABEL=" & DriveGetLabel($aArray[$i][0])
Next
_ArrayDisplay($aArray)
EndIf
For $i = 1 To $aArray[0][0]
Run(@ComSpec & " /c " & "format " & $aArray[$i][0] & " /FS:FAT32 /y", "", @SW_SHOW)
ConsoleWrite($aArray[$i][0] & @CRLF) ; *** nur zur Testanzeige
Next
Alles anzeigen
Nur das Grundproblem bleibt bestehen, er öffnet zwar noch 2 Fenster, aber wird immer noch nacheinander abgearbeitet, so dass die erhoffte Zeitersparnis für den Kollegen, der mitunter etliche Sticks formatieren muss, nicht unbedingt gegeben ist, aber dass wird wahrscheinlich mit dem Format Befehl selber zusammenhängen, denke ich mal.
$DT_ALL für alle anzeigen kunktioniert im Übrigen nicht, da zeigt er immer noch nur alle Removables an, btw