Beiträge von Racer
-
-
Wäre das nicht eleganter über WMI?
https://www.autoitscript.com/forum/topic/31…unning-service/
lg
Racer
-
vielleicht hilft Dir mein Script - musst Du aber für Deine Bedürfnisse anpassen:
Code
Alles anzeigen;**************************************************************** ; Sucht alle USB-LW laut WMI mit den gegebenfalls zugehörigen ; Laufwerksbuchstaben ; Übergabe: - ; Rückgabe: 2D Array ; Col0 Col1 ; Kingston DTR30G2 USB Device|\\.\PHYSICALDRIVE4 J: ; Samsung Portable SSD T3 USB Device|\\.\PHYSICALDRIVE3 F:|G: ; Hinweis: wird nichts gefunden, wird trotzden ein Array zurückgeliefert ; im Index [0][0] steht immer die Anzahl der gefunden Laufwerke ;**************************************************************** func _wmi_usb_lw () local $disken local $anzahl = 0 local $name local $Mediatype local $ans local $caption local $disknummer local $colItems local $A local $B local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2") dim $dd[1][2] If IsObj($objWMIService) Then $colItems = $objWMIService.ExecQuery('select * from Win32_DiskDrive') If IsObj($colItems) Then For $oItem In $colItems $name = $oItem.Name $Mediatype = $oItem.MediaType $ans = $oItem.InterfaceType $caption = $oItem.Caption if ($ans = "USB" or $ans = "SCSI") and $Mediatype = "External hard disk media" Then $anzahl = $anzahl + 1 ReDim $dd[$anzahl + 1][2] $dd[$anzahl][0] = $caption & "|" & $name ;print ($caption & @TAB & $Mediatype) EndIf Next endif EndIf $dd [0][0]= $anzahl if $dd [0][0] <> 0 Then for $i = 1 to $dd[0][0] $disknummer = StringRight ($dd[$i][0],1) ;print ("disknummer: " & $disknummer & @TAB & $dd[$i][0]) $colItems = $objWMIService.ExecQuery('select * from Win32_LogicalDiskToPartition') If IsObj($colItems) Then For $oItem In $colItems $A = $oItem.Antecedent ;beinhaltet die Disknummer... $B = $oItem.Dependent ;beinhlatet den LW if StringInStr ($A, "Disk #" & $disknummer) <> 0 Then ;print (gettok ($b, "=", 2)) $dd[$i][1] = $dd[$i][1] & gettok ($b, "=", 2) & "|" EndIf Next $dd[$i][1] = StringReplace ($dd[$i][1], '"' , '') if StringRight ($dd[$i][1], 1) = "|" Then $dd[$i][1] = StringLeft ($dd[$i][1], StringLen ($dd[$i][1]) -1) EndIf EndIf Next EndIf Return ($dd) EndFunc ;****************************************************************
lg
Racer
-
viele Wege führen nach Rom...
Ein Möglichkeit ist das Du über WMI die Disk/Partition herausfindest. Das hat noch nichts mit dem LW-Buchstaben zu tun:
Schaue Dir mal vom WMI Win32_DiskDrive, Win32_DiskPartion und Win32_LogicalDiskToPartition an. Ein Wmi-Explorer (oder ähnliches Tool) hilft Dir hier die richtigen Felder zu finden.
Via Diskpart hilft Dir list disk (damit siehst Du Deine Datenträger, dann die Disknr. mit sel disk # auswählen und mit list par die Partition zu selektieren. MIt list vol sieht Du alle Volumes (mit und ohne Laufwerksbuchstaben).
Auch ein hilfreiches Tools list mountvol.exe ... hier siehst Du alle Volumes mit und ohne Buchstaben - muss ja nicht immer ein Buchstabe sein, es kann ja auch ein Mountpoint in ein Verzeichnis sein.
Bedenke auch das Diskpart Adminrechte benötigt....
Ach ja, eine USB-Disk wird unter Windows 7 (USB) anders im WMI angesprochen als unter Windows 10 (SCSI) - vielen Dank liebe Microsoft
lg
Racer
-
Du kannst ein Script Diskpart übergeben: diskpart.exe /s meinscript.dsp
Um einen Laufwerk einen Buchstaben zuzuordnen muss vorher die Disk / Volume / Partition mit select ausgewählt werden und dann kannst Du assgin den Rest erledigen.
Guck'st Du hier: https://www.disk-partition.com/diskpart/assig…etter-4125.html
lg
Racer
-
Ich bin dem Moment mit den Tests unter WinPE fertig geworden.
Um WinHTTP unter WinPE nutzen zu können muss man die Winhttpcom.dll und winhttp.dll in in das %system32% Verzeichnis kopiern (sofern nicht schon vorhanden). Dann funktioniert das Script.
Leider ist noch nicht das gewünscht Ergebnis da, denn ich bekomme vom Webserver die "Default-Webseite" anstatt dem Download
Da muss ich mich noch damit spielen bis es passt!
Auf jedenfall ist mein Problem mit Eurer Hilfe gelöst - vielen Dank an Alle!
lg
Racer
Die MS sagt vieles nicht was dann doch geht
-
Guten Morgen liebe AutoIt'ler!
Ich habe einen kleinen Erfolg: Auf meinen Client hat es zuerst auch mit der $oHTTP.Option(4) = 13056 nicht funkioniert. Erst als ich ein @CRLF eingefügt habe ist es Problemlos gelaufen....
CodeLocal $oHTTP = ObjCreate("winhttp.winhttprequest.5.1") $oHTTP.Open("GET", "https://IP_des_Server/test.cfg" & @CRLF) ;ohne @CRLF gehts nicht! $oHTTP.Option(4) = 13056 $oHTTP.Send() $File = $oHTTP.ResponseText() ConsoleWrite ($File & @CRLF)
so, jetzt kommt WinPE an die Reihe...
lg
Racer
-
-
Sorry für fehlenden Zeilenumbrüche - ist beim kopieren scheinbar verlorgen gegangen!
Danke für die Erklärung - das kannte ich noch nicht!
lg
Racer
-
Ich bin erst jetzt dazugekommen das empfohlene WinHTTP zu testen. Leider sieht es nicht ganz so gut aus (liegt aber eher an mir
CodeLocal $oHTTP = ObjCreate("winhttp.winhttprequest.5.1") $oHTTP.Open("GET", "https://IP_des_Server/test.cfg") $oHTTP.Send()$File = $oHTTP.ResponseText
Die Zeile 2 ist Unternehmensintern und sieht anders aus. Den Link übernehme ich aus dem Browser um Tippfehler zu vermeiden...
Es kommt aber am Ende ein Fehler:
$File = $oHTTP.ResponseText
$File = $oHTTP^ ERRORLeider kenne ich mich damit zu wendig aus...
Mit dem Script
Code
Alles anzeigenFunc _GetRest($sHost, $sPath, $bSSL = True) $hSession = _WinHttpOpen() $hConnect = _WinHttpConnect($hSession, $sHost, $bSSL ? 443 : 80) Local $sHTML = "" If $bSSL Then $sHTML = _WinHttpSimpleSSLRequest($hConnect, "GET", $sPath) Else $sHTML = _WinHttpSimpleRequest($hConnect, "GET", $sPath) EndIf _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hSession) Return $sHTMLEndFunc Endfunc
hatte ich schon mehr Erfolg, zumindest unter Windows 7. Unter WinPE läuft es leider nicht so gut und ich bekomme immer nur 0 heraus, anstatt des gewüschten Datei.
Und wenn ich schon dabei mit, kann mir bitte die Zeile "$hConnect = _WinHttpConnect($hSession, $sHost, $bSSL ? 443 : 80)" mit den letzten Parameter erklären? Was ist das "$bSSL ? 443 : 80" ???
lg
Racer
-
Vielen Dank!
Ich werde das testen und berichten!
lg
Racer
-
Hallo AutoItler!
Ich habe vor länger Zeit einen Loader für eine LiveCD geschrieben. Der basiert noch auf einen HTTP-Download. Jetzt ist es aber an der Zeit das auf HTTPS umzustellen. Und da ist auch mein Problem: Der Download funktioniert nicht wenn das Zertifikat nicht am Client ist.
Um das Problem einzugrenzen habe ich ein kleines Script zum Testen geschrieben:
Spoiler anzeigen
local $url = "https://IP_des_Server/test.cfg" ; Zensur
local $localfile = "c:\test\test.cfg"
local $handle = InetGet ($url, $localfile, 3, 0)mit der Option 3 (Forces a reload from the remote site & Ignore all SSL errors (with HTTPS connections) sollte ein Zertifikatsfehler ja ignioriert werden, tut es aber nicht!
Um mögliche Eigenfehler auszuschliessen, kann ich die Datei auch via HTTP runter laden, es funktioniert auch wenn kein Zertifikatsfehler kommt (sprich auf meinen PC ist alles korrekt eingetragen).
Ein weiter Test mit WGET https://IP_des_Server/test.cfg -Oc:\test\test.cfg --no-check-certificate funktioniert auch....
Um die Frage warum ich nicht das Zertifikat vorab installiere: Das ist eine Henne / EI Problem, denn die Zertifikate vom Loader geladen und installiert werden
Im Forum habe diesen Beitrag gefunden, leider ohne Lösung: InetRead bei REST-Api schlägt fehl
Ideen dazu?
lg
Racer
-
Hallo Sugus!
Ich finde die Idee sehr gut und für den einen oder andern Fall ist eine GUI praktischer als eine Konsole.
Wenn Du den Kopiervorgang selbst mit einen Fortschrittsbalken versieht pept es das Programm etwas auf (meine Meinung). Ich habe dazu ein Script geschrieben das Du, wenn Du möchtest gerne benutzen kannst:
C
Alles anzeigen#include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <WindowsConstants.au3> local $parameter local $fortschritt local $line local $copytext = "Fortschritt: " local $Robocopy local $Progress1 local $text local $i local $tmp #Region ### START Koda GUI section ### Form= $Robocopy = GUICreate("Robocopy", @DesktopWidth / 2 , 36, @DesktopWidth / 4 , 0, $WS_POPUP) $Progress1 = GUICtrlCreateProgress(0, 0, @DesktopWidth / 2, 18) $text = GUICtrlCreateLabel ("", 10 , 19 , @DesktopWidth / 2 -20, 18) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### AutoItSetOption ("TrayIconHide", 1) if $CmdLine[0] = 0 then consolewrite ("Error 1" & @crlf) exit (1) endif for $i = 1 to $CmdLine[0] $parameter = $parameter & $CmdLine[$i] & " " next local $robo = run(@ComSpec & " /c robocopy /NDL /NJH /NJS /NS /NC " & $parameter , "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) while 1 sleep (10) $line = StdoutRead($robo) if StringInStr ($line, "%") <> 0 then $line = StringStripWS ($line , 1) $line = StringReplace ($line, ".", " ") $tmp = Stringleft ($line, 3) $tmp = $tmp + 0 GUICtrlSetData ($text, $copytext & $tmp & "%") GUICtrlSetData ($Progress1, $tmp) endif if ProcessExists ($robo) = 0 then exit Wend
Mein Script ist für Parameterübergabe ausgelegt, kann aber selbstverändlich angepasst werden!
lg
Racer
-
Hallo Leute!
Ich dachte nicht das meine kleine Funktion solche Emotionen hervorruft. Das wollte ich nicht damit bezwecken. Es sollte ein kleines Hilfstool (Funktion) sein für Scripter die öfter Kommandozeilen-Programme schreiben und Parameter übergeben.
Die Grundsatzdiskussion ob es ein DOS-Fenster oder eine Eingabeaufforderung ist hier nicht wirklich angebracht.
@Musashi: wenn ich Zeit habe werde ich die Funktion überarbeiten und meine "speziellen Pseudobefehle" entfernen. Da bin ich schon bei Dir das es Anfänger etwas schwerer haben könnten.
Also, alles Cool und eine schöne Woche!
lg
Racer
-
Ich möchte nicht pingelig sein, aber :
So etwas wie ein DOS-Fenster/eine DOS-Eingabeaufforderung etc. gibt es seit Windows XP nicht mehr ! Was Du meinst, ist die cmd.exe (auch Windows Eingabeaufforderung genannt), nicht wie früher die COMMAND.COM.
Auszug aus : https://de.wikipedia.org/wiki/Cmd.exe
Bei der cmd.exe handelt es sich um eine native Win32-Anwendung, daher ist der Begriff DOS hier irreführend. Es wird zwar eine Kommandozeile für DOS-Befehle zur Verfügung gestellt, die selbst allerdings nicht unter DOS als Betriebssystem läuft.
Falls Du eine echte DOS-Anwendung laufen lassen willst, benötigst Du einen Emulator wie DosBox.
Gruß Musashi
Du hast natürlich recht - es ist keine "Dos" ... aber lustigerweise wissen alle was gemeint ist!
lg
Racer
PS: bei mir ist das sowieso die DOSe
-
Hallo AutoIt'ler!
Nachdem ich selbst immer wieder kleine Tools benötige die als "Dos-Programm" laufen sollen/müssen und meistens auch noch mit Parameter zu steuern sind, habe ich mir keine kleine Funktion geschrieben die übergeben Argrumente auswertet.
Im Gunde ist das nicht anders als eine Erleichterung für den Programmier um seine erwarteten Eingaben überprüfen zu lassen.
Code
Alles anzeigen#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Change2CUI=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** local $optionen = "su" ;welche Parameter es geben soll; u=username s=system; Reihenfolge im Rückarray so wie die Optionen ;(von links nach rechts) eingetragen werden. Beispiel: ;Index 1 = /u ;Index 2 = /s ;Egal in welcher Reihenfolge die Parameter übergeben worden sind local $parametersymbol = "/" ;Wie Parameter gekennzeichnet wird $ret = _Parameter ($cmdline, $parametersymbol, $optionen) ;Parameterauswertung if IsArray ($ret) = 1 Then ;Wird ein Array zurückgegeben = OK for $i = 1 to UBound($ret) - 1 print ("Index " & $i & @tab & $ret[$i]) Next Else if $ret = 1 then ;Help ist ausgewertet worden print ("Parameter: /u:username /s:system") print ("") print ("Fehlermeldungen:") print ("-1 ... Anzahl der uebergebenen und gesuchten Parameter stimmt nicht ueberein") print ("-2 ... mindestens eine Uebergabeparameter-Kennung nicht gefunden z.B.: /c") print ("-3 ... Der erste Parameter muss ein Array sein") print ("-4 ... Array hat keinen Werte") print ("-5 ... Der Delimiters darf nur aus einem Zeichen bestehen") print ("-6 ... Die Parametersuche muss mindestens ein Zeichen beinhalten") Else print ("Error: " & $ret) ;Wird KEIN Array und kein 1 zurückgegeben sondern einen Errorwert = Fehler EndIf EndIf ;******************************************************************************************** ; Parameterauswertung Übergaben aus der Console ($cmdline) ; Übergabe: Array der Parameter $Cmdline ; Übergabe: Parametersymbol z.B.: / oder - ; Übergabe: Nach welchen Parametersymbolen gesucht werden soll als String "uprw" ; ; Achtung: Wird ein Fehler gefunden wird KEIN Array zurückgegeben!!!! ; Variable mit IsArray überprüfen ; ; Rückgabe: Array mit den Daten - Index beginnt bei 0 ; Rückgabe: -1 ... Anzahl der übergebenen und gesuchten Parameter stimmt nicht überein ; Rückgabe: -2 ... mindestens eine Übergabeparameter-Kennung nicht gefunden z.B.: /c ; Rückgabe: -3 ... Der erste Parameter muss ein Array sein ; Rückgabe: -4 ... Array hat keinen Werte ; Rückgabe: -5 ... Der delimiters darf nur aus einem Zeichen bestehen ; Rückgabe: -6 ... Die Parametersuche muss mindestens ein Zeichen beinhalten ; Rückgabe: 1 .... Für Helpanzeige ; ; Beispiel: ; local $optionen = "upr" ;welche Parameter es geben soll ; local $parametersymbol = "/" ;Wie Parameter gekenntzeichnet wird ; $ret = _Parameter ($cmdline, $parametersymbol, $optionen) ;Parameterauswertung ; if IsArray ($ret) = 1 Then ;Wird ein Array zurückgegeben = OK ; RunAswait ($ret[1], @ComputerName, $ret[2], 1, $ret[3]) ; Else ; print ("Errorlevel: " & $ret) ;Wird KEIN Array zurückgegeben sondern einen Errorwert = Fehler ; exit ($ret) ; EndIf ;******************************************************************************************** func _Parameter ($cmd , $teiler, $opt_suche) if IsArray ($cmd) = 0 Then Return (-3) EndIf if stringlen ($teiler) <> 1 Then Return (-5) EndIf if stringlen ($opt_suche) = 0 Then Return (-6) EndIf local $line local $i, $o, $ret, $tmp, $a ;diverse Variablen für die Verabeitung in der Funktion local $parateil local $teiler_anzahl ;wieviele Parameterteiler gibtes ? local $opt_char ;das einzelne Zeichen von der $opt_suche local $micro_para_teiler = ":" ;das ist der Teiler zwischen der Kennung und dem Parameter selbst z.B: ein Doppelpunkt /u:username local $full_data local $check = False ;check ob es das Zeichen auch gibt dim $opt_w[ubound($cmd)] if $cmd[0] <> 0 then ;Nur wenn auch Parameter übergeben worden sind for $i= 1 to ubound($cmd) -1 ;Die einzelen Parameterübergaben zu einem String umwandeln $line = $line & $cmd[$i] & " " Next $line = StringStripWS ($line, 3) ;führende und nachkommende Leerstellen entfernen $teiler_anzahl = cntvar ($line, $teiler) ;wieviele Parameterteiler gibt es if $line = $teiler & "?" Then ;Prüfen ob ein Help angeforder worden ist... Return 1 ;1 als Help Kennzeichnung zurück gegen EndIf if $teiler_anzahl <> stringlen ($opt_suche) Then ;Stimmt die Anzahl der Commandparameter nicht gesuchten überein -> Error Return (-1) EndIf dim $opt_w[$teiler_anzahl + 1] for $o = 1 to $teiler_anzahl ;Schleife für die übergebenen Parameter $opt_char = StringLower(StringMid ($opt_suche, $o, 1)) ;das einzelne Zeichen von der $opt_suche (nur Kleinbuchstabe) $check = false ;Check zurücksetzten for $i = 2 to $teiler_anzahl + 1 ;vor dem ersten Teiler gibt es nichts => beginnt mit 2 und hört mit +1 auf $parateil = gettok ($line, $teiler , $i) ;einzelner Parameter mit Kennung if gettok ($parateil, $micro_para_teiler, 1) = $opt_char Then $check = True ;Teiler triff zu = OK $a = 1 ;Dieser Schritt ist notwendig da beim Trennzeichen zwischen Parameterkennung und den $tmp = "" ;eigentlichen Daten das Zeichen nochmal vorkommen könnte! Do $a = $a + 1 if gettok ($parateil, $micro_para_teiler, $a) <> "" then $tmp = $tmp & StringStripWS(gettok ($parateil, $micro_para_teiler, $a), 3) & $micro_para_teiler EndIf until gettok ($parateil, $micro_para_teiler, $a) = "" $opt_w[$o] = StringLeft ($tmp, StringLen ($tmp) -1) ;Als letztes Zeichen wird ein $micro_para_teiler angehängt => entfernen EndIf Next if $check = False Then ;Wenn ein Übergabeparameterkennung z.B.: /u nicht gefunden wird => Error Return (-2) EndIf Next $opt_w[0] = ubound ($opt_w) return ($opt_w) ;Rückgabe als Array endif return (-4) ;Array ist leer EndFunc ;******************************************************************************************** ;********************************************** ; Wie oft gibt es den String im String ; Übergabe: der zu druchsuchende String ; Übergabe: der zu suchende String ; Rückgabe: Trefferanzahl ;********************************************** func cntvar ($string, $suche) local $a , $da, $summe, $start, $do if $string = "" or $suche = "" then return false endif $start = 1 $summe = 0 do $do = StringInStr ($string, $suche, 0, 1, $start) if $do <> 0 then $summe = $summe + 1 $start = $do + 1 endif until $do = 0 return ($summe) endfunc ;********************************************** ;********************************************** ; Tokentrenner ohne Array !! ; Übergabe: Der String der untesucht wird ; Übergabe: Der String der den ersten String teilt ; Übergabe: Das wievielte Teil ; Ausgabe: Den gesuchten Token oder eine Leerstring (=Fehler) ;********************************************** func gettok ($string, $teiler, $teilnummer) local $neu , $tmp $tmp = stringsplit ($string, $teiler, 1) if $tmp[0] >= $teilnummer then $neu = $tmp[$teilnummer] else $neu = "" endif return $neu endfunc ;********************************************** ;******************************************************* Func print ($text) ConsoleWrite ($text & @crlf) EndFunc ;*******************************************************
Bevor mich jetzt einige steinigen: Ja, ich weiß da sind kleine Funktionen dabei die man so nicht unbedingt braucht (Print, GetTok,...) - man verzeihe mir - ich komme von einer anderen Scriptsprache und habe die paar "Befehle" sehr lieb gewonnen
Zur Funktion:
Es muss im Hauptprogramm die Variablen $optionen und $parametersymbol definiert werden. Die Optionen geben an welche Küzel für die Parameter verwendet werden: /s oder /u oder /k ....
Die Variable $parametersymbol gibt die Markierung an, also das "/". Es kann auch sein das man lieber ein "-" hat oder "*" - ganz nach Geschmack!
Wenn alles OK ist steht im Array $ret die Ergebnisse. Ansonsten ist $ret kein Array und hat "nur" eine Fehlernummer
Ich habe viele Bemerkungen in das Script geschieben, so das es (hoffentlich) für alle Nachvollziehbar ist.
Beispiele aus dem Dos-Fenster:
Feedback ist gewünscht!
lg
Racer
-
Hallo!
Um die Frage Mikki zu beantworten: Ja, das geht mit Robocopy und einem Progressbar!
Man muss nur Robocopy die Parameter so einstellen das er in der Console nur mehr die Prozentangabe ausgibt:
Code$pid = run(@ComSpec & " /c robocopy /NDL /NJH /NJS /NS /NC /w:5 /r:5 " & $parameter , "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Bei der Varable $Parameter werden die Quelleverzeichnis, Zielverzeichnis oder Dateinamen angegben - so wie in der Console halt auch. Es können auch noch weitere Parameter mitgegeben werden!
Wenn du jetzt den Output der Console einliest bekommst Du nur die % - Zahlen. Beispiel:
Code
Alles anzeigen;************************************************************* ; Progressbar ; Übergabe: PID ; Übergabe: ProgessbarGUI ; Übergabe: ProzentGUI ; Rückgabe: - ;************************************************************* func _progress ($pid, $gui1, $gui2) local $ret local $data local $zahl local $diff $ret = StdoutRead ($pid) if $ret <> "" Then $data = StringRegExp ($ret, "\d+.\d%", 2) if IsArray ($data) = 1 Then $zahl = gettok ($data[0], "." ,1) + 0 if $zahl <> $diff Then GUICtrlSetData ($gui1, $zahl) GUICtrlSetData ($gui2, $zahl & "%") $diff = $zahl EndIf EndIf EndIf EndFunc ;*************************************************************
In einer Schleife noch ein bißchen den Prozess überwachen ($pid) und schon klappt das mit Robocopy!
lg
Racer
-
Noch eine bessere Lösung!
Danke BugFix!
-
Vielen Dank!
Hatte ich nicht gewusst!
vielen Dank für die Erklärungen!
lg
Racer
-
Hallo!
Durch Zufall bin ich auf ein kleines Anzeigenproblem in einem Label gestossen:
C
Alles anzeigen#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 238, 149, 203, 164) $Label1 = GUICtrlCreateLabel("Label1", 16, 16, 196, 97) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUICtrlSetData ($Label1, "Text & sfls") While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd
Es geht um das darzustellende & . Es wird bei mir nicht als Text korrekt angezeigt. Manchmal ist es ein Leerschritt, manchmal wird der nächste Buchstabe unterstrichen, auf keinen Fall kommt das &
Mache ich aus dem Text ein "Text && sfls" kommt zumindest ein & !
AutoItVersion: 3.3.15.0
lg
Racer