GUICtrlSetData < from ini und run("c:\ti.exe (& n1 &) aber wie ?, bitte um ratschlag

  • Hallo zusammen

    Bin blutiger anfänger der Skriptsprache AutoIT dennoch gefällt mir dieses skripting immer mehr.

    Hätte hier zwei anliegen dich ich anders gelöst hätte aber mein momentanes skripting
    know-how lässt zu wünschen übrig. Deshalb bin ich auf eure ratschläge und hilfe wirklich
    angewiesen, und somit widme mich mal diesem Forum. Für hilfe stellungen möchte ich mich
    schon jetzt bedanken, denn auch ich kann hier noch hilfe gebauchen.

    Danke

    MC

    1 ) Hier habe ich ein auswahlmenü erstellt

    GUICtrlSetData(-1, "Laptop Z60m|Laptop Z61m|Laptop Z62m|Laptop Z63m", "leer")

    möchte aber erreichen das die erwähnten Laptops aus einem "Laptopconfig.ini" file kommen würden,
    somit könnte mein geräte zuwachs erweitert werden ohne das ich mein script neu kompilieren müsste.

    2 ) Ich möchte erreichen das wenn zb. "Laptop Z60m" ausgewählt würde dies in eine variable
    geschrieben würde "($n1)" und in ein existierendes externes files geschrieben würde.

    oder wenn möglich wie in meinem demo bespiel das aber nicht korrekt lauft

    run("c:\temp\ti_cons.exe", (& $n1 &) , @SW_MAXIMIZE)

    gerne lege ich hier noch mein bios jetzt erstelltes Skript bei und freue mich auf eure antworten


    #include <GUIConstantsEx.au3>
    Opt('MustDeclareVars', 1)
    Example()

    Func Example()
    Local $menu1, $n1, $n2, $msg, $font, $var

    GUICreate("Info Fenster") ; Fenster Balken

    $font = "Arial"
    GUISetFont(10, 400, 1, $font)
    GUICtrlCreateLabel("wählen Sie das passende Image", 11, 10)

    $menu1 = GUICtrlCreateMenu("About")

    $n1 = GUICtrlCreateCombo("", 11, 30)

    ;$var = IniRead("C:\Temp\myfile.ini", "section2", "key", "NotFound")
    ; MsgBox(4096, "Result", $var)

    GUICtrlSetData(-1, "Laptop Z60m|Laptop Z61m|Laptop Z62m|Laptop Z63m", "leer")

    $n2 = GUICtrlCreateButton("Wiederherstellen", 10, 110, 120)

    GUICtrlSetState(-1, $GUI_FOCUS) ; the focus is on this button
    GUISetState()

    Do
    $msg = GUIGetMsg()
    If $msg = $n2 Then
    MsgBox(0, "Ausgewähltes Image .. ", GUICtrlRead($n1)) ; anzeige gewähltes Image

    ;MsgBox(0, "blabla", & $n1 &)

    run("c:\temp\ti_cons.exe", (& $n1 &) , @SW_MAXIMIZE)
    EndIf
    Until $msg = $GUI_EVENT_CLOSE


    EndFunc ;==>End Example

  • Hallo zusammen
    1 ) Hier habe ich ein auswahlmenü erstellt
    GUICtrlSetData(-1, "Laptop Z60m|Laptop Z61m|Laptop Z62m|Laptop Z63m", "leer")
    möchte aber erreichen das die erwähnten Laptops aus einem "Laptopconfig.ini" file kommen würden,
    somit könnte mein geräte zuwachs erweitert werden ohne das ich mein script neu kompilieren müsste.

    2 ) Ich möchte erreichen das wenn zb. "Laptop Z60m" ausgewählt würde dies in eine variable
    geschrieben würde "($n1)" und in ein existierendes externes files geschrieben würde.

    oder wenn möglich wie in meinem demo bespiel das aber nicht korrekt lauft

    run("c:\temp\ti_cons.exe", (& $n1 &) , @SW_MAXIMIZE)

    gerne lege ich hier noch mein bios jetzt erstelltes Skript bei und freue mich auf eure antworten


    Willkommen im Forum!
    Erstmal, bei Skripten immer die [ autoit]-Tags benutzen, bei größeren den [ spoiler].
    Zu 1.)

    [autoit]

    For $i=1 To IniRead("laptops.ini","global","anzahl",1)
    GUICtrlSetData($n1, IniRead("laptops.ini","laptops",$i, "")
    Next

    [/autoit]


    Zu 2.)

    [autoit]


    Switch GUIGetMsg()
    Case $n2
    MsgBox(0, "Ausgewähltes Image .. ", GUICtrlRead($n1)) ; anzeige gewähltes Image
    If GUICtrlRead($n1) <> "" Then Run("C:\Temp\ti_cons.exe " & GUICtrlRead($n1));ausführen
    IniWrite("laptops.ini","global","aktuell",GUICtrlRead($n1));oder in die Ini-Datei schreiben
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hallo und Danke für deine schnelle Antwort L3viathan2142 !

    Habe diese beiden strings dem Code hinzugefügt zuerst mal einzeln, 1) u 2) und nun beide zusammen, leider geht die auswahlfunktion

    nicht und der zweite teil will auch nicht ganz hinhauen, wollte dich anfragen wie dies aus deiner seite aussieht ?.

    Danke für deine Unterstützung.

    MC

    [autoit]

    #include <GUIConstantsEx.au3>
    Opt('MustDeclareVars', 1)
    Example()
    Func Example()
    Local $menu1, $n1, $n2, $msg, $font, $var, $i

    [/autoit][autoit][/autoit][autoit]

    GUICreate("Info Fenster") ; Fenster Balken

    [/autoit][autoit][/autoit][autoit]

    $font = "Arial"
    GUISetFont(10, 400, 1, $font) ; will display underlined characters
    GUICtrlCreateLabel("Wählen Sie das passende Image", 11, 10)

    [/autoit][autoit][/autoit][autoit]

    $menu1 = GUICtrlCreateMenu("About")
    $n1 = GUICtrlCreateCombo("", 11, 30)

    [/autoit][autoit][/autoit][autoit]

    For $i=1 To IniRead("C:\temp\laptops.ini", "global", "anzahl", 1)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetData($n1, IniRead("C:\temp\laptops.ini","", $i, "")

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit][autoit][/autoit][autoit]

    ;$var = IniRead("C:\Temp\myfile.ini", "section2", "key", "NotFound")
    ;MsgBox(4096, "Result", $var)
    ;GUICtrlSetData(-1, "Laptop Z60m|Laptop Z61m|Laptop Z62m|Laptop Z63m", "leer")
    $n2 = GUICtrlCreateButton("Wiederherstellen", 10, 110, 120)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetState(-1, $GUI_FOCUS) ; the focus is on this button
    GUISetState()
    Do
    ;$msg = GUIGetMsg()
    ; If $msg = $n2 Then
    ; MsgBox(0, "Ausgewähltes Image .. ", GUICtrlRead($n1)) ; anzeige gewähltes Image
    ; MsgBox(0, "blabla", & $n1 &)
    ; run("c:\temp\ti_cons.exe", (& $n1 &) , @SW_MAXIMIZE)
    ; Switch GUIGetMsg()
    Case $n2
    MsgBox(0, "Ausgewähltes Image .. ", GUICtrlRead($n1)) ; anzeige gewähltes Image
    ; If GUICtrlRead($n1) <> "" Then Run("C:\Temp\ti_cons.exe " & GUICtrlRead($n1));ausführen
    IniWrite("c:\temp\laptops.ini","global","aktuell",GUICtrlRead($n1));oder in die Ini-Datei schreiben
    Case $GUI_EVENT_CLOSE
    ;Exit
    ;EndSwitch

    [/autoit][autoit][/autoit][autoit]

    EndIf
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>End Example

    [/autoit]

    Laptops.ini

    [autoit]


    [global]
    anzahl=ibm_z70m
    anzahl=ibm_z71m
    anzahl=ibm_z72m

    [/autoit][autoit][/autoit][autoit][/autoit]

    2 Mal editiert, zuletzt von mauric (6. Mai 2009 um 09:42)

  • Hallo.

    1. Ist ein kleiner Fehler bei dem 1. Teil des Codes von L3viathan2142.

    [autoit]

    For $i=1 To IniRead("laptops.ini","global","anzahl",1)
    GUICtrlSetData($n1, IniRead("laptops.ini","laptops",$i, "")
    Next

    [/autoit]

    Die Klammer von GUICtrlSetData() ist nicht geschlossen. Es müsste so heißen:

    [autoit]

    For $i=1 To IniRead("laptops.ini","global","anzahl",1)
    GUICtrlSetData($n1, IniRead("laptops.ini","laptops",$i, ""))
    Next

    [/autoit]

    Zudem ist die Struktur deiner INI falsch. Ich habe hier zwar keine Möglichkeit, es zu testen, aber probiere folgendes:


    Code
    [global] 
    anzahl=3
    [laptops]
    1=ibm_z70m 
    2=ibm_z71m 
    3=ibm_z72m


    Wie gesagt, ich kann es nicht testen, ich bin in der Schule... Probier es einfach mal, wenn es nicht klappt, dann gucke ich in einer Stunde zuhause danach.


    /Edit: Mir ist noch was aufgefallen. Die Variable $n1 wird in dem ersten Teil von dem Script immer wieder neu belegt. Deswegen müsste es heißen:

    [autoit]

    For $i=1 To IniRead("laptops.ini","global","anzahl",1)
    GUICtrlSetData($n1, GUICtrlRead($n1) & IniRead("laptops.ini","laptops",$i, ""))
    Next

    [/autoit]
  • die sektion global mit dem key anzahl kannst du dir auch schenken...

    sektionen ermitteln...

    [autoit]

    $sections=IniReadSection("filename", "section")

    [/autoit]

    und dann anzahl der elemente ermitteln

    [autoit]

    $anzahl=UBound($sections)

    [/autoit]

    ungetestet, sollte aber gehen... mein motto, ini so übersichtlich wie möglich halten (bei der kleinen ini vielleicht noch nicht relevant)

  • Exgüsi, Sorry, Wie muss ich den Code nun richtig hinstellen ?.

    momentan habe ich dies so gemacht und diese mit $section und Ubound währe sicher noch die bessere lösung.

    Thanks

    [autoit]


    $n1 = GUICtrlCreateCombo("", 11, 30)
    ;For $i=1 To IniRead("laptops.ini","global", "anzahl",1)
    $sections=IniReadSection("laptop.ini", "section")
    $anzahl=UBound($sections), GUICtrlRead($anzahl) & IniRead("laptop.ini","section",$anzahl, ""))
    ;GUICtrlSetData($n1, IniRead("laptops.ini","laptops", $i, ""))
    Next

    [/autoit][autoit]


    [section]
    1=ibm_z70m
    2=ibm_z71m
    3=ibm_z72m
    4=ibm_z73m
    5=ibm_z74m
    6=ibm_z75m

    [/autoit]
  • [autoit]

    $n1=GUICtrlCreateCombo("", 11, 30)
    $section=IniReadSection("laptop.ini", "section")
    For $i=1 To UBound($section)
    GUICtrlSetData($n1, IniRead("laptop.ini", "section", $i, "Not found"))
    Next

    [/autoit]

    so müsste es gehen...

  • Falls das nicht gehen sollte, guck dir mal mein BSP an. Ist fast aus der Hilfe übernommen.

    [autoit]

    #include <GUIConstantsEx.au3>
    GUICreate("")
    $n = GUICtrlCreateCombo("", 10,10)
    $var = IniReadSection("sex.ini","laptop")
    GUICtrlSetData($n,$var[1][1] & "|" & $var[2][1] & "|" &$var[3][1] & "|" & $var[4][1], $var[1][1])
    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Und die Ini sieht so aus:

    [autoit]

    [Laptop]
    1=lol
    2=sex
    3=mit
    4=tieren

    [/autoit]

    Wobei 1,2,3,4.... auch egal sind, was da steht.


    Edit: Das von oliverh funktioniert :P und ist irgentwie schöner als meins ^^

    Edit2: "Erklärung"
    Also, das IniReadSections liest die Sektion Laptop in ein 2Dimensionales Array ein $Var[0][0]. Wobei $var[0][0] Der Maximalen Anzahl der Elemente der Sektionen angiebt.
    $var[2][0] wäre in meinem Fall "2" (Das was im 2. Eintrag vor dem "=" steht. $var[2][1] ist das was hinter dem "=" steht.

    Hoffe das versteht einer ^^ ich bin kein guter Erklärer.

    Einmal editiert, zuletzt von SiLenCa (6. Mai 2009 um 17:00)

  • Hm, ich habe nur gedacht, dass ich es für einen Anfänger leicht machen und ihn nicht mit unbekannten Befehlen bombardieren sollte. Eure sind zwar um Längen besser, meins ist dafür einfacher gehalten und auch für Anfänger verständlich. Achja: Es hilft nicht viel, wenn man sinnlos Code postet, man muss unbekanntes und schweres auch erklären, sonst hat der Fragensteller nur noch mehr Probleme damit oder er versteht es nicht. So sieht es für mich nämlich im Moment aus... Nicht als Angriff sehen, soll gut gemeint sein :rolleyes: