@m-obi:
So habe ich es auch gemacht, mit dem Tool die ID ermittelt und mit dem Befehl sie direkt abgefragt.
@m-obi:
So habe ich es auch gemacht, mit dem Tool die ID ermittelt und mit dem Befehl sie direkt abgefragt.
Das hat prima geklappt, ich danke euch allen für die schnelle Hilfe!!
Liebe Grüße, Milko
Guten Morgen,
ich habe keine Idee, wie ich den Status einer Checkbox oder Inhalt einer Combobox, die sich auf der Oberfläche einer anderen Applikation befindet, abfragen kann. Die Oberfläche besteht aus Editfeldern, Comboboxen und Checkboxen.
Bei den Editfeldern gitb es ja den Befehl "ControlGetText", wo ich gezielt den Title des Fensters der Applikation unterbringen kann. Könnte mir bitte jemand kurz einen Tipp geben, in welche Richtung ich suchen muss.
Vielen Dank im voraus,
Milko
Es handelt sich um Schnittsystem, das Videofiles vom Linux-Server über FTP importieren soll.
Viele Grüße
Hier steht zwar Anfänger neben meinem Namen, mit AutoIt bin ich aber ein bisschen länger unterwegs. Es gibt auch schon Ansätze für mein Problem, wie z.B. Beispiele zur Kommunikation über TCP als Server/Client-Lösung. Ich muss nur irgendwie den Dreh rausfinden. Ich weiß außerdem nicht, wie stark so eine Lösung mit AutoIt die Übertragungsgeschwindigkeit ausbremst. Da hoffe ich auf ein paar Kommentare von Netzwerkexperten hier...
Hi,
ich habe in der Firma folgendes Problem:
eine betagte Windows-Software mit integrierten FTP-Modul soll eine FTP-Verbindung zu einem Linux-FTP-Server aufbauen. Dabei gibt es ab einer bestimmten Verzeichnistiefe einen Verbindungsabbruch, so dass die Ordnerinhalte nicht mehr dargestellt werden können. Folgendes habe ich schon getestet:
* FTP.exe (über CMD) und andere FTP-Clienst haben von Windows (Windows2000) aus kein Problem mit dem Linux-Server
* Die besagte Software mit einem minimalistischen FTP-Modul (nur Felder Username/Passwort/IP-Adresse und Port) kommt mit einem Windows2003-Server (IIS) ohne Probleme zurecht.
* Mit WireShark habe ich festgestellt, dass der Client die Verzeichnisse des Linux-Servers mit vorangestellten Punkten ansteuert (./pub./Test, anstatt /pub/Test) und beim z.B. Doppelklick auf Test kommt dann die Fehlermeldung, dass die Verbindung abgebrochen sei.
* das Programm Netdrive, das FTP-Verzeichnisse als Laufwerk mountet, produziert nasenlang Abstürze.
* Der FTP-Gateway der Software "Jana" hat das Problem nicht lösen können, er gibt die Befehle ein zu eins weiter (./pub./Test)
Und was hat das ganze mit AutoIt zu tun?:-) Na ja, ich dachte, dass ich vielleicht einen sehr einfachen FTP-Server-Emulator zwischen dem Client und dem Server packen kann, der die FTP-Befehle mit Vorfilterung an den Server weitergibt und zurück an den Client sendet, so eine Art minimaler Übersetzer, der erstmal einfach die Punkte bei CWD-Befehlen wegfiltert.
Ich bin mit meinem Latein am Ende und bin für jede kleine Hilfe/Idee sehr dankbar.
Viele Grüße,
Milko
Hi,
ich habe dein Script auf mein Windows-Verzeichnis losgelassen, wirklich sehr schnell. Ich habe nur festgestellt, dass wenn ich das Ergebnis mit _ArrayDisplay ausgeben lasse, dass ab 3999 was komisches mit der Anzeige passiert. Es kann auch an der Funktion _ArrayDisplay liegen...
(Siehe Anhang)
autoit.de/wcf/attachment/2524/
Danke!
Das ganze werde ich mit einem RunAs-Button versehen und es bequem auf der Arbeit benutzen, ohne mich immer neu als Admin anmelden zu müssen.
Carsten:
Es hat nicht gereicht, ich musste noch folgende Änderung vornehmen:
Func btnShowClick()
Local $file = GUICtrlRead($inCmdOut)
If $file <> '' then Run(@COMSPEC & " /c Start " & $file,"",@SW_HIDE)
; war If $file <> '' Then Run($file), wegen $arCPL[58] geändert
EndFunc
Hi Huggy,
ich hätte auch einfach "Ich brauchs für Netzwerk!" ankreuzen können. Aber ich möchte gerne mal diese Gelegenheit nutzen, um mich bei den Betreibern dieser Seite und allen Mitgliedern, die mit ihren Beiträgen zur Lösung meiner Probleme beigetragen haben, herzlichst bedanken.
Viele Grüße, Milko
Hi Holger,
Danke für dein Script.
Bei mir muss ich am Anfang die Variable $Ausgabe="" definiert haben, sonst gibt es die folgende Fehlermeldung:
WARNING: $Ausgabe possibly not declared/created yet
$Ausgabe &= $Drucker[$j] & "|"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
Viele Grüße, Milko
Hi,
ich habe mal eine GUI gebastelt, was bei mir ohne Probleme funktioniert. Die eigentliche WakeOnLan-Routine stammt aber nicht von mir.
#include <GUIConstants.au3>
#include <Constants.au3>
#NoTrayIcon
$ini_Error="" ; INI-Datei vorhanden
$list1=""; Variable um die Liste der PCs vorzubereiten
;INI-File auswerten
$ini_pfad=@ScriptDir & "\wakeonlan.ini"
Dim $name
Dim $ip
Dim $mac
if FileExists($ini_pfad) Then
$name=IniReadSection($ini_pfad,"PC-Name")
if @error=1 then $ini_Error="Fehler in der Section 'PC-Name'" & @CRLF
$ip=IniReadSection($ini_pfad,"IP-Address")
if @error=1 then $ini_Error=$ini_Error & "Fehler in der Section 'IP-Address'" & @CRLF
$mac=IniReadSection($ini_pfad,"MAC-Address")
if @error=1 then $ini_Error=$ini_Error & "Fehler in der Section 'MAC-Address'" & @CRLF
if $ini_Error="" and ($name[0][0]<>$ip[0][0] or $name[0][0]<>$mac[0][0]) _
then $ini_Error=$ini_Error & "Anzahl der Eintraege in den Sections nicht gleich!"
Else
$ini_Error="INI-Datei nicht gefunden!"
EndIf
if $ini_error="" then
Dim $broadcast[$ip[0][0]+1]
for $i=1 to $ip[0][0] ;$broadcast-Adresse definieren
$broadcast[$i]=StringLeft($ip[$i][1],StringInStr($ip[$i][1],".",0,-1)) & "255"
Next
for $i=1 to $name[0][0]; vorbereiten der Liste
$list1=$list1 & $name[$i][1] & "|"
Next
$GUI_WIN=GUICreate("WakeOnLAN v1.05",310,150)
GUISetState(@sw_show,$GUI_WIN)
$list2=GUICtrlCreateCombo($name[1][1],21,23,110,200,BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL,$WS_VSCROLL)) ; die Angabe der Größe ist unter W2K ERFORDERLICH
$list1=Stringright($list1,StringLen($list1)-(stringlen($name[1][1])+1)) ;fuer die Liste den Namen des ersten PCs rausschneiden
$list1=StringLeft($list1,StringLen($list1)-1) ;das Zeichen "|" am Ende rausschneiden
if $list1<>"" Then
GUICtrlSetData(-1,$list1,$name[1][1])
Else
GUICtrlSetData(-1,$name[1][1],$name[1][1])
endif
$button1=GUICtrlCreateButton("PC einschalten",171,20,120,30,-1,-1)
$button2=GUICtrlCreateButton("PC anpingen",171,60,120,30,-1,-1)
$button3=GUICtrlCreateButton("Alle PCs anpingen",171,100,120,30,-1,-1)
While 1
$msg=GUIGetMsg()
If $msg=$GUI_EVENT_CLOSE Then ExitLoop
if $msg=$button1 Then wecken()
if $msg=$button2 Then pingen(0)
if $msg=$button3 Then
pingen(1)
EndIf
WEnd
Else
msgbox(16,"Error-Message:",$ini_Error)
EndIf
Func wecken()
for $selected=1 to $name[0][0] ;Position des ausgewählten Eintrages aus der List2 ermitteln
if $name[$selected][1]= GUICtrlRead($list2) then ExitLoop
Next
$var=Ping($ip[$selected][1],250)
if $var=1 Then
MsgBox(48,"Hinweis","Der PC ist bereits eingeschaltet!")
Else
_WakeOnLAN($mac[$selected][1],$broadcast[$selected])
Msgbox(64,"Hinweis:", "Der Befehl wurde erfolgreich gesendet:" _
& @CRLF & @CRLF & "PC-Name: " & $name[$selected][1] _
& @CRLF & "Mac-Adresse: " & $mac[$selected][1] _
& @CRLF &"Broadcast: " & $broadcast[$selected])
EndIf
EndFunc
Func Pingen($ping_all)
Local $PING_WIN, $ping_list
GUISetState(@SW_DISABLE, $GUI_WIN)
$PING_WIN= GUICreate("Ping", 600, 370, -1, -1, BitOr($WS_BORDER, $WS_CAPTION,$WS_SYSMENU, $WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_MAXIMIZEBOX))
$ping_list = GUICtrlCreateListView('PC-Name |IP-Adresse |Mac-Adresse |Status ', 8, 8, 580, 320, -1, $LVS_EX_FULLROWSELECT)
GUISetState(@SW_SHOW,$PING_WIN)
$ping_button = GUICtrlCreateButton("Schließen", 8, 340, 125, 25, 0)
;************************wenn "Alle PCs anpingen" gewählt wurde*******************************
if $ping_all=1 Then
for $x=1 to $name[0][0]
$var=Ping($ip[$x][1],500)
if $var=0 Then
$var="nicht erreichbar"
Else
$var="OK"
EndIf
$IID = GUICtrlCreateListViewItem($name[$x][1] & '|' & $ip[$x][1] & '|' & $mac[$x][1] & '|' & $var & '|' , $ping_list)
next
Do
$msg2=GUIGetMsg()
until $msg2=$ping_button Or $msg2=$GUI_EVENT_CLOSE
;**************wenn nur der ausgewählte PC angepingt werden soll***********************************
Else
for $selected=1 to $name[0][0] ;Position des ausgewählten Eintrages aus der List2 ermitteln
if $name[$selected][1]= GUICtrlRead($list2) then ExitLoop
Next
Do
$msg2=GUIGetMsg()
$var=Ping($ip[$selected][1],500)
if $var=0 Then
$var="nicht erreichbar"
Else
$var="OK"
EndIf
$IID = GUICtrlCreateListViewItem($name[$selected][1] & '|' & $ip[$selected][1] & '|' & $mac[$selected][1] & '|' & $var & '|' , $ping_list)
until $msg2=$ping_button Or $msg2=$GUI_EVENT_CLOSE
EndIf
GUISetState(@SW_ENABLE, $GUI_WIN)
GUIDelete($PING_WIN)
EndFunc
; ===================================================================
; Functions WakeOnLan $MACAdress=Mac-Address, $Bcast=Broadcast-Address
; ===================================================================
Func _WakeOnLan($MACAddress,$Bcast)
$MACAddress=StringReplace($MACAddress,"-","")
UDPStartUp()
$connexion = UDPOpen($Bcast, 7)
$res = UDPSend($connexion, GenerateMagicPacket($MACAddress))
UDPCloseSocket($connexion)
UDPShutdown()
EndFunc
; This function convert a MAC Address Byte (e.g. "1f") to a char
Func HexToChar($strHex)
Return Chr(Dec($strHex))
EndFunc
; This function generate the "Magic Packet"
Func GenerateMagicPacket($strMACAddress)
$MagicPacket = ""
$MACData = ""
For $p = 1 To 11 Step 2
$MACData = $MACData & HexToChar(StringMid($strMACAddress, $p, 2))
Next
For $p = 1 To 6
$MagicPacket = HexToChar("ff") & $MagicPacket
Next
For $p = 1 To 16
$MagicPacket = $MagicPacket & $MACData
Next
Return $MagicPacket
EndFunc
Ein Beispiel für die INI-Datei:
[PC-Name]
name1=PC01
name2=PC02
[IP-Address]
ip1=172.20.31.1
ip2=172.20.31.2
[MAC-Address]
mac1=00-0c-76-17-b3-6b
mac2=00-0c-76-17-b3-bf
Viele Grüße,
Milko
Hi,
auch ich habe die Email bekommen:
------------------------------------
da euer Admin eure Sicherheit Scheis egal ist ....
-----------------------------------
diese verdammten Arc...löch... sollten erstmal anfangen, Deutsch zu lernen:-)
Dank Adblock hatte/habe ich keine Probleme, nur die AutoIt.de-Admins tun mir leid...
Ich sage nur eins: Genial!
Mir hat auch die Idee mit "Autologon mit Domäenbenutzerrechte" sehr gut gefallen.
Vielen Dank Bernd.
Viele Grüße, Milko
-------------------------------------------------------
Basierend auf Bernds Vorschlag habe ich es folgendermaßen realisiert:
Domain Controller-> Startupscript für Computer:
;~ StartUp.au3
; Anmeldeinformationen
Const $szUser = "UserX"
Const $szPasswd = "UserXpasswort"
Const $szDomain = "Domainame"
; Zwischen Startzeit (Uhr) und Stopzeit (Uhr) automatisch anmelden
$ini_file = @ScriptDir & "\Autologon.ini"
$szALStart = IniRead($ini_file, "SETTINGS", "Start_time", "01:00")
$szALEnd = IniRead($ini_file, "SETTINGS", "Stop_time", "04:00")
$szCurrentTime = @HOUR & ":" & @MIN
$szAutoLogon = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon")
If ($szCurrentTime >= $szALStart) And ($szCurrentTime <= $szALEnd) Then
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon", "REG_SZ", 1)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName", "REG_SZ", $szUser)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultPassword", "REG_SZ", $szPasswd)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultDomainName", "REG_SZ", $szDomain)
If $szAutoLogon = "0" Or $szAutoLogon = "" Then
Shutdown(6)
EndIf
EndIf
Domain Controller-> Logonscript für User:
#NoTrayIcon
If Not IsAdmin() Then
RunAsSet("Adminname","Domainname","Adminpasswort")
Run(@ScriptFullPath, @ScriptDir, @SW_HIDE)
RunAsSet()
Exit
EndIf
RunAsSet()
$Defaultusername = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName")
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon")
if $Defaultusername="UserX" then RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName")
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultPassword")
Sonst hätte die automatische Anmeldung nicht geklappt (Windows2000).
Hi,
wir haben in der Firma 20 PCs (Windows2000 )an einer Domäne. Ich habe vor, die Systeme nachts per WakeOnLan automatisch hoch zufahren, um Software zu installieren bzw. upzudaten. Das Problem ist, dass bei den PCs die automatische Anmeldung deaktiviert ist, so dass um Installationsscripte durchführen zu können, erstmal das Anmeldefenster bedient werden muss.
Es gibt einen anderen Beitrag zu dem Thema (Windows Anmeldebildschirm ausfüllen?), leider ohne ein brauchbares Ergebnis für mich. Mein Vorhaben Schritt für Schritt:
1. Der User (kein Admin) meldet sich ab und schaltet den PC aus.
2. Ich lasse den PC hochfahren, die Software mit Admin-Recht installieren und den PC wieder runterfahren.
3. Der User findet am nächsten Tag nach dem Hochfahren das Anmeldefenster vor, wo er sich ganz normal wieder anmeldet und mit der frisch installierten Software arbeitet.
Gruß, Milko
PS.: Ich habe mir überlegt, im Abmeldescript des PCs die erforderlichen Einträge für Autologin-Funktion in die Registry einzutragen, um nach dem automatischen Einschalten mit dem Script loszulegen und nach der Beendigung der Arbeit die Einträge wieder löschen. Das Problem ist nur, wenn der User den PC zwischendurch neu starten muss.
PS2. Sorry für den langen Beitrag
Bei mir hat es tadellos funktioniert, bravo!
Ich musste natürlich vorher auf die Version 3.2.4.6 updaten (wegen Binary-Funktionen).
Zum Senden kenne ich die Variante "Func _INetSmtpMailCom" und da sind Variablen für Username und Passwort vorgesehen.
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "")
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Cc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
SetError(1)
return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Sent the Message
$objEmail.Send
if @error then
SetError(2)
return $oMyRet[1]
EndIf
EndFunc;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
$HexNumber = Hex($oMyError.number,
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description,3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1); something to check for when this function returns
Return
EndFunc;==>MyErrFunc
Oder siehe INetSendMail
Hi,
es gibt das Programm BAT2EXEC.COM, das Batchdateien in EXE-Dateien konvertiert, so dass man den Inhalt nicht mehr lesen kann. Ich habe aber keine Ahnung, wie sicher das Ganze ist.
Gruß, Milko
Danke!
Ich habe den jetzt zum ersten Mal gesehen. Der Reiter ist nur dann sichtbar, wenn DHCP aktiviert ist.
Andy ist damit natürlich nicht geholfen:-)
Hi,
wo kann man die alternative IP-Adresse einstellen?
Ich habe gerade nachgeschaut, ich kann entweder DHCP oder feste IP-Adresse einstellen.
Gruß, Milko
PS.:Für Netsh hätte ich ein Script da, aber das hilft dir nicht weiter...