Netview in Autoit?

  • Hallo,

    ich würde dieses Batch script gerne in ein Autoit script übersetzen.

    Spoiler anzeigen

    @echo off

    :start
    rem ========== Eingabe
    set /p name=Computername enthaelt:
    rem ==========
    net view | find /i "%name%"
    echo.
    goto start


    der qlue soll sein, das der gefundenen Computernamen über einen Doppelklick in die zwischenablage kopiert werden soll. Wie mache ich das am besten? Die (Beta) Gui habe ich schon erstellt

    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    Local $gui
    $gui = GUICreate("PC Find ", 300, 200, 190, 120, -1)
    $ok1 = GUICtrlCreateButton ("Suchen", 215, 2, 80)
    $name = GUICtrlCreateInput ("", 5, 5, 200, 20)
    GuiCtrlCreateList("", 4, 30, 200, 172)
    ;GuiCtrlSetData(-1, "a.Sample|b.List|c.Control|d.Here", "b.List")
    GUICtrlSetState(-1,$GUI_FOCUS)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlSetOnEvent(-1, "OKPressed")
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    Exit

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

    EndSelect
    Sleep(50)
    WEnd
    Func _Exit()
    Exit
    Sleep(50)
    EndFunc

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

    Func OKPressed()

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

    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von mamcc (4. Juli 2008 um 16:48)

  • Kommt drauf an, was du willst. z.B.:
    http://www.autoitscript.com/forum/index.php?s=&showtopic=52265&view=findpost&p=545506
    //Edit: Erwiterte Version:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF

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

    $aCompListEx = _NetServerEnumEx($SV_TYPE_WORKSTATION,"",True)
    _ArrayDisplay($aCompListEx)

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

    ;Found on http://www.autoitscript.com/forum/index.ph…ndpost&p=545506
    ; Author: amel27, changed by Prog@ndy for extended information
    Func _NetServerEnumEx ($iSrvType = -1, $sDomain = '',$AddIP=False)
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If $AddIP Then TCPStartup()
    $AddIP = Number($AddIP)
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 101, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1][2+$AddIP]=[[DllStructGetData($uBufPtr,3)]]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    $res[$i][0] = _szWStringRead(DllStructGetData($uRecord,2))
    If DllStructGetData($uRecord,6) <> 0 Then $res[$i][1] = _szWStringRead(DllStructGetData($uRecord,6))
    If $AddIP Then $res[$i][2] = TCPNameToIP($res[$i][0])
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    If $AddIP Then TCPShutdown()
    Return $res
    EndFunc

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

    ; Author of _szStringRead: Picasso ??
    ; Found in http://www.autoitscript.com/forum/index.ph…ndpost&p=451150
    ; Changed for wchar by Prog@ndy
    Func _szWStringRead($pszString, $uiLen = -1)
    Local $aStrLen, $vszString
    If $pszString = 0 Then Return ""
    If $uiLen < 1 Then
    $aStrLen = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $pszString)
    If @error Then Return SetError(1, 0, "")
    $uiLen = $aStrLen[0] + 1
    EndIf
    $vszString = DllStructCreate("wchar[" & $uiLen & "]", $pszString)
    If @error Then Return SetError(2, 0, "")
    Return SetError(0, $uiLen, DllStructGetData($vszString, 1))
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (4. Juli 2008 um 16:17)

  • also das script sieht schon sehr sehr gut aus. jetzt muss ich das nur noch mit meiner suche kombinieren in meinem Fall reicht die Suche nach dem Namen (teilstring). Also z.B. suche nach "er" findet \\DerPC und wenn ich doppelt drauf klicke soll das in die zwischenablage inkl den "\\" hat jemand eine Idee?

  • Also meine suche funktioniert jetzt zwar aber es bleiben weiterhin alle Computernamen im listview stehen. Dort sollen nur die bleiben die den suchstring enthalten. Wie mache ich das am besten über array oder über den list view oder evtl doch etwas anderes?


    [autoit]


    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <GuiListView.au3>
    #NoTrayIcon
    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF

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

    Opt("GUIOnEventMode", 1)
    dim $gui
    $gui = GUICreate("PC Find", 300, 200, 190, 120, -1)
    $ok1 = GUICtrlCreateButton ("Suchen", 215, 2, 80)
    $eingabe = GUICtrlCreateInput ("", 5, 5, 200, 20)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlSetOnEvent(-1, "OKPressed")
    GUISetState(@SW_SHOW)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $liste = GUICtrlCreateListView("", 4, 30, 200, 172)
    $computername = _GUICtrlListView_AddColumn ($liste, "Computername", 120)
    ;$ipadresse = _GUICtrlListView_AddColumn ($liste, "IP Adresse", 100)
    While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    Exit

    EndSelect
    Sleep(50)
    WEnd
    Func _Exit()
    Exit
    Sleep(50)
    EndFunc

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

    Func OKPressed()
    $aCompListEx = _NetServerEnumEx($SV_TYPE_WORKSTATION,"",True)
    _GUICtrlListView_AddArray ($liste, $aCompListEx)
    $suche = _GUICtrlListView_FindInText($liste, GUICtrlRead($eingabe))
    If $suche = -1 Then
    MsgBox(0, "Suche", "Wurde nicht gefunden")
    Else
    MsgBox(0, "Suche", "Wurde gefunden")
    EndIf

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

    ;_ArrayDisplay($aCompListEx)
    EndFunc

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

    Func _NetServerEnumEx ($iSrvType = -1, $sDomain = '',$AddIP=False)
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If $AddIP Then TCPStartup()
    $AddIP = Number($AddIP)
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 101, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1][2+$AddIP]=[[DllStructGetData($uBufPtr,3)]]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    $res[$i][0] = _szWStringRead(DllStructGetData($uRecord,2))
    If DllStructGetData($uRecord,6) <> 0 Then $res[$i][1] = _szWStringRead(DllStructGetData($uRecord,6))
    If $AddIP Then $res[$i][2] = TCPNameToIP($res[$i][0])
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    If $AddIP Then TCPShutdown()
    Return $res
    EndFunc

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

    Func _szWStringRead($pszString, $uiLen = -1)
    Local $aStrLen, $vszString
    If $pszString = 0 Then Return ""
    If $uiLen < 1 Then
    $aStrLen = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $pszString)
    If @error Then Return SetError(1, 0, "")
    $uiLen = $aStrLen[0] + 1
    EndIf
    $vszString = DllStructCreate("wchar[" & $uiLen & "]", $pszString)
    If @error Then Return SetError(2, 0, "")
    Return SetError(0, $uiLen, DllStructGetData($vszString, 1))
    EndFunc

    [/autoit]
  • Du musst das Array durchsuchen, nicht die Listview :)

    Spoiler anzeigen
    [autoit]

    Func OKPressed()
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($liste))
    Local $aCompListEx = _NetServerEnumEx($SV_TYPE_WORKSTATION,"",1)
    Local $search = GUICtrlRead($eingabe)
    Local $temp
    For $i = 1 To $aCompListEx[0][0]
    If StringInStr($aCompListEx[$i][0],$search) Then
    $temp = _GUICtrlListView_AddItem($liste,$aCompListEx[$i][0])
    _GUICtrlListView_AddSubItem($liste,$temp,$aCompListEx[$i][2],1)
    EndIf
    Next
    EndFunc

    [/autoit]
  • Kann mir jemand sagen wieso die namebutton() nicht funktioniert?


    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <GuiListView.au3>
    #Include <GUIComboBox.au3>
    #include <File.au3>
    #NoTrayIcon
    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF

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

    Opt("GUIOnEventMode", 1)
    dim $gui
    $gui = GUICreate("PC Find 1.0 ", 300, 350, 190, 120, -1)
    $ok1 = GUICtrlCreateButton ("Suchen", 215, 2, 80)
    GUICtrlSetOnEvent(-1, "OKPressed")
    $eingabe = GUICtrlCreateInput ("", 5, 5, 200, 20)
    $namebutton = GUICtrlCreateButton ("Name in Clipboard", 5, 30, 150)
    GUICtrlSetOnEvent(-1, "NameButton")
    $ipbutton = GUICtrlCreateButton ("IP in Clipboard", 160, 30, 135)
    GUICtrlSetOnEvent(-1, "IPButton")

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState(@SW_SHOW)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $liste = GUICtrlCreateListView("", 4, 80, 300, 267)
    $computername = _GUICtrlListView_AddColumn ($liste, "Computername", 185)
    $ipadresse = _GUICtrlListView_AddColumn ($liste, "IP Adresse", 95)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    Exit
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $liste

    Switch $iCode

    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    MsgBox(0,"", "Eintag wurde mit einfachklick angeklickt!")

    EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
    EndSelect
    Sleep(50)
    WEnd
    Func _Exit()
    Exit
    Sleep(50)
    EndFunc

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

    Func OKPressed()
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($liste))
    Local $aCompListEx = _NetServerEnumEx($SV_TYPE_WORKSTATION,"",1)
    Local $search = GUICtrlRead($eingabe)
    Local $temp
    For $i = 1 To $aCompListEx[0][0]
    If StringInStr($aCompListEx[$i][0],$search) Then
    $temp = _GUICtrlListView_AddItem($liste,$aCompListEx[$i][0])
    _GUICtrlListView_AddSubItem($liste,$temp,$aCompListEx[$i][2],1)
    EndIf
    Next
    EndFunc
    Func NameButton()
    Dim $iSubItem
    $selected = _GUICtrlListView_GetSelectedIndices($liste)
    MsgBox(4096, "Test", "Index Nummer: " & $selected, 10)
    ;$Clip= _GUICtrlListView_GetItemText ($liste,0 ) ;<-------- das funktioniert
    $Clip= _GUICtrlListView_GetItemText ($liste,$selected) ; < -------------das nicht
    MsgBox(4096, "Test", "Im Clipboard: " & $Clip, 10)
    ClipPut($Clip)

    EndFunc
    Func IPButton()
    EndFunc
    Func _NetServerEnumEx ($iSrvType = -1, $sDomain = '',$AddIP=False)
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If $AddIP Then TCPStartup()
    $AddIP = Number($AddIP)
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 101, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1][2+$AddIP]=[[DllStructGetData($uBufPtr,3)]]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    $res[$i][0] = _szWStringRead(DllStructGetData($uRecord,2))
    If DllStructGetData($uRecord,6) <> 0 Then $res[$i][1] = _szWStringRead(DllStructGetData($uRecord,6))
    If $AddIP Then $res[$i][2] = TCPNameToIP($res[$i][0])
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    If $AddIP Then TCPShutdown()
    Return $res
    EndFunc

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

    Func _szWStringRead($pszString, $uiLen = -1)
    Local $aStrLen, $vszString
    If $pszString = 0 Then Return ""
    If $uiLen < 1 Then
    $aStrLen = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $pszString)
    If @error Then Return SetError(1, 0, "")
    $uiLen = $aStrLen[0] + 1
    EndIf
    $vszString = DllStructCreate("wchar[" & $uiLen & "]", $pszString)
    If @error Then Return SetError(2, 0, "")
    Return SetError(0, $uiLen, DllStructGetData($vszString, 1))
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $liste

    Switch $iCode

    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    MsgBox(0,"", "Eintag wurde mit einfachklick angeklickt!")

    EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • ohne geht es auch nicht.. hat keiner eine Idee wie ich den computername ins clipboard bekomme?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <GuiListView.au3>
    #Include <GUIComboBox.au3>
    #include <File.au3>
    #NoTrayIcon
    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF

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

    Opt("GUIOnEventMode", 1)
    dim $gui
    $gui = GUICreate("PC Find 1.0 ", 300, 350, 190, 120, -1)
    $ok1 = GUICtrlCreateButton ("Suchen", 215, 2, 80)
    GUICtrlSetOnEvent(-1, "OKPressed")
    $eingabe = GUICtrlCreateInput ("", 5, 5, 200, 20)
    $namebutton = GUICtrlCreateButton ("Name in Clipboard", 5, 30, 150)
    GUICtrlSetOnEvent(-1, "NameButton")
    $ipbutton = GUICtrlCreateButton ("IP in Clipboard", 160, 30, 135)
    GUICtrlSetOnEvent(-1, "IPButton")

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState(@SW_SHOW)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $liste = GUICtrlCreateListView("", 4, 80, 300, 267)
    $computername = _GUICtrlListView_AddColumn ($liste, "Computername", 185)
    $ipadresse = _GUICtrlListView_AddColumn ($liste, "IP Adresse", 95)

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

    While 1
    Sleep(50)
    WEnd
    Func _Exit()
    Exit
    Sleep(50)
    EndFunc

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

    Func OKPressed()
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($liste))
    Local $aCompListEx = _NetServerEnumEx($SV_TYPE_WORKSTATION,"",1)
    Local $search = GUICtrlRead($eingabe)
    Local $temp
    For $i = 1 To $aCompListEx[0][0]
    If StringInStr($aCompListEx[$i][0],$search) Then
    $temp = _GUICtrlListView_AddItem($liste,$aCompListEx[$i][0])
    _GUICtrlListView_AddSubItem($liste,$temp,$aCompListEx[$i][2],1)
    EndIf
    Next
    EndFunc
    Func NameButton()
    Dim $iSubItem
    $selected = _GUICtrlListView_GetSelectedIndices($liste)
    MsgBox(4096, "Test", "Index Nummer: " & $selected, 10)
    ;$Clip= _GUICtrlListView_GetItemText ($liste,0 ) ;<-------- das funktioniert
    $Clip= _GUICtrlListView_GetItemText ($liste,$selected) ; < -------------das nicht
    MsgBox(4096, "Test", "Im Clipboard: " & $Clip, 10)
    ClipPut($Clip)
    EndFunc

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

    Func IPButton()
    EndFunc

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

    Func _NetServerEnumEx ($iSrvType = -1, $sDomain = '',$AddIP=False)
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If $AddIP Then TCPStartup()
    $AddIP = Number($AddIP)
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 101, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1][2+$AddIP]=[[DllStructGetData($uBufPtr,3)]]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr;dword;dword;dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    $res[$i][0] = _szWStringRead(DllStructGetData($uRecord,2))
    If DllStructGetData($uRecord,6) <> 0 Then $res[$i][1] = _szWStringRead(DllStructGetData($uRecord,6))
    If $AddIP Then $res[$i][2] = TCPNameToIP($res[$i][0])
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    If $AddIP Then TCPShutdown()
    Return $res
    EndFunc

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

    Func _szWStringRead($pszString, $uiLen = -1)
    Local $aStrLen, $vszString
    If $pszString = 0 Then Return ""
    If $uiLen < 1 Then
    $aStrLen = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $pszString)
    If @error Then Return SetError(1, 0, "")
    $uiLen = $aStrLen[0] + 1
    EndIf
    $vszString = DllStructCreate("wchar[" & $uiLen & "]", $pszString)
    If @error Then Return SetError(2, 0, "")
    Return SetError(0, $uiLen, DllStructGetData($vszString, 1))
    EndFunc

    [/autoit]
  • _GUICtrlListView_GetSelectedIndices gibt einen Stri ng zurück :)
    Erst mit Number($indice) in Zahl umwandlen,. dann geht es :) Kopieren auf Doppelklick:

    Spoiler anzeigen
    [autoit]

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    [/autoit][autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $liste
    If Not IsHWnd($liste) Then $hWndListView = GUICtrlGetHandle($liste)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _PuToClip(DllStructGetData($tInfo, "Index"),DllStructGetData($tInfo, "SubItem"))
    ; No return value
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY
    Func _PuToClip($item,$subItem)
    MsgBox(0, 'parameter', "item: " & $item & @CRLF & "subitem: " & $subItem)
    Local $text = _GUICtrlListView_GetItemText($liste,$item,$subItem)
    MsgBox(0, 'Text', $text)
    ClipPut($text)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (17. Juli 2008 um 14:12)