Hallo Leute,
vielen Dank an euch Alle.
Ich wünsche alle einen guten Rutsch ins neue Jahr.
Beiträge von ivan_delerdivan
-
-
Hallo,
ich habe eine GUI erstellt und möchte per Mausklick die Eingabefelder aktivieren und nach der Eingabe mit der Entertaste in das nächste Feld kommen. Meine GUI ist eigentlich etwas umfangreicher als hier unten angegeben, dort macht es schon Sinn mit der Maus zu navigieren. Ich weiß, dass man man mit der Tab-taste auch navigieren kann, aber bei mehreren Feldern ist es besser mit der Maus zu navigieren.
Für eure Vorschläge wäre ich euch dankbar.Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>Global $Auslesen
Global $Beenden
Global $VORNAME
Global $NACHNAME
Global $STADT
Global $CUST_SN
Global $NAME1
Global $NAME2
Global $CITY
Global $iFocus; MAIN PROGRAM
HotKeySet ( "{ESC}", Terminate )
Create_GUI()
CUSTOMER()While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Auslesen
$NAME1 = GUICtrlRead($VORNAME)
$NAME2 = GUICtrlRead($NACHNAME)
$CITY = GUICtrlRead($STADT)
MsgBox(0, "IHRE EINGABEN", "Vorname: " & $NAME1 & @CRLF & "Nachname: " & $NAME2 & @CRLF & "Stadt: " & $CITY)
Case $Beenden
Terminate()
EndSwitch
WEndFunc Create_GUI()
$handle1 = GUICreate("GUI",580,290,-1,-1) ; will create a dialog box that when displayed is centered
GUISetBkColor(0xFFFAFA) ; Snow
GUISetFont(20, 400, -1)
GUICtrlSetColor(-1,0x4169E1); RoyalBlue
GUICtrlCreateLabel("My GUI", 150, 20, 320, 100, 0x01)
GUICtrlSetColor(-1,0x4169E1); RoyalBlue
GUISetFont(8, 400, -1)
GUISetFont(12, 400, -1)
EndFunc ;=> Create_GUIFunc CUSTOMER()
Local $msg
GUICtrlCreateLabel("Vorname: ", 25, 100, 300, 25)
$VORNAME = GUICtrlCreateInput("", 185, 100, 300, 25)
GUICtrlCreateLabel("Nachname: ", 25, 140, 300, 25)
$NACHNAME =GUICtrlCreateInput("", 185, 140, 300, 25)
GUICtrlCreateLabel("Stadt: ", 25, 180, 300, 25)
$STADT =GUICtrlCreateInput("", 185, 180, 300, 25)
$Auslesen = GUICtrlCreateButton("Daten übernehmen", 180, 240, 150, 30) ;480, 140, 40, 25
$Beenden = GUICtrlCreateButton("Beenden", 350, 240, 150, 30) ;480, 140, 40, 25
GUISetState()
$iFocus = $VORNAME ;Standard
GUICtrlSetState($iFocus, $GUI_FOCUS) ; setzt den Cursor in das erste Feld.
$msg = 0
EndFunc ;==>CUSTOMERFunc Terminate()
Exit
EndFunc ;=> Terminate -
Vielen Dank an Oscar und Greenhorn,
mit der Zeile " Return 0" in den beiden Functions ist das Problem gelöst. Da ich die Gui gelöscht hatte, habe ich mich nicht um die Schleife gekümmert. Nun funktioniert alles wunderbar.
Greenhorn, vielen Dank für die Tipps und die Optimierung des Scripts.
Viele Grüße
Ivan -
Hallo,
ich habe ein Script mit einer Gui, wo ich über Buttons zwei Tasks auswählen kann. Bei dem Task "Check logs" habe ich mitunter eine Function "check_all()", wenn ich das Script starte, erscheint die Gui, wenn ich den ersten Task auswähle, der Task wird ausgeführt (hier habe ich selbst 2 grafische Buttons in jeweils einet Function "OK" und "not_ok" ertsellt.), aber die Gui wird nicht anschließend wieder aufgebaut und das Script hat den Status "paused" unten rechts in der Tasksleiste von XP. Aber wenn ich die Zeile "check_all()" auskommentiere, wird die Gui nach Ausführung des Tasks aufgebaut. Irgend etwas stört den Gui-Aufbau in der Function "check_all()". Ich habe anstelle von "GuiDelete" mit den Optionen GuiSetState(@SW_HIDE / @SW_SHOW) und den anderen Optionen von GuiSetState ausprobiert, leider alles ohne Erfolg. Ich würde mich sehr freuen, wenn jemand eine Lösung für mein Problem hätte.Vielen Dank im Voraus.
-
Hallo,
vielen Dank gtaspider.
Auch mit dem Befehl Run funktioniert es leider nicht.
Nun habe ich eine Abhilfe gefunden: Ich überschreibe vorher alle Partitionen mit einem leeren Image (restore leeres-image.gho) und danach kann ich über mein AutoIt-Script die leere Partition löschen und neue Partitionen einrichten.
Gruß
Ivan -
Hallo,
ich starte Windows von der Part PE-CD und möchte mit dem tool Gdisk von Symantec alle partitionen löschen und anschließend neue Partitionen erstellen. Da alle Partitionen nich in Benutzung sind, ist das Löschen der Partitionen eigentlich kein Problem.
Wenn ich den Befehl
GDisk32.exe /batch:GDISK-BATCH.txtin einem Command-Fenster absetze, funktioniert er auch einwandfrei, aber wenn ich den Befehl in Autoit wie folgt einbaue:
$return = RunWait("X:\Programs\SYMANTEC\GDisk32.exe /batch:GDISK-BATCH.txt")
bricht der Befehl ab und die Partitionen auf der Platte werden nicht gelöscht. Die Variable $return liefert den Wert 1.
Die Möglichkeit mit WinWait wie unten habe ich auch versucht, leider ohne Erfolg
$return = RunWait("X:\Programs\SYMANTEC\GDisk32.exe /batch:GDISK-BATCH.txt")
WinWait("X:\Programs\SYMANTEC\GDisk32.exe")
WinWaitClose("X:\Programs\SYMANTEC\GDisk32.exe")Die Batchdatei "GDISK-BATCH.TXT" enthält die Stapelbefehle für GDisk (lösche alle Partitionen der HD 1, erstelle eine prim. Partition 30GB, ertstelle eine Ext.-Part. von 60 GB, erstelle eine log. Part. von 20 GB und erstelle eine log. Part. von 40 GB):
........................................................
1 /y /del /all
1 /y /cre /pri /sz:30000 /for /ntfs /q
1 /y /cre /ext /sz:60000 /for /ntfs /q
1 /y /cre /log /sz:20000 /for /ntfs /q
1 /y /cre /log /sz:40000 /for /ntfs /q
.........................................................Die erste Zeile wird nicht zu Ende prozessiert, da ich alle Partitionen immer noch sehen kann.
Wenn ich die Partitonen händisch formatiere und danach mein AutoIt-Programm starte, funktioniert es aber. Da alles automatisch ablaufen soll, habe ich gedacht als Abhilfe entweder die einzelnen Partitionen zu formatieren oder alle Dateien auf den Partitionen zu löschen.
Mein Formatbefehl für die erste Partition in Autoit sieht so aus:
$retf = RunWait(@ComSpec & " /c " & "format C: /FS:NTFS V:WINDOWS /Q < FORMAT-INPUT.txt")
liefert leider auch den Returncode 1.
Die "FORMAT-INPUT.TXT" Datei enhält die für die Eingabe beim Formatbefehl erforderliche Zeilen (Volumename und Bestätigung mit j):WINDOWS
jElegant wäre es natürlich, wenn der GDisk-Befehl in Autoit direkt funktionieren würde. Mit der Möglichkeit die Partitionen vorher zu formatieren oder alle Files auf den Partitionen zu löschen, könnte ich auch leben.
Danke im Voraus.
-
Hallo Ceenen,
beide Scripte sind genial!
Das 2. Script ist das was ich genau gesucht hatte.
Nun kann ich alles mit AUTOIT erledigen, als Krücke brauche ich keine weiteren Tools mehr.Besten Dank und einen schönen Tag.
Gruss
IvanPS: Wer ändert den Status der Themen von "offen" auf "gelöst"?
Dieses Thema kann als gelöst markiert werden. -
Hallo,
danke für die Antworten.
Eigentlich möchte ich Anhand des Volumenamens die Laufwerksbuchstaben ermitteln, weil diese auf den Maschinen unterschiedlich sind. Danach möchte ich in AUTOIT weitere Operationen auf den Laufwerken durchführen, dabei als Laufwerksbuchstabe eine Variable verwenden. Dann spielt es keine Rolle mehr welcher Lufwerksbuchstabe z.B. für das Volume "DATEN" zugeordnet ist.
Man könnte genau so mit der Abfrage einer bestimmten Datei die Laufwerksbuchstaben ermitteln. Volumenamen erschienen mir sicherer, wenn z.B. eine Partition gar keine Dateien enthält.
Mit dem WMIC-Befehl habe ich die Zuordnung Volumename zu Laufwerksbuchstaben in eine Datei geschrieben. Diese Datei war nicht zu verarbeiten, mit dem TYPE-Befehl habe ich die Ausgabe in die Datei "volname.txt" umgeleitet, diese Datei enthält die Volumeinformationen:Name VolumeName
C: WINDOWS
D: DATENIch möchte dann herausfinden mit welchem Laufwerksbuchstaben ich weitere Aktionen z.B. auf der Partition "DATEN" durchführen kann.
Dazu habe ich die Unixtools "grep" und "gawk" eingesetzt. Der u.a. Befehl gibt mir den entsprechenden Laufwerksbuchstaben:C:\UNIXTOOLS\grep WINDOWS C:\volume.txt | C:\UNIXTOOLS\gawk "{print $1}"
Aber in Autoit funktioniert es nicht. Vermutlich die Variable für den "gawk"-Befehl "$1" (bedeutet erste Spalte) macht Probleme in Autoit.
GtaSpider ,
Die Anweisung
Run($Variable)
gibt den kompletten Befehl als Text aus. Ich möchte aber, dass er wie im Kommandfenster ausgeführt wird.msp-holzwurm
Fall b) trifft zu.
Da ich mit Autoit nicht so vertraut bin, habe ich mit Windows-Tools versucht mein Problem zu lösen.
Dein Script scheint mein Problem zu lösen. Es wäre sehr nett, wenn du die Funktion "_poutput" zur Verfügung stellen würdest.Vielen Dank.
Gruss
Ivan -
Hallo,
mit Unixtools für Windows (grep und gawk) habe ich den folgenden Befehl zusammengestellt:
C:\UNIXTOOLS\grep WINDOWS C:\volume.txt | C:\UNIXTOOLS\gawk "{print $1}"
Die Datei "volume.txt" enthält folgende Zeilen:
Name VolumeName
C: WINDOWS
D: DATENWenn ich den Befehl in einem Kommandfenster ausführe, wird der Inhalt der Datei "volume.txt" ausgelesen und die für mich wichtige Info "der Laufwerksbuchstabe" als "C:" ausgegeben. Ich möchte diesen Befehl in AUTOIT verwenden und einer Variable zuweisen.
In der Art wie:
$VARIABLE = "C:\UNIXTOOLS\grep WINDOWS C:\volname.txt | C:\UNIXTOOLS\gawk "{print $1}""So funktioniert es leider nicht. Ich habe unterschiedliche Zeichen zum Maskieren benutzt, aber ohne Erfolg.
Hat jemand eine Idee, wie ich diesen Befehl einer Variable zuweisen kann?
Vielen Dank im Voraus.
Ivan