Die aktuelle 7za.exe und 7z.dll müssen vorhanden sein, z.B. im SkriptDir.
Echt witzig ist, dass bei der Installationsversion die 7za.exe NICHT installiert wurde. In der Portable Version ist sie enthalten. - Muss man nicht verstehen.... ![]()
Die aktuelle 7za.exe und 7z.dll müssen vorhanden sein, z.B. im SkriptDir.
Echt witzig ist, dass bei der Installationsversion die 7za.exe NICHT installiert wurde. In der Portable Version ist sie enthalten. - Muss man nicht verstehen.... ![]()
'C:\Program Files\7-Zip\7z.exe'
DAS ist der Grund. Es geht nicht mit der installierten Version (habe ich bei mir gerade mal getestet). Portable Version funktioniert.
Evtl. Rechteprobleme beim Zugriff auf den Programm Ordner.
Funktioniert tadellos:
Local $sPath7z = "C:\portable\7zip\App\7-Zip\7z.exe"
Local $sTarget = @ScriptDir & '\all_txt.tar'
Local $sSource = @ScriptDir & '\*.txt'
Local $sCmd = StringFormat('%s a %s %s', $sPath7z, $sTarget, $sSource)
Run($sCmd, @ScriptDir, @SW_HIDE)
EDIT:
tgz ist kein unterstütztes Format, insofern ist es wohl eher eine "Fehlfunktion", wenn dein Skript damit funktioniert. ![]()
Btw: Bei einer Software mit vorhandener und gut dokumentierter Kommandozeilenoption, kann ich keinen Mehrwert in einer UDF erkennen. Parameter mit StringFormat zusammensetzen, Run und fertig!
Hast du das Fenster mit WinActivate("DUMo") erkannt und aktiviert?
Ja, das funktioniert.
Local $hWnd = _ActivateDUMo("C:\Users\BugFix\Downloads\dumo\DUMo.exe")
ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hWnd --> " & $hWnd & @LF)
Func _ActivateDUMo($_sPath)
Local $sVersion = FileGetVersion($_sPath)
Local $sTitle = "DUMo v" & $sVersion
Local $hWnd = WinGetHandle($sTitle), $iCnt = 1
While Not IsHWnd($hWnd) And $iCnt < 10
$hWnd = WinWait($sTitle, "", 1)
$iCnt += 1
WEnd
If Not IsHWnd($hWnd) Then Return MsgBox(0, $sTitle, 'Error while activating DUMo.')
WinActivate($hWnd)
WinWaitActive($hWnd)
Return $hWnd
EndFunc
Alles anzeigen
Wie kann ich das Programm dennoch über Datei->Beenden / Ctrl+q / dem X am Fenster das Programm ordentlich schließen.
Dafür habe ich keine Möglichkeit gefunden. Das Fenster nimmt keine Send-Befehle entgegen.
Wäre ein MouseClick() eine mögliche Lösung?
Auch auf MouseClick reagiert das Fenster nicht. Vermutlich fängt der Ersteller des Programms das alles ab (verständlich, wenn man Automatisierung unterbinden möchte). Hast du die Free-Version? Evtl. reagiert die Pro-Version anders.
Ich habe mein Array-Tut mal noch erweitert um Array als Arrayelement.
Local $aValues[1][2] = [[0]] deklariert ein Array mit einem Element und 2 Spalten. Gleichzeitig wird $aValues[0][0] der Wert "0" zugewiesen (schau mal in mein Array-Tut, s. Signatur).
Local $sFillComboVal = ($aLang[$iLangIndex][1])[0][0]
$aLang[$iLangIndex][1] enthält wiederunm ein 2D-Array. Auf dessen Element [0][0] möchte ich zugreifen, dort ist der String zum direkten Befüllen der Combo gespeichert.
Man könnte das so tun:
$inneresArray = $aLang[$iLangIndex][1]
Local $sFillComboVal = $inneresArray[0][0]
oder mit etwas syntactic sugar spart man sich die extra Variable, covert das Array durch die runden Klammern und kann dann direkt mit den eckigen Klammern den Zugriff auf das innere Array durchführen.
Kannst du mir erklären was/wie genau hier gefiltert wird?
'^(\w+)</option>'
'<option value="([^"]+)">([^<]+)<\/option>'
Ich hatte als erstes gesplittet, danach liegt für jede Sprache eine String vor, der mit "deutsch</option><option value="EINS">1 h....." beginnt.
Das Pattern '^(\w+)</option>' bedeutet folgendes:
^ - starte Suche am Stringanfang
() - in Klammern, hier wird das Ergebnis enthalten sein - Capturing Group
\w - jedes Wortzeichen (a-z), alle Ziffern und Unterstrich
+ - einmal bis beliebige Anzahl
diesem Ausdruck muss </option> folgen.
Das nächste Pattern selektiert Wert und zugehörigen Inhalt.
<option value=" - damit wird die Suche eingeleitet
([^"]+) - Klammern zum Auffangen des Ergebnisses, eckige Klammern: Gruppe von Zeichen, hier ^" bedeutet alles ausser ", + s.o.
"> - diese Zeichen müssen folgen
([^<]+) - wieder Capturing group, gesucht wird alles ausser <
gefolgt von <\/option>
Hier mal meine Lösung.
Es wird ein Array erstellt mit "Sprache" an [1...n][0] und an [0][0] der ComboString.
Das zugehörige Array mit [[ComboString],[Wert1,Inhalt],[Wert2,Inhalt],..] wird an [1...n][1] gespeichert.
Sieht vielleicht etwas verwirrend aus, ist aber effektiv. ![]()
Global $sRead, $iLangIndex
Global $aLang = _PrepareData()
Global $sFillComboLang = $aLang[0][0]
Local $hGui = GUICreate('Test')
Local $comboLang = GUICtrlCreateCombo('', 10, 10, 150)
GUICtrlSetData(-1, $sFillComboLang)
Local $comboVal = GUICtrlCreateCombo('', 240, 10, 150)
GUISetState()
While True
Switch GUIGetMsg()
Case -3
Exit
Case $comboLang
$sRead = GUICtrlRead($comboLang)
If $sRead <> '' Then
_SetValCombo($sRead)
EndIf
Case $comboVal
$sRead = GUICtrlRead($comboVal)
If $sRead <> '' Then
MsgBox(0, $sRead, _GetValue($sRead))
EndIf
EndSwitch
WEnd
Func _PrepareData()
Local $sTxt = '<option disabled=""></option><option disabled="" class="SelectSeparator">deutsch</option><option value="EINS">1 hier steht etwas</option><option value="ZWEI">2 auch hier steht etwas</option><option value="DREI">3 auch hier steht etwas</option><option value="VIER">4 auch hier steht etwas</option><option value="FUENF">5 auch hier steht etwas</option><option value="SECHS">6 auch hier steht etwas</option><option value="SIEBEN">7 auch hier steht etwas</option><option value="ACHT">8 auch hier steht etwas</option><option value="NEUN">9 auch hier steht etwas</option><option value="ZEHN">10 auch hier steht etwas</option><option value="ELF">11 auch hier steht etwas</option><option value="ZWOELF">12 auch hier steht etwas</option><option value="DREIZEHN">13 auch hier steht etwas</option><option value="VIERZEHN">14 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">englisch</option><option value="ONE">15 auch hier steht etwas</option><option value="TWO">16 auch hier steht etwas</option><option value="THREE">17 auch hier steht etwas</option><option value="VOUR">18 auch hier steht etwas</option><option value="FIFE">19 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">französisch</option><option value="ONEFR">20 auch hier steht etwas</option><option value="TWOFR">21 auch hier steht etwas</option><option value="THREEFR">22 auch hier steht etwas</option><option value="VOURFR">23 auch hier steht etwas</option><option value="FIFEFR">24 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">polnisch</option><option value="ONEPOL">25 auch hier steht etwas</option><option value="TWOPOL">26 auch hier steht etwas</option><option value="THREEPOL">27 auch hier steht etwas</option><option value="VOURPOL">28 auch hier steht etwas</option><option value="FIFEPOL">29 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">russisch</option><option value="ONERU">30 auch hier steht etwas</option><option value="TWORU">31 auch hier steht etwas</option><option value="TREERU">32 auch hier steht etwas</option><option value="VOURRU">33 auch hier steht etwas</option><option value="FIFERU">34 auch hier steht etwas</option><option disabled=""></option><option disabled="" class="SelectSeparator">japanisch</option><option value="ONEJP">35 auch hier steht etwas</option><option value="TWOJP">36 auch hier steht etwas</option><option value="THREEJP">37 auch hier steht etwas</option><option value="VOURJP">38 auch hier steht etwas</option><option value="FIFEJP">39 auch hier steht etwas</option><option disabled=""></option>'
Local $aSplit = StringSplit($sTxt, 'class="SelectSeparator">', 1)
Local $aMatch, $aVal, $aLanguages[1][2] = [[0]], $aValues[1][2] = [[0]]
Local $iCntLang = 0, $iCntVal, $n, $sComboLang, $sComboValue
For $i = 1 To $aSplit[0]
$aMatch = StringRegExp($aSplit[$i], '^(\w+)</option>', 1) ; Sprache & Werte
If IsArray($aMatch) Then
$iCntLang += 1
$aLanguages[0][0] = $iCntLang
ReDim $aLanguages[$iCntLang+1][2]
$aLanguages[$iCntLang][0] = $aMatch[0] ; Sprache
$sComboLang &= $aMatch[0] & '|'
$aVal = StringRegExp($aSplit[$i], '<option value="([^"]+)">([^<]+)<\/option>', 3) ; Werte
$iCntVal = UBound($aVal)/2
ReDim $aValues[$iCntVal+1][2]
$n = 1
$sComboValue = ''
For $j = 0 To UBound($aVal) -2 Step 2
$aValues[$n][0] = $aVal[$j]
$aValues[$n][1] = $aVal[$j+1]
$n += 1
$sComboValue &= $aVal[$j] & '|'
Next
$aValues[0][0] = $sComboValue
$aLanguages[$iCntLang][1] = $aValues
EndIf
$aLanguages[0][0] = $sComboLang
Next
Return $aLanguages
EndFunc
Func _SetValCombo($_sLang)
For $i = 1 To UBound($aLang) -1
If $aLang[$i][0] = $_sLang Then ExitLoop
Next
$iLangIndex = $i
Local $sFillComboVal = ($aLang[$iLangIndex][1])[0][0]
GUICtrlSetData($comboVal, "|" & $sFillComboVal)
EndFunc
Func _GetValue($_sVal)
Local $aValues = $aLang[$iLangIndex][1]
For $i = 0 To UBound($aValues) -1
If $aValues[$i][0] = $_sVal Then Return $aValues[$i][1]
Next
EndFunc
Alles anzeigen
Ich habe das mal getestet. Du kannst zwar das Fenster erkennen und auch aktivieren - aber es reagiert nicht auf Send.
Die Anwendung ist in Delphi geschrieben und das ist bekannterweise automatisierungsfeindlich. Über die Controls kommst du auch nicht zum Ziel, denn es hat nur die folgenden:
! hControl hParent ID Classname ControlText
> 0x000805D2 0x00100700 525778 TJvBitBtn DUMo PRO kaufen
> 0x0009076A 0x00100700 591722 TJvBitBtn Ignorieren
> 0x000A06E0 0x00100700 657120 TJvBitBtn Download
> 0x000A060C 0x00100700 656908 TJvBitBtn Erneuern
> 0x000B05EA 0x00100700 722410 TJvImgBtn Software Update
> 0x000F05B8 0x00100700 984504 TStatusBar 42 Gerät gefunden
> 0x000A05DE 0x00100700 656862 TPanel
> 0x000C0760 0x00100700 788320 TListView
> 0x000A02F6 0x000C0760 0 SysHeader32 DUMo v2.19.0.98
Benutze mal
$hWnd = WinWaitActive('TITEL')
ConsoleWrite('hWnd: ' & $hWnd & @CRLF)
und vergleiche das erhaltene Handle mit den Angaben aus der Info. Ich vermute, dass du kein Handle erhältst, da es das Fenster mit dem abgefragten Titel gar nicht gibt (Abfrage: "DUMo", laut Info ist der Titel: "DUMo v2.18.2.97"). Eigentlich sollte das Fenster erkannt werden, wenn der Suchbegriff der Anfang des Titels ist. Evtl. existieren aber mehrere Fenster die damit anfangen?
Versuchs mal mit dem korrekten Titel.
Ob ich recht habe, ist eigentlich unwichtig. Ich habe hier nur meine Betrachtungsweise wiedergegeben. Und die lautet im Kern: Die Verwendung von $STR_STRIPALL macht die Verwendung anderer Flags obsolet. Ich vermute mal, dass auch noch niemand vorher auf die Idee gekommen ist, dieses Flag mit anderen zu kombinieren.
Was deine Frage bezüglich der Übersetzung angeht - keine Ahnung. Bis auf wenige Rudimente ist mein Umgangsenglisch nicht sehr berühmt. Ich bin berufsbedingt mehr im Fachenglisch zu Hause.
Die Geschichte mit "Kneifzange" hatte ich mal gelesen und das fand ich so markant, dass ich es nicht vergessen habe.
.... man kann ja auch die Funktion der Beschreibung anpassen ![]()
Func _StringStripWS($_sStr, $_iFlag)
If BitAND($_iFlag, 8) Then Return StringRegExpReplace($_sStr, "[\s\x0]", "") ; $STR_STRIPALL
If BitAND($_iFlag, 4) Then $_sStr = StringRegExpReplace($_sStr, "[\s\x0]{1,}", " ") ; $STR_STRIPSPACES
If BitAND($_iFlag, 2) Then $_sStr = StringRegExpReplace($_sStr, "[\s\x0]+$", "") ; $STR_STRIPTRAILING
If BitAND($_iFlag, 1) Then $_sStr = StringRegExpReplace($_sStr, "^[\s\x0]+", "") ; $STR_STRIPLEADING
Return $_sStr
EndFunc
Nun, ich habe das noch nie in der von euch benutzten Deutung gesehen (Überschreiben der anderen Flags, wenn diese gesetzt sind).
Für mich bedeutet (over-rides all other flags), dass keines der anderen Flags genutzt werden muss um deren Wirkung zu erzielen.
Ich vermute mal, hier geht die wörtliche Übersetzung ins Deutsche am Ziel vorbei. Insofern kann ich mir vorstellen, dass die Jungs im EN-Forum auch mit der Anfrage von
@Musashi nicht so richtig was anfangen können. Problem: Umgangs-Englisch trifft wörtliche Übersetzung. ![]()
Um es mal an einem krassen Bsp. zu demonstrieren:
deutsch:
"Erzähl das einem, der sich die Hose mit der Kneifzange anzieht."
identische Bedeutung auf englisch:
"Tell that to the marines."
Du solltest schon ein minimales , lauffähiges Skript bereit stellen. Niemand hat Lust jetzt selbst eine Gui mit Combos zu basteln.
- stelle das Skript bereit
- stelle Musterdaten bereit
z.B. $sDataBox1 = ..... / $sDataBox2 = .....
Dann kann man auch aufzeigen, wie das umzusetzen ist.
Ich habe in meiner Version mal noch einen Klickeffekt (durch Farbwechsel) eingefügt und alle Includes entfernt.
;-- TIME_STAMP 2019-12-08 11:01:08
Opt('MustDeclareVars', 1)
Global $iBtnColUp = 0x33BB33
Global $iBtnColDown = 0x33EE22
Global $hMainGui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-270, 150)
GUISetState() ; set the state BEFORE creating the button!!!
Global $IDBtn1 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 1', 5, 5, 120, 30, $iBtnColUp)
Global $IDBtn2 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 2', 5, 50, 120, 30, $iBtnColUp)
Global $IDBtn3 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 3', 5, 95, 120, 30, $iBtnColUp)
Global $aCursor, $bDown = False, $IDlast
While 1
$aCursor = GUIGetCursorInfo($hMainGui)
If $aCursor[2] = 1 Then ; primary down
If Not $bDown Then
$bDown = _BtnColorSwitch($aCursor[4])
If $bDown Then $IDlast = $aCursor[4]
EndIf
ElseIf $aCursor[2] = 0 Then ; primary up
If $bDown Then
$bDown = _BtnColorSwitch($IDlast, False)
$IDlast = 0
EndIf
EndIf
Switch GUIGetMsg()
Case -3
ExitLoop
Case $IDBtn1
MsgBox(0, 'Testing', 'Button 1 was pressed')
Case $IDBtn2
MsgBox(0, 'Testing', 'Button 2 was pressed')
Case $IDBtn3
MsgBox(0, 'Testing', 'Button 3 was pressed')
EndSwitch
WEnd
Func _BtnColorSwitch($_IDBtn, $_bDown=True)
Switch $_IDBtn
Case $IDBtn1, $IDBtn2, $IDBtn3
Local $iBkCol = $_bDown ? $iBtnColDown : $iBtnColUp
GUICtrlSetBkColor($_IDBtn, $iBkCol)
Return $_bDown
Case Else
Return False
EndSwitch
EndFunc
Func _GuiCtrl_RoundButtonCreate($_hMainGui, $_sText, $_iX, $_iY, $_iWEllipse, $_iHEllipse, $_iBkCol=0xFFE0C0)
Local Const $iCorrect = 6 ; minimum: 6, must be even!!
Local $hBtnGUI = GUICreate('', $_iWEllipse+$iCorrect, $_iHEllipse+$iCorrect, $_iX, $_iY, BitOr(0x40000000, 0x00010000, 0x00000080), -1, $_hMainGui) ; WS_CHILD|WS_TABSTOP|DS_MODALFRAME
Local $ID = GUICtrlCreateButton($_sText, -($iCorrect/2), -($iCorrect/2), $_iWEllipse+(2*$iCorrect), $_iHEllipse+(2*$iCorrect), 0x8000) ; BS_FLAT
GUICtrlSetBkColor(-1, $_iBkCol)
Local $aPos = WinGetPos($hBtnGUI)
Local $aResult = DllCall("gdi32.dll", "handle", "CreateRoundRectRgn", "int", 0, "int", 0, _
"int", $aPos[2], "int", $aPos[3], "int", $_iWEllipse, "int", $_iHEllipse)
If @error Then Return SetError(@error, @extended, 0)
Local $hRgn = $aResult[0]
$aResult = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $hBtnGUI, "handle", $hRgn, "bool", True)
If @error Then Return SetError(@error, @extended, False)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hRgn)
GUISetState(@SW_SHOW, $hBtnGUI)
Return $ID
EndFunc
Alles anzeigen
Ich habe noch eine andere Lösung für dich:
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Local $hMainGui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-270, 150)
GUISetState() ; set the state BEFORE creating the button!!!
Local $IDBtn1 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 1', 5, 5, 120, 30)
Local $IDBtn2 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 2', 5, 50, 120, 30)
Local $IDBtn3 = _GuiCtrl_RoundButtonCreate($hMainGui, 'Button 3', 5, 95, 120, 30)
While 1
Switch GUIGetMsg()
Case -3
ExitLoop
Case $IDBtn1
MsgBox(0, 'Testing', 'Button 1 was pressed')
Case $IDBtn2
MsgBox(0, 'Testing', 'Button 2 was pressed')
Case $IDBtn3
MsgBox(0, 'Testing', 'Button 3 was pressed')
EndSwitch
WEnd
Func _GuiCtrl_RoundButtonCreate($_hMainGui, $_sText, $_iX, $_iY, $_iWEllipse, $_iHEllipse, $_iBkCol=0xFFE0C0)
Local Const $iCorrect = 6 ; minimum: 6, must be even!!
Local $hBtnGUI = GUICreate('', $_iWEllipse+$iCorrect, $_iHEllipse+$iCorrect, $_iX, $_iY, BitOr($WS_CHILD, $WS_TABSTOP, $DS_MODALFRAME), -1, $_hMainGui)
Local $ID = GUICtrlCreateButton($_sText, -($iCorrect/2), -($iCorrect/2), $_iWEllipse+(2*$iCorrect), $_iHEllipse+(2*$iCorrect), 0x8000) ; $BS_FLAT
GUICtrlSetBkColor(-1, $_iBkCol)
Local $aPos = WinGetPos($hBtnGUI)
Local $hRgn = _WinAPI_CreateRoundRectRgn(0, 0, $aPos[2], $aPos[3], $_iWEllipse, $_iHEllipse)
_WinAPI_SetWindowRgn($hBtnGUI, $hRgn)
_WinAPI_DeleteObject($hRgn)
GUISetState(@SW_SHOW, $hBtnGUI)
Return $ID
EndFunc
Alles anzeigen
Ich denke, das hier ist, was du willst:
Global $INI = @ScriptDir & '\test_button.ini'
Global $hGui = GUICreate('Test')
Global $cbReSet = GUICtrlCreateCheckbox('(Re)Set Button', 20, 15, 160)
Global $bt_1 = GUICtrlCreateButton('', 10, 60, 100, 20)
Global $sTitle_Btn1 = IniRead($INI, 'btn1', 'title', 'Frei')
GUICtrlSetData($bt_1, $sTitle_Btn1)
Global $bt_2 = GUICtrlCreateButton('', 10, 90, 100, 20)
Global $sTitle_Btn2 = IniRead($INI, 'btn2', 'title', 'Frei')
GUICtrlSetData($bt_2, $sTitle_Btn2)
GUISetState()
Global $nMsg
While True
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $bt_1
_Check($bt_1, 'btn1')
Case $bt_2
_Check($bt_2, 'btn2')
EndSwitch
WEnd
Func _Check($_ID, $_sSection)
Local $sTitle = GUICtrlRead($_ID)
Local $bSet = BitAND(GUICtrlRead($cbReSet), $GUI_CHECKED), $sExe
If $bSet Then
$sExe = _SelectFile($sTitle, $_sSection)
If @error Then Return
GUICtrlSetData($_ID, $sTitle)
Else
$sExe = IniRead($INI, $_sSection, 'program', '')
EndIf
If $sExe <> '' Then ShellExecute($sExe)
EndFunc
Func _SelectFile(ByRef $_sTitle, $_sSection)
Local $sExe = FileOpenDialog('Programm wählen', @ProgramFilesDir, 'EXE (*.exe)')
If @error Then Return SetError(@error,0,'')
$_sTitle = StringTrimLeft(StringLeft($sExe, StringInStr($sExe, '.', 0, -1)-1), StringInStr($sExe, '\', 0, -1))
IniWrite($INI, $_sSection, 'program', $sExe)
IniWrite($INI, $_sSection, 'title', $_sTitle)
Return $sExe
EndFunc
Alles anzeigen
Das Problem ist etwas umfangreicher:
- der Benutzer kann die Inputs per Maus anwählen
- er kann mit TAB zum nächsten Input springen
Du musst also die Maus einfangen (_MouseTrap) und die TAB-Taste abfangen (z.B. mit GUISetAccelerators auf ein Dummy-Ctrl umrouten).
Die Gültigkeitsprüfung der Eingabe und Weiterleitung zum nächsten Input solltest du, wie schon beschrieben, mit einem Button realisieren.
Man kann zwar auch z.B. das über das Abfangen der Enter-Taste realisieren, aber das übersteigt im Moment deine Möglichkeiten noch deutlich.
Der Benutzer darf das einzelne Input nicht verlassen, bis er eine Eingabe gemacht hat.
Das ist eine sehr vage Beschreibung. Wie definierst du "Eingabe" - ein Zeichen, eine Zeichenkette (mit Mindestlänge von n), oder andere Einschränkungen?
Sinnvoll ist einen Button (z.B. "Weiter") einzubinden. Fokus ist im ersten Input, "Weiter" prüft ob Eingabe erfolgt und korrekt - wenn ja: Fokus setzen nächstes Input etc.
ZitatNichts für ungut @BugFix, "Fehler" passieren halt und ich hätte die Test-EXE ja nicht ausführen müssen.
LOL, die angeführte msgbox.au3 war eine Musterdatei auf meinem PC mit
Exit Msgbox(0, "Test", "Test").
Dass es tatsächlich eine Datei mit diesem Namen gibt hatte ich nicht auf der Uhr. ![]()
![]()