@UliK
Das von dir verlinkte Programm enthält keinen Source. Da Problem ist, dass es nichts bringt sich dein Programm anzusehen, da man Codetechnisch nicht weiter kommt. Ich bin sicher der TE hat bereits eine gewisse Vorstellung davon wie das Programm aufgebaut sein soll. Vielleicht wäre es ganz gut wenn du uns den Source zur Verfügung stellst, damit ließe sich besser arbeiten. ![]()
Beiträge von Yjuq
-
-
-
-
Komisch, die von dir aufgelisteten Probleme habe und hatte ich nie

-
Ach peinlich,... Ich habe da 2 Rechtschreibfehler eingebaut.
Zeile 37: CustomPaint(hWnd)
--> Da habe ich das $ Zeichen vor der Variable $hWnd vergessen...Zeile 52: .WndProc = DllCallbackGetPtr($hCustomProc)
--> Es müsste eigentlich .hWndProc heißen...Aber ich habe noch ein anderes anliegen. Meinem Control würde ich gerne IDs verteilen. Das geht bei der Funktion _WinAPI_CreateWindowEx() mit dem $hMenu Parameter. Kann ich irgendwie feststellen welche IDs schon vergeben sind? Wollte keine doppelten IDs vergeben und bei jedem neuen Control um eins hochzählen. Natürlich müssen auch die Controls berücksichtigt werden die vorab mit GUICtrlCreate...() erstellt worden sind. Da fehlt mir drz. ein Ansatzpunkt.
€dit *1:
Dazu habe ich schon ein Ansatz gefunden. Mit _WinAPI_EnumChildWindows() kann man sich alle Child Windows (also auch alle Controls) einer GUI ausgeben lassen. Jetzt muss ich nur noch irgendwie aus den Handles die IDs herausfinden, damit ich den größten vergebenen ID ermitteln kann...€dit *2:
Habe jetzt auch eine Funktion gefunden die genau das macht was ich will: _WinAPI_GetDlgCtrlID()
Naja, da ich mein Problem jetzt selber lösen konnte... [gelöst] -
Jetzt nicht mehr

Spoiler anzeigen
[autoit]#include <EditConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>$Hinzufuegen = GUICreate("Test", 508, 146, 366, 413)
[/autoit] [autoit][/autoit] [autoit]
; Von der INI die Anfangsposition ziehen
$Input1 = GUICtrlCreateInput(IniRead("system.ini", "POS", "ID", "1"), 16, 72, 121, 21, $ES_READONLY) ; Style hinzugefügt da ja nur hochgezählt werden soll...
$Input2 = GUICtrlCreateInput("Name", 192, 72, 121, 21)
$Input3 = GUICtrlCreateInput("Stückzahl", 368, 72, 121, 21)
$Artikel = GUICtrlCreateLabel("ID", 16, 48, 58, 19)
GUICtrlSetFont(-1, 8, 800, 0, "@Arial Unicode MS")
$Name = GUICtrlCreateLabel("Name", 192, 48, 36, 19)
GUICtrlSetFont(-1, 8, 800, 0, "@Arial Unicode MS")
$Label1 = GUICtrlCreateLabel("Stückzahl", 368, 48, 61, 19)
GUICtrlSetFont(-1, 8, 800, 0, "@Arial Unicode MS")
$Titel = GUICtrlCreateLabel("Hinzufügen", 184, 16, 128, 22)
GUICtrlSetFont(-1, 10, 800, 0, "@Arial Unicode MS")
$Button1 = GUICtrlCreateButton("Speichern", 208, 104, 75, 25)
GUICtrlSetFont(-1, 9, 800, 0, "@Arial Unicode MS")
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
;~ GuiSetState(@SW_Hide,$Hinzufuegen)
;~ GuiSetState(@SW_SHOW,_Start())
ExitCase $Button1
[/autoit] [autoit][/autoit] [autoit]
$Input1Save = GUICtrlRead($Input1)
$Input2Save = GUICtrlRead($Input2)
$Input3Save = GUICtrlRead($Input3)If $Input2Save And $Input3Save Then
[/autoit] [autoit][/autoit] [autoit]
; Die ID wird als Section angegeben:
;~ IniWrite ( "system.ini", "ID", "", $Input1Save )
IniWrite ( "system.ini", "POS", "ID", $Input1Save +1) ; Die Position hochzählen...
IniWrite ( "system.ini", "ID " & $Input1Save, "Name", $Input2Save )
IniWrite ( "system.ini", "ID " & $Input1Save, "Stückzahl", $Input3Save )
MsgBox(64,"MHS-Medizintechnik","Artikel wurde erfolgreich hinzugefügt")
GUICtrlSetData($Input1, $Input1Save +1)
EndIf;~ GuiSetState(@SW_Hide,$Hinzufuegen)
[/autoit] [autoit][/autoit] [autoit]
;~ GuiSetState(@SW_SHOW,_Start())EndSwitch
[/autoit]
WEndDu kannst INI Dateien auch auslesen, so ist dass ja nicht

-
Hier mal Quick & Dirty:
Spoiler anzeigen
[autoit]#include <EditConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>$Hinzufuegen = GUICreate("Test", 508, 146, 366, 413)
[/autoit] [autoit][/autoit] [autoit]
$Input1 = GUICtrlCreateInput("1", 16, 72, 121, 21, $ES_READONLY) ; Style hinzugefügt da ja nur hochgezählt werden soll...
$Input2 = GUICtrlCreateInput("Name", 192, 72, 121, 21)
$Input3 = GUICtrlCreateInput("Stückzahl", 368, 72, 121, 21)
$Artikel = GUICtrlCreateLabel("ID", 16, 48, 58, 19)
GUICtrlSetFont(-1, 8, 800, 0, "@Arial Unicode MS")
$Name = GUICtrlCreateLabel("Name", 192, 48, 36, 19)
GUICtrlSetFont(-1, 8, 800, 0, "@Arial Unicode MS")
$Label1 = GUICtrlCreateLabel("Stückzahl", 368, 48, 61, 19)
GUICtrlSetFont(-1, 8, 800, 0, "@Arial Unicode MS")
$Titel = GUICtrlCreateLabel("Hinzufügen", 184, 16, 128, 22)
GUICtrlSetFont(-1, 10, 800, 0, "@Arial Unicode MS")
$Button1 = GUICtrlCreateButton("Speichern", 208, 104, 75, 25)
GUICtrlSetFont(-1, 9, 800, 0, "@Arial Unicode MS")
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
;~ GuiSetState(@SW_Hide,$Hinzufuegen)
;~ GuiSetState(@SW_SHOW,_Start())
ExitCase $Button1
[/autoit] [autoit][/autoit] [autoit]
$Input1Save = GUICtrlRead($Input1)
$Input2Save = GUICtrlRead($Input2)
$Input3Save = GUICtrlRead($Input3)If $Input2Save And $Input3Save Then
[/autoit] [autoit][/autoit] [autoit]
; Die ID wird als Section angegeben:
;~ IniWrite ( "system.ini", "ID", "", $Input1Save )
IniWrite ( "system.ini", "ID " & $Input1Save, "Name", $Input2Save )
IniWrite ( "system.ini", "ID " & $Input1Save, "Stückzahl", $Input3Save )
MsgBox(64,"MHS-Medizintechnik","Artikel wurde erfolgreich hinzugefügt")
GUICtrlSetData($Input1, $Input1Save +1)
EndIf;~ GuiSetState(@SW_Hide,$Hinzufuegen)
[/autoit] [autoit][/autoit] [autoit]
;~ GuiSetState(@SW_SHOW,_Start())EndSwitch
[/autoit]
WEndDie ID-Angabe wird als Sektion genutzt. So kannst du die Items später über die ID wieder ausgeben lassen. Zudem kannst du die INI-File einfach anhand der ID durchlaufen und nach dem "Name" oder "Stückzahl" suchen. Was immer dein Herz begehrt.
-
Servus Community!

