Heyho, ich reiss mir gleich alle (restlichen) Haare aus!
Ich bau mir ein Hauptprogramm, von der aus ich ein 2. Programm (eigene Exe) starte.
Das Hauptprogramm erstellt dynamisch Buttons in eine GUI, für jede Exe, die sich im BasisOrdner des Hauptprogramms befinden.
Jeder erstellte Button trägt den Namen einer Exe und soll bei Klick die entsprechende Exe starten. Dies funktioniert auch über GuiGetCursorInfo() ganz gut, ABER:
Das Programm startet in unregelmäßiger Anzahl mehrfach, OBWOHL ich das 2. Program mittels _Singleton() abgesichert habe.
Es startet also mal 3-fach, beim nächsten Versuch wird es dann 8 mal gestartet usw, bis jetzt war 8 das meisste.
Ich komm nicht dahinter, warum?! Aus dem Hauptprogramm heraus starte ich die 2. Anwendung so
[autoit]ShellExecute($_SCRIPT_FOLDER & ControlGetText("","",$this[4]) & "_MVL.exe", " -start")
[/autoit]
Mittlerweile weiss ich, dass es irgendwie am 2. Programm liegen muss. Wenn ich im 2. Programm den $CmdLine Kram auskommentiere funktioniert es problemlos.
Aber ich will Parameter übergeben. und daran scheitert es offensichtlich. Was mach ich falsch?
MfG Lo..
Edit:
[autoit]; hier ist das Hauptprogramm
; ich hoffe es läuft beu euch
#include <Array.au3>
#include <String.au3>
#include <GuiConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <file.au3>
_Singleton("Mastergui")
[/autoit][autoit][/autoit][autoit]Global $_SCRIPTVERSION = "1.1.00"
Global $_SCRIPT_BUTTON_FONT[5] = [4, "Gabriola", "Georgia", "Arial", "Lucida Console"]
Global $_SCRIPT_FOLDER = @DesktopDir & "\MVL\"
;~ Global $_SCRIPT_FOLDER = @UserProfileDir & "\MvL__\"
;~ Global $_SCRIPT_INI_FILE = $_SCRIPT_FOLDER & "MultiTool_von_Lottich.ini"
Global $_SCRIPT_GUI_HEIGHT, $_SCRIPT_GUI_BREITE, $_SCRIPT_GUI_HEIGHT_EX, $_SCRIPT_COUNT_EXEFILE, $_SCRIPT_GUI, $_SCRIPT_BTN_OPEN_INI
Global $_BTN_CTRL_POS_LINKS, $_BTN_CTRL_POS_BREIT
Dim $_SCRIPT_GUI_BUTTONS[1]
_MainGui()
[/autoit][autoit][/autoit][autoit]Func _MainGui()
#Region ; Variablen der _MainGUI
$_SCRIPT_GUI_HEIGHT = 60
$_SCRIPT_GUI_BREITE = 200
$_BTN_CTRL_POS_LINKS = 20
$_BTN_CTRL_POS_BREIT = 160
$_SCRIPT_GUI_HEIGHT_EX = _Count_ExeFiles(1) ; ermittelt die Extra-Höhe, abhängig von der Anzahl existierender ExeFiles
$_SCRIPT_COUNT_EXEFILE = _Count_ExeFiles(0) ; enthält das Array der vorhandenen ExeFiles ( Anzahl und Namen )
If IsArray($_SCRIPT_COUNT_EXEFILE) Then ReDim $_SCRIPT_GUI_BUTTONS[$_SCRIPT_COUNT_EXEFILE[0] + 1] ; ReDim, weil ExeFiles zur Laufzeit hinzu kommen könnten
Local $_BTN_CTRL_HEIGHT, $_BTN_CTRL_BORDER_HEIGHT, $_BTN_CTRL_TEXT
Local $VOben = $_SCRIPT_GUI_HEIGHT - 16
Local $vLinks = $_BTN_CTRL_POS_LINKS - 1
Local $VRechts = $_BTN_CTRL_POS_LINKS + $_BTN_CTRL_POS_BREIT + 1
Local $VUnten = $_SCRIPT_GUI_HEIGHT + $_SCRIPT_GUI_HEIGHT_EX - 19
#EndRegion
$_SCRIPT_GUI = GUICreate("Multitool", $_SCRIPT_GUI_BREITE, $_SCRIPT_GUI_HEIGHT + $_SCRIPT_GUI_HEIGHT_EX)
$_SCRIPT_BTN_OPEN_INI = GUICtrlCreateButton("INI", 5, 5, 30, 25)
#Region ; Dynamisch erstellte Buttons
If IsArray($_SCRIPT_COUNT_EXEFILE) Then
For $i = 1 To $_SCRIPT_COUNT_EXEFILE[0]
$_BTN_CTRL_HEIGHT = ($_SCRIPT_GUI_HEIGHT - 45) + ($i * 30)
;~ $_BTN_CTRL_TEXT = StringTrimRight($_SCRIPT_COUNT_EXEFILE[$i],
$_BTN_CTRL_TEXT = StringTrimRight($_SCRIPT_COUNT_EXEFILE[$i], 4)
$_SCRIPT_GUI_BUTTONS[$i] = GUICtrlCreateButton($_BTN_CTRL_TEXT, $_BTN_CTRL_POS_LINKS, $_BTN_CTRL_HEIGHT, $_BTN_CTRL_POS_BREIT, 25)
GUICtrlSetFont(-1, 16, 600, "", $_SCRIPT_BUTTON_FONT[1])
Next
EndIf
#EndRegion
#Region ; Dynamisch erstellter Rahmen rings um die Buttons
If IsArray($_SCRIPT_COUNT_EXEFILE) Then
$_BTN_CTRL_BORDER_HEIGHT = ($_SCRIPT_COUNT_EXEFILE[0] * 30) + 20
GUICtrlCreateLabel("", 10, ($_SCRIPT_GUI_HEIGHT - 25), 180, 2, $WS_BORDER)
GUICtrlCreateLabel("", 10, $_SCRIPT_GUI_HEIGHT - 32 + $_BTN_CTRL_BORDER_HEIGHT, 180, 2, $WS_BORDER)
GUICtrlCreateLabel("", 10, ($_SCRIPT_GUI_HEIGHT - 25), 2, $_BTN_CTRL_BORDER_HEIGHT - 5, $WS_BORDER)
GUICtrlCreateLabel("", 190, ($_SCRIPT_GUI_HEIGHT - 25), 2, $_BTN_CTRL_BORDER_HEIGHT - 5, $WS_BORDER)
EndIf
#EndRegion
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
;~ Case $_SCRIPT_BTN_OPEN_INI
;~ ShellExecute($_SCRIPT_INI_FILE)
EndSwitch
If _IsPressed(01) Then
$this = GUIGetCursorInfo()
If IsArray($this) Then
If $this[0] > $vLinks And $this[0] < $VRechts And $this[1] > $VOben And $this[1] < $VUnten And $this[4] <> 0 Then
;~ ShellExecute($_SCRIPT_FOLDER & ControlGetText("","",$this[4]) & "_MVL.exe", " -start")
ShellExecute($_SCRIPT_FOLDER & ControlGetText("","",$this[4]) & ".exe", " -start")
EndIf
EndIf
EndIf
WEnd
EndFunc ;==>_MainGui
Func _Count_ExeFiles($var = 0);$var <> 0 gibt die GUI-Höhe an, wird $var = 0 werden die Anzahl und Namen der Exe-Files als Array zurückgegeben
Local $aRet, $this = _FileListToArray($_SCRIPT_FOLDER, "*.exe")
If IsArray($this) Then
$aRet = $this[0] * 30
If $var = 1 Then
Return $aRet
Else
Return $this
EndIf
Else
Return 0
EndIf
EndFunc ;==>_Count_ExeFiles
; ..:: END OF FILE ::..
; Minimalbeispiel des 2. Programms, muss mit Parameter aufgerufen werden...
#include <File.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
If @Compiled Then
_ArrayDisplay($CmdLine)
If $CmdLine[0] = 1 Then
If $CmdLine[1] <> "-start" Then Exit MsgBox(0,"Fehler", "Das Programm kann nicht einzeln gestartet werden!")
Else
Exit MsgBox(0,"Fehler", "Das Programm kann nicht einzeln gestartet werden!")
EndIf
EndIf
_Singleton("bliblablub_Instanz")
Global $_SCRIPTVERSION = "1.0.00"
Global $hMainGUI = GUICreate("Multitool v ", 600, 400, -1, -1, BitOR($WS_SYSMENU, $WS_MINIMIZEBOX))
GUISetState(@SW_SHOW)
While Sleep(50)
$_GUI_MSG = GUIGetMsg()
Switch $_GUI_MSG
Case -3
Exit
EndSwitch
WEnd
Edit2: Nach jedem nachträglichen editieren wird die Autoit Syntax zerschossen....