Silkroad Process Manager

  • Hey Profis,
    ich habe folgendes Problem:
    Das hier habe ich geschafft

    [autoit]


    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 396, 223, 195, 126)
    $Button1 = GUICtrlCreateButton("Get Clients", 3, 6, 91, 22, 0)
    $List1 = GUICtrlCreateList("", 300, 3, 91, 214)
    $Button2 = GUICtrlCreateButton("Get Name", 3, 30, 91, 22, 0)
    $Button3 = GUICtrlCreateButton("Close", 0, 198, 91, 22, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    $process = ProcessList ("silkroad.exe")
    For $i = 1 to $process[0][0]
    GuictrlsetData ($List1,"SRO_Client" & " " & $i)
    Next
    Case $Button2
    $Silkroad = GuictrlRead ($List1)
    MsgBox (0,"",$Silkroad)
    EndSwitch
    WEnd

    [/autoit]


    Nur möchte ich das er jedes existierende Silkroadfenster in SRO_Client_1 , SRO_Client_2 , ect umbennent ( standartname ist SRO_Client.).
    Hat da jemand eine Idee?

    So long,
    Bene

  • Danke..
    Nun bin ich soweit:

    [autoit]


    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 396, 223, 195, 126)
    $Button1 = GUICtrlCreateButton("Get Clients", 3, 6, 91, 22, 0)
    $List1 = GUICtrlCreateList("", 300, 3, 91, 214)
    $Button2 = GUICtrlCreateButton("Get Name", 3, 30, 91, 22, 0)
    $Button3 = GUICtrlCreateButton("Close", 0, 198, 91, 22, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    If ProcessExists ( "sro_client.exe")Then
    $process = ProcessList ("sro_client.exe")
    For $i = 1 to $process[0][0]
    WinSetTitle ( "SRO_Client","","Silkroad_" & $i)
    GuictrlsetData ($List1,"Silkroad_"& $i)
    Next
    Else
    MsgBox (16+48,"Error","Silkroad not running!")
    EndIf
    Case $Button2
    $silkroad = Guictrlread ( $List1 )
    WinClose ($silkroad)
    EndSwitch
    WEnd

    [/autoit]


    Aber es möchte einfach nicht das Fenster schließen?!
    Was habe ich falsch gemacht...?

  • Ja , aber wie kann ich das Programm "wissen" lassen welcher Client grade angewählt ist und welcher Pid dieser Client hat?
    Ich enschudlige mich für den Spamm!

    • Offizieller Beitrag

    Ja , aber wie kann ich das Programm "wissen" lassen welcher Client grade angewählt ist und welcher Pid dieser Client hat?
    Ich enschudlige mich für den Spamm!

    Indem du PID und zugehörigen Titel in einem Array verwaltest. Lies den Titel aus der Liste, suche im Array nach der PID für diese Liste.

  • Sorry , könntest du mir das bitte zeigen/erklären!
    Ich bin noch nicht so gut in sachen Arrays...

  • Hi,

    Im moment sieht dein Button2 so aus:

    [autoit]

    Case $Button2
    $silkroad = Guictrlread ( $List1 )
    WinClose ($silkroad)

    [/autoit]

    Was passiert aber, wenn in deiner $List1 gar nichts drinsteht?
    Genau, der Variable $Silkroad wird ein Leerstring zugeordnet, also ist $Silkroad = ' '
    Danach wird der Befehl Winclose(' ') ausgeführt.
    Das hat zur folge, dass das aktive Fenster geschlossen wird.
    Da das aktive Fenster dann dein Programm ist, wird das geschlossen.

    Genau das selbe Problem hast du, wenn du, wenn in der Listbox mehrere Einträge sind.
    Dann kann dein Programm ebenfalls damit nichts anfangen.

    Welche Fenster willst du denn überhaupt geschlossen haben? Immer das erste oder alle?

  • Immer das , welches angewählt ist.

    Ziemlich unlogisch.
    Um auf den Button zu drücken musst du zwangsläufig dein Programm in den Vordergrund rufen.
    D.h. es ist gar "keins" angewählt.
    Du musst schon ein bisschen Eigeninitiative reinstecken, ansonsten wird das wohl nix...

  • Dann sag mir doch wenigstens was du willst!!!!!!!!!
    Du könntest es so machen, dass du das aktive Fenster mit einem Hotkey schliesst.
    Aber du sollst uns eigentlich nur sagen was überhaupt passieren soll, wenn du auf den Button zum schliessen drückst.

  • Achso.
    Ja , er soll dann halt den angewählten (makierten) Clienten schließen.
    Mittels

    [autoit]

    WinClose

    [/autoit]

    geht es nicht!
    Und ich weiß nicht wie ich die Pid des ausgewählten Clienten rauskriege.

  • Entschuldige!
    Ich hab dich einfach nur falsch verstanden, mein Fehler.

    Listbox ist vielleicht ein bisschen ungünstig gewählt aber Probier mal:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListBox.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 396, 223, 195, 126)
    $Button1 = GUICtrlCreateButton("Get Clients", 3, 6, 91, 22, 0)
    $List1 = GUICtrlCreateList("", 300, 3, 91, 214)
    $Button2 = GUICtrlCreateButton("Get Name", 3, 30, 91, 22, 0)
    $Button3 = GUICtrlCreateButton("Close", 0, 198, 91, 22, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    If ProcessExists ("sro_client.exe")Then
    $process = ProcessList ("sro_client.exe")
    For $i = 1 to $process[0][0]
    WinSetTitle("SRO_Client","","Silkroad_" & $i)
    GuictrlsetData($List1,"Silkroad_"& $i)
    Next
    Else
    MsgBox (16+48,"Error","Silkroad not running!")
    EndIf
    Case $Button2
    $silkroad = StringTrimLeft(Guictrlread($List1), 9)
    If $silkroad <> '' Then ProcessClose($process[$silkroad][1])
    _GUICtrlListBox_DeleteString($List1, $silkroad-1)
    Case $Button3
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ja wie geil , es klappt!
    Könntest du mir den Befehl "StringTrimLeft" kurz erklären?
    Verstehe den nicht so ganz.
    Aber es klappt!!
    Danke vielmals.
    Wenn das Thema noch ein Weilchen offen bleibt , werde ich mein fertiges Programm gerne posten!

  • Die Hilfe kann auch so einiges klären :P.

    Zitat

    Trims a number of characters from the right hand side of a string.

    Also es schneidet von einem String einfach ein paar Buchstaben ab (soviele wie man angibt).
    z.B.
    "Hallo"
    Wenn ich jetzt StringTrimright("Hallo", 3) machen würde, würde "lo" rausgekommen.

    Ich benutzt den Befehl nur, um die Zahl des Eintrags in der Listbox rauszufinden.
    Ich muss zugeben, keine sehr schöne Lösung :whistling:.
    Aber ansonsten hätte ich das Skript umschreiben müssen.
    Hauptsache es geht erstaml :D.

    • Offizieller Beitrag


    Wenn ich jetzt StringTrimright("Hallo", 3) machen würde, würde "lo" rausgekommen.


    :D Da hast du aber 2 Befehle verwechselt.
    StringTrimRight("Hallo", 3) liefert "Ha" (die rechten 3 werden abgeschnippelt).
    StringRight("Hallo", 3) liefert "llo" (die rechten 3 werden zurückgegeben).