Doppelclick in Listview

  • Hallo,

    Aufgabenstellung:
    Ich habe 2 Listviews, in der Ersten werden User welche aus einer Datei ausgelesen werden angezeigt. Wenn ich einen user markiere und dann auf einen button drücke dann erscheint in einer zweiten Listview alle Computer wo dieser user einmal angemeldet war.
    Ich möchte mir das drücken auf den Button sparen und dieses mit einem Doppelclick auf den listen eintrag erledigen.
    Ist das möglich? Und wenn ja, wie?

    Anbei einmal mein Script

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstants.au3>

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

    Dim $file = "\\userfile.dat"
    Dim $avErgebnis[300][2]
    GUICreate("Who´s Online? (er) " & FileGetVersion(@ScriptName), 250, 200)
    GUICtrlCreateLabel("Who´s Online?", 40, 10, 180)
    GUICtrlSetFont(-1, 15)
    $pingbutton = GUICtrlCreateButton("ping", 160, 155, 60)
    $showclientbutton = GUICtrlCreateButton(">>", 115, 60, 20, 15)
    $exitbutton = GUICtrlCreateButton("exit", 35, 155, 60)
    $userlist = GUICtrlCreateList("", 10, 50, 100, 100)
    $clientlist = GUICtrlCreateList("", 140, 50, 100, 100)
    _filluserlist()
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $showclientbutton
    _fillclientlist()
    Case $msg = $exitbutton
    ExitLoop
    Case $msg = $pingbutton
    _pingclient()
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd
    Func _filluserlist()
    $result = IniReadSection($file, "PSF-User")
    For $i = 1 To $result[0][0]
    $split = StringSplit($result[$i][0], "_")
    For $n = 1 To $split[0]
    $search = StringInStr($split[$n], "GEJ")
    If $search <> 0 Then
    $avErgebnis[$i][0] = $split[$n - 1]
    $avErgebnis[$i][1] = $split[$n]
    GUICtrlSetData($userlist, $split[$n - 1])
    EndIf
    Next
    Next
    EndFunc ;==>_filluserlist
    Func _fillclientlist()
    GUICtrlSetData($clientlist, "")
    $user = GUICtrlRead($userlist)
    For $o = 1 To 299
    $client = StringInStr($avErgebnis[$o][0], $user)
    If $client <> 0 Then
    GUICtrlSetData($clientlist, $avErgebnis[$o][1], "test")
    EndIf

    Next
    EndFunc ;==>_fillclientlist
    Func _pingclient()
    $host = GUICtrlRead($clientlist)
    TrayTip("Who´s online?", "sende pakete zu " & $host, 1)
    $ttl = Ping($host, 1000)
    If $ttl > 0 Then
    $pingresult = "is online"
    ElseIf @error = 1 Then
    $pingresult = "is offline"
    ElseIf @error = 2 Then
    $pingresult = "is unreachable"
    ElseIf @error = 3 Then
    $pingresult = "bad destination"
    ElseIf @error = 4 Then
    $pingresult = "other errors"
    EndIf
    MsgBox(0, "Who´s online (er)", $host & @CRLF & $pingresult)
    EndFunc ;==>_pingclient

    [/autoit]

    Ich bedanke ich für eure inovative Lösung jetzt schon einmal im Voraus.

  • Hotkey ist natürlich eine sehr einfache und gute Lösung. Aber trotzdem würde mich prinzipiell die Lösung mit dem Doppelclick interessieren. Ich habe auch schon andere Beiträge hier im Forum gefunden bzgl. Doppelclick. Aber die Codeschnipsel die angeführt sind beinhalten UDF´s welche bei mir zu Fehlermeldungen führen. z.B. _GUICtrlListViewGetItemText obwohl #include <GuiListView.au3>. Warum funktionieren solche Scripte nicht mehr?
    Die Resond-Time hier im Forum ist wirklich genial.
    Danke

  • Ich glaube da habe ich die Bezeichnungen verwechselt. Aber du hast recht ich brauche einen List-Doppelklick.
    Wäre super wenn es da ein Beispiel geben würde.

    • Offizieller Beitrag

    Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIListBox.au3>

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

    $hGUI = GUICreate("List Box Create", 400, 296)
    $hListBox = _GUICtrlListBox_Create ($hGUI,"", 2, 2, 396, 296)
    GUISetState()

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

    For $i = 1 To 10
    _GUICtrlListBox_AddString($hListBox, 'Eintrag ' & $i)
    Next

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func ListDblClick()
    MsgBox(0, '', _GUICtrlListBox_GetText($hListBox, _GUICtrlListBox_GetCurSel($hListBox)))
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hListBox, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    ListDblClick()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • Danke für die Antwort. Ich komme leider erst am Dienstag wieder dazu.
    Ich werde mich dann melden ob es funktioniert hat.

    Danke nochmals und schöne Ostern