Wenn es dir soweit geholfen hat editier doch deinen ersten Post und ändere das Präfix auf "gelöst".
Danke und Grüsse
AyKay
Wenn es dir soweit geholfen hat editier doch deinen ersten Post und ändere das Präfix auf "gelöst".
Danke und Grüsse
AyKay
Hallo Exotic,
der ControlClick funktioniert gut. In deinem Fall wäre das:
[autoit]ControlClick("Piriform CCleaner", "Sta&rte CCleaner", "Button2")
[/autoit]Der WinwaitActive funktioniert bei mir auch. Bei diesem Befehl wartet das Script bis das Fenster aktiv ist. Mir hat meistens ein normales WinWait gereicht, damit weis man das das Programm geöffnet ist. Wenn du warten willst bis es aktiv ist, würde ich eher empfehlen mit WinActivate und WinWait zu arbeiten. Als Beispiel:
[autoit]WinWait("Piriform CCleaner")
WinActivate("Piriform CCleaner")
EDIT:
Achso, das schöne an controlclick ist, das du das Fenster wenn du es wolltest auch noch verstecken könntest und controlclick würde trotzdem funktionieren. Das liegt daran das du Autoit direkt sagst welches Fenster von dir gemeint ist.
Deshalb wäre mein Ablauf run -> winwait -> controlclick
Grüsse
AyKay
Da ich keine Ahnung habe welches Programm du bedienen möchtest und es für mich nach einer Installationsroutine aussieht kann ich dir folgendes vorschlagen.
1. Hat das Programm vielleicht Hotkeys über die du arbeiten kannst? z.B. ALT+N
2. Du sprichst den einen Button ohne Text an. Meistens hat ein Button aber auch einen hinterlegten Text dann könntest du mal folgendes ausprobieren
ControlClick("MyTitle", "&Next >", "Button")
[/autoit]Und falls du nochmal einen Autoit-Code postest verwende dafür dann den entsprechenden BB-Code
Naja, wer hängt denn einen 5 Ohm Widerstand ohne irgendwas anders an den USB-Port? Zudem kommt ein 5 Ohm Widerstand nicht besonders oft vor. Wenn du drauf aus bist etwas zu zerstören schaffst du es immer. Du kannst auch ein Autoradio an 230V hängen. Ich geh hier einfach von GMV aus...
Hi,
ich weiss ja nicht ob es einfach nicht "schön" wäre es so zu machen, das das Script sich beim Shutdown beendet und beim Neustart einfach erneut startet. Im Start des Programms packst du dann ein Sleep(400000) rein.
Grüsse
AyKay
Hallo Oscar,
das ist ja ganz nett erklärt, aber...
von einem USB Port kommen 5V und zwischen 0,5 und 1A und damit "raucht" auch kein Widerstand ab. Zudem ist die Leistung die an einem Widerstand abfällt keine Verlustleistung, sondern genau so geplant. Eine Verlustleistung ist es, wenn man z.B. eine Klimaanlage anschauen. Man ballert ordentlich Strom rein (als Beispiel 500 W) und bekommt aber nur 400 W als Kühlleistung wieder raus. 100W die das Gerät braucht um die Kühlleistung zu erbringen sind dann ein "Verlust".
Im allgemeinen hat Oscar aber vollkommen recht. Wenn ihr einen Lüfter anschliessen wollt ist es am sinnvollsten einen MB Port dafür zu verwenden. Denn wenn ihr das ganze steuerpar per Software über den USB Port machen wollt, braucht ihr für die Steuerung eine elektronische Schaltung mit einem programmierbaren Chip.
Grüsse
AyKay
Ok, die Logik muss ich jetzt nicht kapieren. Wieso funktioniert es wenn ich "ControlCommand" verwende, aber mit ControlSend nicht?
Ich habe jetzt folgendes funktionierendes Ergebnis.
[autoit]
run("control /name microsoft.notificationareaicons") ; Befehl für Notificationfenster
sleep(1000)
ControlCommand("Notification Area Icons", " ","Button3", "UnCheck", "")
ControlClick("Notification Area Icons", "OK", "Button1")
Allerdings klappt es mit @SW_HIDE leider nicht (kleineres übel).
Trotz allem vielen dank!
Das war nur ein Beispiel. Ich habs auch damit probiert
[autoit]ControlSend("Notification Area Icons", "", "Button3", "{+}")
[/autoit]Allerdings will es auf teufel komm raus das ControlSend nicht machen.
Da stellt sich mir die Frage, wieso ipconfig /all wenn du nur einen Adapter willst? Welche Infos brauchst du?
DU könntest zum Beispiel eine "For" Schleife bauen in der du alles in ein Array lädst und dann gibst du nur die gewünschten Arrays aus.
Hallo Zusammen,
folgendes Problem. Ein Kollege hat das Problem das auf seinem Laptop per Policy immer alle Symbole angezeigt werden. Er hat Adminrechte und darf dies auch ändern. Ich habe ihm deshalb zu meinen Anfangszeiten von Autoit ein kleines Tool geschrieben.
run("control /name microsoft.notificationareaicons") ; Befehl für Notificationfenster
;winwait("Infobereichsymbole") ; warten bis das Fenster offen ist
winwait("Notification Area Icons") ; warten bis das Fenster offen ist
send("+{TAB}") ;send Shift+TAB
send("{SPACE}") ; send Leertaste
send("{ENTER}") ; send Enter
Jetzt ist aber das Problem, das ja nicht immer die Policy geladen wird und dann mein Tool die Symbole wieder einblendet(weil ich mit LEERTASTE toggle)
Ich würde das ganze jetzt gerne so machen, das es wie in einer selbstgebauten GUI die Möglichkeit gibt "CHECKED" oder "UNCHECKED" zu sagen. Und das ganze sollte mit @SW_HIDE laufen.
Ich habe bereits mit "ControlSend" probiert das zu beeinflussen, allerdings reagiert das Fenster darauf nicht
[autoit]
ControlSend("Notification Area Icons", "", "[CLASSNN:Button3]", "+{TAB}")
Mir fehlt irgendwie ein Wink mit dem Zaunpfahl^^
Grüsse
AyKay
Meinst du vielleicht soweas hier:
$rueckgabe = ""
$pid = Run("ipconfig /all","",@SW_HIDE,6)
While 1
; Rückgabe auslesen
If StdOutRead($pid,True) Then $rueckgabe &= StdOutRead($pid)
If StdErrRead($pid,True) Then $rueckgabe &= StdErrRead($pid)
; bei Fehler ist der Process beendet
If @error Then ExitLoop
; und warten, oder wollen wir den Rechner 100% auslasten
Sleep(100)
Wend
Msgbox(0,"",$rueckgabe)
Zuu finden auf [ offen ] Cmd Text auslesen
Gruss AyKay
Ich hatte immer mal wieder Probleme mit Arrays. Probier mal dein Script umzubauen das es wie in der Hilfe alles beinhaltet (Mit error etc.)
[autoit]
Local $t = FileGetTime(@WindowsDir & "\notepad.exe", 1)
If Not @error Then
Local $yyyymd = $t[0] & "/" & $t[1] & "/" & $t[2]
MsgBox(0, "Creation date of notepad.exe", $yyyymd)
EndIf
Ich denke du musst das ganze dann von den Arrays in einen String zusammenfügen
Müsste dann ungefähr so sein?!
[autoit]
$filetime = FileGetTime($file,1,1)
MsgBox(0,"",$filetime[0] & "/" & $filetime[1] & "/" & $filetime[2])
Was kannst du denn mit der Excel.au3 nicht machen?
Echt super Leute. Danke für die Vielen Tips und Hilfen. Das Programm tut jetzt auf jedem Recher was es soll. Einziges Problem ist noch wenn ich das ganze über die Verteilungssoftware verteile legt er die Ini-Files nicht an. Aber das wird ein Problem mit der Software sein und nicht mit dem Script.
Grüsse
AyKay
Hallo Zusammen,
wahnsinn so viele Antworten hatte ich gar nicht erwartet. Danke schonmal. Ja, das mit der Schleife habe ich vergessen rauszunehmen. Und ganz ehrlich hab ich vor lauter Bäumen den Wald nicht mehr gesehen. Danke für die Tips, ich werde sie demnächst ein- und mein Script umbauen. Was mir auf die schnelle aufgefallen ist das ich das Textfile an einen Ort speichere wo nicht jeder Zugriff hat (das passiert wenn ein Admin dem anderen nichts sagt...)
Theoretisch sollte es doch auch möglich sein den Inhalt der Variablen $re in ein Array entsprechend einzulesen ohne über ein File zu gehen, oder? (Ich bin noch nicht allzulange bei Autoit, verzeiht mir "n00b-Fragen")
Gruss
AyKay
Hallo Zusammen,
ich habe ein kleines Script geschrieben und Infos von PC's auszulesen.
Bei mir und bei EINEM anderen Kollegen funktioniert das SCript nach dem kompilieren einwandfrei. Bei einem weiteren Kollegen bricht das Script mit der im Anhang gezeigten Fehlermeldung ab. Rufe ich das Script bei mir über unser Verteilungssystem auf (ein einfacher "Call" -Befehl) habe ich die Fehlermeldung auch. Ich habe das Gefühl das das mit der Array.au3 zusammen hängt?
Hier der Code
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=C:\Temp\Tools\Audit\start_scan.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: AyKay
Script Function:
Dieses Script scannt den aktuellen PC und speichert diese Infos in ein Textfile auf dem Server.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
;######################################
;Includes
;######################################
#include <_NTServices.au3>
#include <file.au3>
#include <Array.au3>
;######################################
;Variablen
;######################################
;Definition Pfade
Global $sauditpath
;Definition Infos
Global $sSophosUpdaterVersion, $sSophosVersion, $sFirewallstatus, $iAdminrights, $sAdminrights, $aFile
Global $re = _getDOSOutput('systeminfo')
;Pfade
$sauditpath = "C:\Temp\Auditfiles\" & @ComputerName
;Infos
$sSysteminfo = $sauditpath & "\systeminfo.txt"
$sInisave = $sauditpath & "\all.ini"
DirCreate($sauditpath)
If FileExists($sBackuppath) Then
FileDelete($sBackuppath)
EndIf
;######################################
;Systeminfo auslesen
;######################################
FileOpen($sSysteminfo)
FileWrite($sSysteminfo, $re)
FileClose($sSysteminfo)
_FileReadToArray($sSysteminfo, $aFile)
For $i = 2 To 33
$split = StringSplit($aFile[$i], ': ', 1)
For $j = 1 To UBound($split) -1
Next
$split[2] = StringStripWS($split[2], 1)
IniWrite($sInisave, "Systeminfo", $split[1], $split[2])
Next
FileDelete($sSysteminfo)
;######################################
;Benutzername und Adminrechte auslesen
;######################################
$iAdminrights = IsAdmin()
If $iAdminrights = "1" Then
$sAdminrights = "ja"
Else
$sAdminrights = "nein"
EndIf
$WMI = ObjGet("WinMgmts:root/cimv2")
$colQuery1 = $WMI.ExecQuery("Select UserName FROM Win32_ComputerSystem")
For $item In $colQuery1
$ID = $item.UserName
Next
$colQuery2 = $WMI.ExecQuery("Select * FROM Win32_NetworkLoginProfile")
For $object In $colQuery2
If $object.Name = $ID Then
$Name = $object.Fullname
EndIf
Next
IniWrite($sInisave, "User", "Adminrights", $sAdminrights)
IniWrite($sInisave, "User", "User-ID", @UserName)
IniWrite($sInisave, "User", "Displayname", $Name)
;######################################
;Sophos auslesen
;######################################
$sSophosUpdaterVersion = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\***", "DisplayVersion")
$sSophosVersion = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\***", "DisplayVersion")
;FileOpen($sSophosinfo)
IniWrite($sInisave, "Sophos", "SophosVersion", $sSophosVersion)
IniWrite($sInisave, "Sophos", "SophosUpdaterVersion", $sSophosUpdaterVersion)
;######################################
;Services überprüfen
;######################################
$sFirewallstatus = _ServiceStatus("MpsSvc")
IniWrite($sInisave, "Service", "firewall", $sFirewallstatus)
;######################################
;DOS Programm
;######################################
Func _getDOSOutput($command)
Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
While 1
$text &= StdoutRead($Pid, False, False)
If @error Then ExitLoop
Sleep(10)
WEnd
Return $text
EndFunc ;==>_getDOSOutput
VIelleicht hat ja jemand von euch eine Idee.
So, ist jetzt komplett gelöst.
Ich habe die Pflichtfelder gelöst mit:
[autoit]
;Pflichtfelder
If $nm_firstname_read = "" Then
MsgBox(16, "Sie haben ein Pflichtfeld vergessen", "Der Vorname des neuen Mitarbeiters ist ein Pflichtfeld")
ContinueLoop
ElseIf $nm_lastname_read = "" Then
MsgBox(16, "Sie haben ein Pflichtfeld vergessen", "Der Nachname des neuen Mitarbeiters ist ein Pflichtfeld")
ContinueLoop
ElseIf $nm_username_read = "" Then
MsgBox(16, "Sie haben ein Pflichtfeld vergessen", "Der Username des neuen Mitarbeiters ist ein Pflichtfeld")
ContinueLoop
EndIf
So kann man jetzt auch wenn man bspweise den Vornamen vergessen hat, diesen Nachtragen und es wird trotzdem alles korrekt dargestellt. Danke Oscar & auch Danke alpines für deine Gedult und hilfsbereitschaft
Ok, das war schonmal eine sehr gute Info. Danke. Ich hatte gedacht, das ich die Variable jedes Mal neu einsetzen kann(Denkfehler).
Dann sollte das Script soweit funktionieren, auch nach mehrfachem ausführen.
Wenn ich jetzt noch hinbekomme das gewisse "Inputs" Pflichtfelder sein müssen ist alles gut.
Hi,
irgendwie reden wir aneinander vorbei. Ich habe hier ein Beispiel. Wenn du dieses Script ausführst erscheint die GUI. Dann trägst du bsp. admin als "Vorname" ein. Drückst du auf "Start" Wird der Inhalt in einer MSGBox ausgegeben. Drückt man jetzt nochmal auf "Start" gibt die MsgBox nur noch "0" aus, egal was eingetragen ist. Das heist das Script liest das Feld irgendwie nicht mehr aus. Der Befehl @SW_HIDE versteckt das Fenster nur und ist meiner Meinung nach "nur" Kosmetik (bitte korrigiere mich wenn ich falsch liege). Und wieso sollte ich den Inhalt erneut per GUICtrlSetData setzen wenn ich den Inhalt einfach genau so wie es drin steht verwenden will?
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
#include <ButtonConstants.au3>
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=h:\1data\public\autoit\forms\new_user.kxf
$Form1_1 = GUICreate("Form1", 1051, 511, 190, 123)
$nm_firstname = GUICtrlCreateInput("nm_firstname", 144, 72, 121, 21)
$nm_lastname = GUICtrlCreateInput("nm_lastname", 144, 112, 121, 21)
$nm_username = GUICtrlCreateInput("nm_username", 144, 152, 121, 21)
$nm_entry = GUICtrlCreateDate("2013/06/05 16:35:27", 144, 192, 186, 21)
$akt_firstname = GUICtrlCreateInput("akt_firstname", 480, 112, 121, 21)
$akt_lastname = GUICtrlCreateInput("akt_lastname", 480, 152, 121, 21)
$akt_username = GUICtrlCreateInput("akt_username", 480, 192, 121, 21)
$domain_acc = GUICtrlCreateCheckbox("", 256, 256, 97, 17)
$LN_acc = GUICtrlCreateCheckbox("", 256, 296, 97, 17)
$ln_grouplist = GUICtrlCreateList("", 72, 328, 273, 149, BitOR($GUI_SS_DEFAULT_LIST,$LBS_MULTIPLESEL))
GUICtrlSetData(-1, "")
$psnext_acc = GUICtrlCreateCheckbox("", 544, 256, 97, 17)
$vpn_acc = GUICtrlCreateCheckbox("", 544, 296, 97, 17)
$telefon = GUICtrlCreateCheckbox("", 544, 336, 97, 17)
$adminlist = GUICtrlCreateList("", 808, 72, 121, 58)
GUICtrlSetData(-1, "")
$admin_pw = GUICtrlCreateInput("admin_pw", 808, 152, 121, 21)
$Start = GUICtrlCreateButton("Start", 800, 272, 193, 73)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$Exit = GUICtrlCreateButton("Exit", 800, 368, 193, 73)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$Label1 = GUICtrlCreateLabel("Vorname:", 56, 72, 49, 17)
$Label2 = GUICtrlCreateLabel("Nachname:", 56, 112, 59, 17)
$Label3 = GUICtrlCreateLabel("Username:", 56, 152, 55, 17)
$Label4 = GUICtrlCreateLabel("Eintritt:", 56, 192, 36, 17)
$Label5 = GUICtrlCreateLabel("Vorname:", 392, 112, 49, 17)
$Label6 = GUICtrlCreateLabel("Nachname:", 392, 152, 59, 17)
$Label7 = GUICtrlCreateLabel("Username:", 392, 192, 55, 17)
$Label8 = GUICtrlCreateLabel("versenden von:", 712, 72, 78, 17)
$Label9 = GUICtrlCreateLabel("Passwort:", 712, 152, 50, 17)
$Label10 = GUICtrlCreateLabel("New Domain Account", 72, 256, 108, 17)
$Label11 = GUICtrlCreateLabel("New Lotus Notes Account", 72, 296, 129, 17)
$Label12 = GUICtrlCreateLabel("New PSNext Account", 376, 256, 108, 17)
$Label13 = GUICtrlCreateLabel("New VPN Account", 376, 296, 94, 17)
$neuer = GUICtrlCreateGroup("neuer Mitarbeiter", 40, 40, 313, 201)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group1 = GUICtrlCreateGroup("Berechtigung übernehmen von", 376, 40, 265, 201)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label14 = GUICtrlCreateLabel("New phone", 376, 336, 59, 17)
$no_reference = GUICtrlCreateCheckbox("Kein Referenzbenutzer", 424, 72, 153, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Start
_test ()
EndSwitch
WEnd
Func _test ()
$nm_firstname = GUICtrlRead($nm_firstname)
MsgBox(0, "Test", $nm_firstname)
EndFunc
PS: Spoiler sind jetzt auch eingebaut
Ja, von mir aus mach ich _main komplett raus. Ich will das auch nicht mehrfach ausführen. Es geht mir darum das ich irgendwie die GUI gerne neustarten würde.
Ziel ist, das
1. die GUI gestartet wird
2. die entsprechenden Daten eingegeben werden
3. Auf "Start" gedrückt wird
4. Die Emails entsprechend versendet werden
5. wenn möglich die GUI erneut ausgefüllt werden kann und das Programm komplett nochmal abläuft
Sollte der Vorname, Nachname oder Username des "neuen Mitarbeiters" fehlen soll eine Fehlermeldung erscheinen und der user hat die Möglichkeit einfach alles zu ergänzen und dann auf "Start" zu drücken.