Prozess id in Tabs und zurück

  • Nabend
    Habe folgendes Problem und zwar habe ich mehrere Prozesse.Diese werden in Tab´s dargestellt. Nun möchte ich aber ein Stück weiter im Code aus dem Tabnamen wieder in eine id(prozess) zurückverwandeln.
    Hier mal der Script

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Fenster mit GUICtrlCreateTab. Ruft alle paar sekunden function _refresh auf
    Func _refresh()
    Dim $infoarray[1][1] = [["0"]]
    Local $error = 0
    _GUICtrlTab_DeleteAllItems($Tab1)
    Sleep(50)
    $sro_client = ProcessList("sro_client.exe")
    If $sro_client[0][0] <> 0 Then
    ReDim $infoarray[$sro_client[0][0] + 1][2]
    $infoarray[0][0] = $sro_client[0][0]
    EndIf
    If $sro_client[0][0]= 0 Then
    $TabSheet1 = GUICtrlCreateTabItem("Error")
    GUICtrlCreateLabel("Kein Client",28, 42, 75, 25)
    GUICtrlCreateTabItem("")
    EndIf
    For $i = 1 To $sro_client[0][0]
    ;_GUICtrlTab_InsertItem($Tab1,$i,"sro_client_"&$i)
    GUICtrlCreateTabItem($sro_client[$i][0])
    $HPbar = GUICtrlCreateProgress(67, 53, 230, 17)
    $MPbar = GUICtrlCreateProgress(67, 85, 230, 17)
    $Expbar = GUICtrlCreateProgress(67, 117, 230, 17)
    GUICtrlCreateLabel("MP:", 35, 85, 23, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateLabel("HP:", 35, 53, 22, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateLabel("Exp:", 35, 117, 25, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $HP = GUICtrlCreateLabel("0%", 171, 53, 19, 17)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $MP = GUICtrlCreateLabel("0%", 171, 85, 20, 17)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Exp = GUICtrlCreateLabel("0%", 171, 117, 22, 17)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateLabel("Position:", 315, 53, 44, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateLabel("X:", 315, 77, 14, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateLabel("Y:", 315, 101, 14, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $X = GUICtrlCreateLabel("X", 347, 77, 11, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Y = GUICtrlCreateLabel("Y", 347, 101, 11, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateTabItem("")
    Next
    GUICtrlSetState($refresh,$GUI_FOCUS)
    EndFunc ;==>refresh

    [/autoit]


    Dafür bräucht ich also eine Fuction die wieder den Tabnamen in eine id umwandelt. Habe bereits goolge, die SuFu und vieles mehr benutzt, aber komme einfach nicht darauf. Habe nur aus einem anderen programm diese funktion als anhaltspunkt. Allerdings ist es für listview und nicht für tab´s habe versucht es umzustellen aber es ging nicht:

    Spoiler anzeigen
    [autoit]

    Func gethwndpid($pid)
    $selectedindex = ControlListView($gui, "", $processlist, "GetSelected")
    If $selectedindex = "" Then
    Return SetError(1)
    Else
    $ret = $infoarray[_GUICtrlListView_GetItemText($processlist, Int($selectedindex))][$pid]
    If $pid = 0 Then
    If Not IsHWnd($ret) Then Return SetError(2)
    ElseIf Not ProcessExists($ret) Then
    Return SetError(3)
    EndIf
    Return $ret
    EndIf
    EndFunc

    [/autoit]


    Wie immer danke schon mal vorab an alle die helfen. ;)

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

    • Offizieller Beitrag

    Also du könntest mit _GUICtrlTab_GetCurSel das gerade Selectierte Tab abfragen . Mit der Rückgabe +1 kannst du dann aus deinem $src_client Array die Pid auslesen .

  • Hab die Funktion mal versucht umzustellen doch es geht immer noch nicht. X( Hier mal der Code:

    Spoiler anzeigen
    [autoit]

    Func _gethwndpid($pid)
    $selectedindex = _GUICtrlTab_GetItem($Tab1,0)
    If $selectedindex = "" Then
    Return SetError(1)
    Else
    $ret = $infoarray[_GUICtrlTab_GetItemText($Tab1, Int($selectedindex))][$pid]
    If $pid = 0 Then
    If Not IsHWnd($ret) Then Return SetError(2)
    ElseIf Not ProcessExists($ret) Then
    Return SetError(3)
    EndIf
    Return $ret
    EndIf
    EndFunc

    [/autoit]

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

    • Offizieller Beitrag

    Du bist vielleicht ein Held. Sollen wir Hellsehen ? Du postest nur die 1 Funktion und was ist mit dem Rest vom Script? Wie sollen wir das nachvollziehen können was wann und wo gemacht wir?

  • Der Rest ist ja gleichgeblieben ich habe im prinzip ja nur die Kunktion im zweiten Spioiler in meinem ersten post so umgestellt, wie du es gesagt hast halt mit _GUICtrlTab_GetCurSel. Und ich glaube kaum das du dich durch die 600 Zeilen meines Codes wälzen willst. Aber als Beispiel für eine Funktion die die Funktion die ich brauche gebraucht ist z.b. die. Das was ich versuche ist im Prinzip das Herzstück meines Codes.

    Spoiler anzeigen
    [autoit]

    Func _prozessclose()
    GUICtrlSetState($Prozessclose, $GUI_DISABLE)
    $closepid = Call("_gethwndpid", 1) ;<---------- Hier wird die Funktion benutzt
    Switch @error
    Case 1
    Call("nosel")
    Case 3
    Call("noproc")
    Case Else
    $msgbox = MsgBox(0x40024, "Prozess beenden?", "Soll diese Instanz von Silkroad wirklich beendet werden?")
    If $msgbox = 6 Then
    ProcessClose($closepid)
    EndIf
    EndSwitch
    GUICtrlSetState($Prozessclose, BitOR($GUI_ENABLE, $GUI_FOCUS))
    _refresh()
    EndFunc ;==>_prozessclose

    [/autoit]


    die funktionen nosel und noproc sin Fehlermeldungen.

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

    • Offizieller Beitrag

    Also.

    Bu benutz in deiner Funktion GUICtrlTab_GetItem um das Selektierte Tab auszulesen . Wenn du den Selektierten Tab rausbekommen willst mußt du das mit _GUICtrlTab_GetCurSel machen .In deinem Script benutz du immer den Parameter 0 für GUICtrlTab_GetItem damit wird immer nur der 1. Tab ausgelesen . Wolltest du das so ? Ich verstehe den Sinn der Function nicht . Wenn du willst schick mir das Script per PN und ich schau drüber, was ich tun kann.