Ich hänge an einem Problem wo ich nicht mehr weiter weiß. Ich versuche ein eigenes Control zu schreiben. Ich weiß dass es die Möglichkeit gibt einfach ein vorhandenes Control (z.B. das AutoIt Graphic Control) mit _WinAPI_SetWindowLong() zu "hooken" (weiß nicht wie man es nennt). Will ich aber nicht, ziel soll es sein das Control von Anfang an mit _WinAPI_CreateWindowEx() zu erstellen.Die Klasse wird registriert, aber die Erstellung des Controls schlägt fehl. Leider spuckt mir _WinAPI_GetLastError() keinen Fehlercode entgegen. Aber ein Handle bekomme ich trotzdem nicht. Hier der Source:
[autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]#include "CustomControl.au3"
[/autoit][autoit][/autoit][autoit]
#include <WinAPI.au3>Global $hGUI, $hCustom
[/autoit][autoit][/autoit][autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]$hGUI = GUICreate('MainWindow', 350, 250, -1, -1, $WS_OVERLAPPEDWINDOW)
[/autoit][autoit][/autoit][autoit]
GUISetState()$hCustom = _WinAPI_CreateWindowEx(0, $CUSTOM_WC, 0, BitOR($WS_CHILD, $WS_VISIBLE), 10, 10, 100, 100, $hGUI)
[/autoit][autoit][/autoit][autoit]
ConsoleWrite($hCustom & @CRLF & '! ' & _WinAPI_GetLastError() & @CRLF); ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]While GUIGetMsg() <> -3
[/autoit][autoit][/autoit][autoit]
WEnd; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit]Benötigt wird noch die CustomControl.au3. In der definiere ich mein Control:
CustomControl.au3
[autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>OnAutoItExitRegister(__CUSTOM_FREE__)
[/autoit] [autoit][/autoit] [autoit]Global Const $WNDCLASS = 'uint Style;ptr hWndProc;int ClsExtra;int WndExtra;ptr hInstance;ptr hIcon;ptr hCursor;ptr hBackground;ptr MenuName;ptr ClassName'
[/autoit] [autoit][/autoit] [autoit]Global Const $CUSTOM_WC = 'CustomControl'
[/autoit] [autoit][/autoit] [autoit]Global Const $CS_GLOBALCLASS = 0x4000
[/autoit] [autoit][/autoit] [autoit]
Global Const $CS_HREDRAW = 0x0002
Global Const $CS_VREDRAW = 0x0001Global Const $hCustomProc = DllCallbackRegister(CustomProc, 'LRESULT', 'HWND;UINT;WPARAM;LPARAM')
[/autoit] [autoit][/autoit] [autoit]CustomRegister()
[/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Func CustomPaint($hWnd)
[/autoit] [autoit][/autoit] [autoit]
Local $tRect = _WinAPI_GetClientRect($hWnd)
Local $tPS = DllStructCreate($tagPAINTSTRUCT)
Local $hDC = _WinAPI_BeginPaint($hWnd, $tPS)_WinAPI_SetTextColor($hDC, 0x000000)
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_SetBkMode($hDC, $TRANSPARENT)
_WinAPI_DrawText($hDC, 'Hello World!', $tRect, BitOR($DT_SINGLELINE, $DT_CENTER, $DT_VCENTER))
_WinAPI_EndPaint($hWnd, $tPS)
EndFuncFunc CustomProc($hWnd, $uMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Switch $uMsg
Case $WM_PAINT
CustomPaint(hWnd)
Return
EndSwitchReturn _WinAPI_DefWindowProc($hWnd, $uMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc CustomRegister()
[/autoit] [autoit][/autoit] [autoit]
Local $tClassName = DllStructCreate('WCHAR str[' & StringLen($CUSTOM_WC) +1 & ']')
Local $tWC = DllStructCreate($WNDCLASS)$tClassName.str = $CUSTOM_WC
[/autoit] [autoit][/autoit] [autoit]With $tWC
[/autoit] [autoit][/autoit] [autoit]
.style = BitOR($CS_GLOBALCLASS, $CS_HREDRAW, $CS_VREDRAW)
.WndProc = DllCallbackGetPtr($hCustomProc)
;~ .hCursor = _WinAPI_LoadCursor(Null, $IDC_ARROW)
.hBackground = _WinAPI_CreateSolidBrush(0xFFFFFF)
.ClassName = DllStructGetPtr($tClassName, 'str')
EndWith_WinAPI_RegisterClass($tWC)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('! ' & _WinAPI_GetLastError() & @CRLF)
EndFuncFunc CustomUnregister()
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_UnregisterClass($CUSTOM_WC, Null)
EndFunc; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Func __CUSTOM_FREE__()
[/autoit] [autoit][/autoit] [autoit]
DllCallbackFree($hCustomProc)
CustomUnregister()
EndFunc; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit]Weiß jemand was ich falsch mache? Ich komme zum erbrechen nicht darauf...
-
Hab's geschaft! Mit einem Workaround lassen sich die ausgewählten Properties tatsächlich in einer For...In...Next Schleife auslesen und verändern. Habe dafür massiv den Code vergewaltigt, klappt aber wunderbar. Nennt mich einen Genie (so stolz war ich seit langem nicht mehr ^^)
Spoiler anzeigen
[autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]#include <AutoItObject.au3>
[/autoit] [autoit][/autoit] [autoit]_AutoItObject_Startup()
[/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Global $oObj = _Object()
[/autoit] [autoit][/autoit] [autoit]For $o In $oObj
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($o() & @CRLF)
NextConsoleWrite(@CRLF)
[/autoit] [autoit][/autoit] [autoit]For $o In $oObj
[/autoit] [autoit][/autoit] [autoit]
$o() = 5
NextFor $o In $oObj
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($o() & @CRLF)
Next; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Func _Object()
[/autoit] [autoit][/autoit] [autoit]
Local $oObject = __Class().Object
$oObject.Alpha = 1
$oObject.Beta = 2
$oObject.Gamma = 3
$oObject.Delta = 4
Return $oObject
EndFuncFunc __Class()
[/autoit] [autoit][/autoit] [autoit]
Local $oClass = _AutoItObject_Class()
$oClass.AddProperty('Alpha')
$oClass.AddProperty('Beta')
$oClass.AddProperty('Gamma')
$oClass.AddProperty('Delta')
$oClass.AddEnum('__Next__', '__Reset__')
Return $oClass
EndFuncFunc __Next__(ByRef $self, ByRef $count)
[/autoit] [autoit][/autoit] [autoit]
Local $asProperty[] = ['Alpha', 'Beta', 'Gamma', 'Delta']
Local $i, $oTmpIf $count = UBound($asProperty) Then
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($asProperty) -1
$oTmp = Execute('$self.' & $asProperty[$i])
_AutoItObject_AddProperty($self, $asProperty[$i], $ELSCOPE_PUBLIC, $oTmp())
NextReturn SetError(1)
[/autoit] [autoit][/autoit] [autoit]
EndIf$count += 1
[/autoit] [autoit][/autoit] [autoit]Return Execute('$self.' & $asProperty[$count -1])
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc __Reset__(ByRef $self, $count)
[/autoit] [autoit][/autoit] [autoit]
Local $asProperty[] = ['Alpha', 'Beta', 'Gamma', 'Delta']
Local $iFor $i = 0 To UBound($asProperty) -1
[/autoit] [autoit][/autoit] [autoit]
_AutoItObject_AddProperty($self, $asProperty[$i], $ELSCOPE_PUBLIC, _Enum_Object(Execute('$self.' & $asProperty[$i])))
Next
EndFunc; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Func _Enum_Object($value)
[/autoit] [autoit][/autoit] [autoit]
Local $oObject = __Class_Enum().Object
_AutoItObject_AddProperty($oObject, '__value__', $ELSCOPE_PRIVATE, $value)
Return $oObject
EndFuncFunc __Class_Enum()
[/autoit] [autoit][/autoit] [autoit]
Local $oClass = _AutoItObject_Class()
$oClass.AddMethod('__default__', '__Enum_Default__')
Return $oClass
EndFuncFunc __Enum_Default__($self, $value = Default)
[/autoit] [autoit][/autoit] [autoit]
$self.__value__ = ($value <> Default ? $value : $self.__value__)
Return $self.__value__
EndFunc; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] -
Jo, kein Problem. Falls Fragen zwischendurch auftauchen darfst du natürlich fragen.
Kannst mir gerne auch eine private Nachricht senden. Habe drz. gute Laune
-
Prinzipiell würde ich erst einmal schauen ob das ohne den Aufruf von AutoIt klappt.
Wenn das Programm so funktioniert wie soll, super! Ansonsten halt umschreiben.
Ansonsten kannst du Batch Code via _RunDos() problemlos ausführen.Allerdings weiß ich nicht warum es sinnvoll sein sollte den Batch Code in AutoIt aufzurufen wenn du
das Programm direkt in AutoIt schreiben könntest. -
Und das hier funktioniert nicht!?
Spoiler anzeigen
[autoit]#include <Process.au3>
[/autoit] [autoit][/autoit] [autoit]Global $sBatch = '@ echo off' & @CRLF & _
[/autoit] [autoit][/autoit] [autoit]
'If exist "C:\Dropbox\Server\befehle\minecraft on" goto onM' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\tekkit on" goto onT' & @CRLF & _
'echo "Version 1.01_01"' & @CRLF & _
':top' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\start minecraft.befehl" goto startM' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\stop minecraft.befehl" goto stopM' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\restart minecraft.befehl" goto reM' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\start tekkit.befehl" goto startT' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\stop tekkit.befehl" goto stopT' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\restart tekkit.befehl" goto reT' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\restart server.befehl" goto reS' & @CRLF & _
'If exist "C:\Dropbox\Server\befehle\start cmd extra.befehl" goto cmd' & @CRLF & _
'ping -n 6 127.0.0.1 > null' & @CRLF & _
'goto top' & @CRLF & _
':startM' & @CRLF & _
'del "C:\Dropbox\Server\befehle\start minecraft.befehl"' & @CRLF & _
'echo ON > "C:\Dropbox\Server\befehle\minecraft on"' & @CRLF & _
'cd "C:\Dropbox\Server\Minecraft"' & @CRLF & _
'start "" "C:\Dropbox\Server\minecraft\craftbukkit-1.7.9-R0.1.jar"' & @CRLF & _
'goto top' & @CRLF & _
':stopM' & @CRLF & _
'del "C:\Dropbox\Server\befehle\stop minecraft.befehl"' & @CRLF & _
'del "C:\Dropbox\Server\befehle\minecraft on"' & @CRLF & _
'taskkill /IM javaw.exe /T /F' & @CRLF & _
'goto top' & @CRLF & _
':reM' & @CRLF & _
'del "C:\Dropbox\Server\befehle\restart minecraft.befehl"' & @CRLF & _
'taskkill /IM javaw.exe /T /F' & @CRLF & _
'cd "C:\Dropbox\Server\Minecraft"' & @CRLF & _
'start "" "C:\Dropbox\Server\minecraft\craftbukkit-1.7.9-R0.1.jar"' & @CRLF & _
'goto top' & @CRLF & _
':startT' & @CRLF & _
'del "C:\Dropbox\Server\befehle\start tekkit.befehl"' & @CRLF & _
'echo ON > "C:\Dropbox\Server\befehle\tekkit on"' & @CRLF & _
'cd "C:\Dropbox\Server\Tekkit"' & @CRLF & _
'start "" "C:\Dropbox\Server\tekkit\launch.bat"' & @CRLF & _
'goto top' & @CRLF & _
':stopT' & @CRLF & _
'del "C:\Dropbox\Server\befehle\stop tekkit.befehl"' & @CRLF & _
'del "C:\Dropbox\Server\befehle\tekkit on"' & @CRLF & _
'taskkill /IM java.exe /T /F' & @CRLF & _
'goto top' & @CRLF & _
':reT' & @CRLF & _
'del "C:\Dropbox\Server\befehle\restart tekkit.befehl"' & @CRLF & _
'taskkill /IM java.exe /T /F' & @CRLF & _
'cd "C:\Dropbox\Server\Tekkit"' & @CRLF & _
'start "" "C:\Dropbox\Server\tekkit\launch.bat"' & @CRLF & _
'goto top' & @CRLF & _
':reS' & @CRLF & _
'del "C:\Dropbox\Server\befehle\restart server.befehl"' & @CRLF & _
'shutdown /r /f /t 30' & @CRLF & _
'exit' & @CRLF & _
':onM' & @CRLF & _
'cd "C:\Dropbox\Server\Minecraft"' & @CRLF & _
'start "" "C:\Dropbox\Server\minecraft\minecraft_server.1.7.9.exe"' & @CRLF & _
'goto top' & @CRLF & _
':onT' & @CRLF & _
'cd "C:\Dropbox\Server\Tekkit"' & @CRLF & _
'start "" "C:\Dropbox\Server\tekkit\launch.bat"' & @CRLF & _
'goto top' & @CRLF & _
':cmd' & @CRLF & _
'del "C:\Dropbox\Server\befehle\start cmd extra.befehl"' & @CRLF & _
'start "" "C:\Dropbox\Server\cmd\cmd extra.cmd"' & @CRLF & _
'goto top'_RunDos($sBatch)
[/autoit]Ich bin nicht so fit in Batch, daher führe ich den Code nicht aus da ich nicht genau weiß was da passiert.
Teste du mal selber, wenn der Batch Code richtig geschrieben ist sollte das so laufen. -
Zeig mir doch mal bitte dein Batch Code.
Eigentlich dürfte das ohne Probleme so funktionieren.€dit: Oder noch besser gleich das Skript mit dem Code den du via _RunDos() ausführst.
-
Hey, ich weiß dass das Thema schon erledigt ist, jedoch habe ich noch eine mögliche Möglichkeit gefunden. Bei dieser kann sogar das Objekt mit der For...In...Next durchlaufen werden. Ich denke es ist erwähnenswert da es ggf. noch anderen suchenden helfen könnte. Die Lösung stellt die Funktion _AutoItObject_AddEnum() dar.
Dort werden 2 Funktionen angegeben die dafür sorgen dass nur ausgewählte Elemente (in diesem Fall Properties) durchlaufen werden. Die erste Funktion (der Parameter $sNextFunc) durchläuft alle Elemente. Der zweite Parameter ($sResetFunc) ist eigentlich gar nicht nötig, die dort angebende Funktion wird als erstes aufgerufen. Man kann da noch ein paar Sachen vorab verwaltet wenn man möchte. Z.B. wenn man ein System hat in verschiedenen For-Schleifen andere Properties auszugeben.
Beide Funktionen müssen exakt 2 Parameter enthalten. Einmal der Verweis zu dem Objekt ($self) und einmal zu dem Iterator. Hier ist es wichtig das unbedingt den zweiten Parameter via ByRef übergeben wird da sonst der Iterator (z.B. beim zählen) nicht verändert werden kann.
In der Hilfe steht zwar dass der letzte optionale Parameter nicht zu gebrauchen ist, aber das teste ich noch aus. Natürlich gibt es jetzt noch ein anschauliches Beispiel um die ausgewählten Properties dynamisch in einer For-Schleife abzurufen:
Spoiler anzeigen
[autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]#include <AutoItObject.au3>
[/autoit] [autoit][/autoit] [autoit]_AutoItObject_Startup()
[/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]; Array mit den Properties-Bezeichner.
[/autoit] [autoit][/autoit] [autoit]
Global Const $asProperty[] = ['Alpha', 'Beta', 'Gamma', 'Delta']
Global $iElement; Einfaches AutoIt Objekt
[/autoit] [autoit][/autoit] [autoit]
Global $oObj = _AutoItObject_Create()
_AutoItObject_AddProperty($oObj, 'Alpha', $ELSCOPE_PUBLIC, 1)
_AutoItObject_AddProperty($oObj, 'Beta', $ELSCOPE_PUBLIC, 2)
_AutoItObject_AddProperty($oObj, 'Gamma', $ELSCOPE_PUBLIC, 3)
_AutoItObject_AddProperty($oObj, 'Delta', $ELSCOPE_PUBLIC, 4)
; Hier der Enum
_AutoItObject_AddEnum($oObj, 'NextProperty', 'ResetProperty'); ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]; Alle Elemente durchlaufen.
[/autoit] [autoit][/autoit] [autoit]
For $iElement In $oObj
ConsoleWrite(' ' & $iElement & @CRLF)
Next; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]_AutoItObject_Shutdown()
[/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]; Der zweite Parameter muss in jedem Fall ByRef übergeben werden.
[/autoit] [autoit][/autoit] [autoit]
Func NextProperty($self, ByRef $iterator); Sobald der Iterator alle Array Elemente durchlaufen hat soll der Schleifendurchlauf abgebrochen werden.
[/autoit] [autoit][/autoit] [autoit]
; Dafür muss ein Error Code zurückgegeben werden, ansonsten läuft es einfach weiter.
If $iterator = UBound($asProperty) Then Return SetError(1)
$iterator += 1 ; Das ist wohl klar...Return Execute('$self.' & $asProperty[$iterator -1]) ; Inhalt des Elements zurück geben.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFunc; Da nicht gebraucht reicht es beides per ByVal zu übergeben.
[/autoit] [autoit][/autoit] [autoit]
; So meckert auch nicht die SciTE wenn man die Parameter nicht nutzt.
Func ResetProperty($self, $iterator)
EndFunc; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit]Ob sich mit einem Workaround auch die Properties so in der For-Schleife ändern lassen kann ich noch nicht sagen. Arbeite daran, wäre wirklich praktisch wenn das so ginge. Vielleicht hat ja einer von euch eine Idee dazu?

-
Super, dann kann ich die Funktion gerade mal bei deinen Update testen.
Lese mich gerade sowieso noch in deine Änderungen ein. Hehe
Mal schaun, Feedback gibt's später. -
Mach dir nichts raus, ich trage auch mittlerweile eine Brille

Naja, eigentlich ziehe ich sie nur auf wenn ich Auto fahre...
-
Ach Mensch... Schau doch mal in der Referenz nach, da steht es doch schon fast unübersehbar.
https://www.autoitscript.com/autoit3/docs/f…s/GUICreate.htmDarüber hinaus sollten Leerstrings nicht für den Style und ExStyle angegeben werden. Benutze lieber -1 für den Standard-(Ex)Style.
Der letzte Parameter ist für die Angabe der Parent-GUI gedacht.€dit: Sorry, den Post habe ich zu spät gelesen.
-
Frage: Warum benutzt du eine "Dummy-GUI"? Brauchst du doch gar nicht...
Siehe dir mal den Style $WS_POPUP an!
-
Sorry dass die Antwort erst so spät kommt. Das ließe sich mit Execute() realisieren.
Bei dem Skript macht BugFix dass auch so: AutoIt-Object -- dynamische Wertezuweisung an Properties -
Final Fantasy? Da gibt's doch die Al Bhed Sprache. Vielleicht ist das in dieser verschlüsselt

Ich hatte dazu mal ein Skript geschrieben um solche Dinge zu übersetzen
€dit: Ne sorry, zamorazhimat ist leider nicht in Al Bhed geschrieben. Aber hinter die Bedeutung komme ich früher oder später noch.
