erweiterte Zwischenablage - Ideen

  • Hiho,

    ich habe mal wieder eine Idee, die ich gerne mit AutoIt realisieren würde, frage mich jedoch gerade, wie ich folgende Sachen umsetze:

    ich würde gerne die letzten 10 Einträge in der Zwischenablage in einem ListView-Kontextmenü eintragen.
    dazu müsste jedoch erstmal ein leeres listview erscheinen, in denen dann jeweils neue sachen in der zwischenablage immer eine position abwärts gerückt werden. müsste möglich sein, ich bin mir nur gerade unschlüssig, wie?

    dann, bzw. eigentlich davor, wie bekommt das programm mit, ob etwas neues in die zwischenablage kopiert wurde?

    die anzeige des listviews würde ich per hotkey ein/ausblenden, das listview danach fest an den mauszeiger anhängen. wie mache ich das?

    zu guter letzt hatte ich mir überlegt, ich lasse das listview einblenden, dann soll die erste zeile markiert sein (aktuell in der ZA). per mausscrollrad soll nun die markierung immer eine zeile weiter runtergehen, die zeile die gerade markiert ist (am besten wird die komplette zeile blau markiert) soll automatisch in die zwischenablage übernommen werden. wie würde ich das bewerkstelligen?

  • Hallo habe das gleiche mal über ein Traytip verwirklicht. Meine 6 Zwischenspeicher (nur Textspeicher) wurden also im Traytip angezeigt mit Nummerierung von 1 bis 6. Dann konnte ich durch Hotkeys die einzelnden Zwischenspeicher aufrufen.

    Wie dein Script dahinterkommt ob sich die Zwischenablage ändert ist so eine Sache.
    Ich habe das mit:

    Spoiler anzeigen
    [autoit]


    If _IsPressed("A2") Then
    If _IsPressed("43") Then
    Zwischenspeichern()
    EndIf
    Else
    EndIf

    [/autoit]


    Also wenn strg+c gedrückt wurde dann wird die Funktion Zwischenspeichern aufgerufen.
    Wenn man in Excel oder ähnliches über das Menü auf "kopieren" drückt, funzt das nicht. Aber das Format kann man sowieso nicht so ohne weiteres abspeichern (glaube ich). Das gilt zumindest wenn man mehrere Zeilen in Excel markiert.

    Bin ja mal gespannt auf deine Lösung.

    Nutze mein Proggi seitdem täglich in der Firma. Habe zur Zeit leider Urlaub und den Sourcecode in der Firma.

    Bis dann
    Autoirrer

  • Hiho,

    vielen Dank schonmal für die Hilfe.
    ich wollte jetzt die oben genannte funktion erstmal so umschreiben, dass ich den text der zwischenablage in ein listview, anstatt der editbox, bekomme.
    leider scheine ich schon daran zu scheitern, kann mir jmd die augen öffnen?

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <ClipBoard.au3>
    #Include <GuiListView.au3>

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

    Global $iMemo, $hNext = 0

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

    _Main()

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

    Func _Main()
    Local $hGUI

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

    ; Create GUI
    $hGUI = GUICreate("Clipboard", 600, 400)
    ;~ $iMemo2 = GUICtrlCreateListView("", 2, 2, 596, 396)
    ;~ $iMemo = GUICtrlGetHandle($iMemo2)
    $iMemo = _GUICtrlListView_Create($hGUI, "", 2, 2, 596, 396)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    GUISetState()

    WinSetOnTop($hGUI, "", 1)

    _GUICtrlListView_AddItem($iMemo, "test")
    ;~ GUICtrlSetData($iMemo, "test")

    ; Initialize clipboard viewer
    $hNext = _ClipBoard_SetViewer ($hGUI)

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

    GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
    GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

    MemoWrite("GUI handle ....: " & $hGUI)
    MemoWrite("Viewer handle .: " & _ClipBoard_GetViewer())

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Shut down clipboard viewer
    _ClipBoard_ChangeChain ($hGUI, $hNext)
    EndFunc ;==>_Main

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

    ; Write message to memo
    Func MemoWrite($sMessage = "")
    _GUICtrlListView_AddItem($iMemo, $sMessage)
    _GUICtrlListView_AddSubItem($iMemo, _GUICtrlListView_GetItemCount($iMemo) - 1, $sMessage, 1)
    ;~ GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
    EndFunc ;==>MemoWrite

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

    ; Handle $WM_CHANGECBCHAIN messages
    Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    ; Show that message was received
    MemoWrite("***** $WM_CHANGECBCHAIN *****")

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

    ; If the next window is closing, repair the chain
    If $iwParam = $hNext Then
    $hNext = $ilParam
    ; Otherwise pass the message to the next viewer
    ElseIf $hNext <> 0 Then
    _SendMessage ($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
    EndIf
    EndFunc ;==>WM_CHANGECBCHAIN

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

    ; Handle $WM_DRAWCLIPBOARD messages
    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    ; Display any text on clipboard
    MemoWrite(_ClipBoard_GetData ())

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

    ; Pass the message to the next viewer
    If $hNext <> 0 Then _SendMessage ($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

    [/autoit]
  • meinst du sowas? Zwischenablage speichern Tool

    v1 :

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

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

    #include <GUIConstants.au3>
    #include <GUIListView.au3>

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

    HotKeySet("{PGUP}", "_show")
    HotKeySet("{PGDN}", "_hide")
    HotKeySet("^!{ESC}", "_terminate")
    MsgBox(0, "Fenster anzeigen", "Pg Up zeigt das Fenster" & @CRLF & "Pg Down lässt es wieder verschwinden")
    $Gui = GUICreate("Zwischenablage speichern Tool", 341, 271)
    $Version = GUICtrlCreateLabel("Version 1.1", 275, 240, 57, 17)
    $tree = _GUICtrlListView_Create($Gui, "Zwischenablage", 10, 16, 220, 240)
    $col = _GUICtrlListView_SetColumn($tree, 1, "Zwischenablage", 220)
    _GUICtrlListView_SetColumnWidth($tree, $col, 220)
    $Kopieren = GUICtrlCreateButton("Kopieren", 240, 16, 81, 33, 0)
    $Loeschen = GUICtrlCreateButton("Löschen", 240, 72, 81, 33, 0)
    $Alleloeschen = GUICtrlCreateButton("Alles löschen", 240, 128, 81, 33, 0)
    GUISetBkColor(0x075478)
    GUISetState(@SW_HIDE)

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

    $max = 1000

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

    $file = @ScriptDir & "\zwischenablage.txt"
    If FileExists($file) Then FileDelete($file)
    Global $additem[$max + 1], $tree, $selecteditem, $item
    For $i = 1 To $max
    $additem[$i] = ""
    Next

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

    $Zwischenablage1 = ""
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Kopieren
    Local $item = _GuiCtrlListView_GetFocusedItem($tree)
    ClipPut(_GUICtrlListView_GetItemTextString($tree, $item))
    Case $Loeschen
    $selecteditem = _GUICtrlListView_GetItemTextString($tree, $item)
    $fileread = FileRead($file)
    $filewrite = StringReplace($fileread, $selecteditem, "***DELETED***")
    FileDelete($file)
    FileWrite($file, $filewrite)
    _GUICtrlListView_DeleteItemsSelected($tree)
    Case $Alleloeschen
    $msgbox = MsgBox(4, "Alles löschen", "Sind sie sicher, dass sie alles löschen wollen?")
    If $msgbox = 6 Then
    _GUICtrlListView_DeleteAllItems($tree)
    FileDelete($file)
    EndIf
    EndSwitch
    $Zwischenablage2 = ClipGet()
    If $Zwischenablage2 <> $Zwischenablage1 Then _zwischenablageadd()
    WEnd

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

    Func _zwischenablageadd()
    For $i = 1 To $max
    If $additem[$i] = $Zwischenablage2 Then Return
    Next

    For $i = 1 To $max
    If $additem[$i] = "" Then
    FileWrite($file, @HOUR & ":" & @MIN & ":" & @SEC & " " & $Zwischenablage2 & @CRLF)
    $additem[$i] = $Zwischenablage2
    _GUICtrlListView_AddItem($tree, $Zwischenablage2)
    $Zwischenablage1 = $Zwischenablage2
    ExitLoop
    EndIf
    Next
    EndFunc ;==>_zwischenablageadd

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

    Func _GuiCtrlListView_GetFocusedItem($hWnd)
    For $i = 0 To _GUICtrlListView_GetItemCount($hWnd) - 1
    If _GUICtrlListView_GetItemState($hWnd, $i, $LVIS_FOCUSED) Then Return $i
    Next
    EndFunc ;==>_GuiCtrlListView_GetFocusedItem

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

    Func _show()
    GUISetState(@SW_SHOW)
    EndFunc ;==>_show

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

    Func _hide()
    GUISetState(@SW_HIDE)
    EndFunc ;==>_hide

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

    Func _terminate()
    Exit
    EndFunc ;==>_terminate

    [/autoit]

    v. 2:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

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

    #include <GUIConstants.au3>
    #include <GUIListView.au3>

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

    HotKeySet("^!{ESC}", "_terminate")

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

    ;~ Input Box

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

    $inputhide = InputBox("Fenster verstecken", "Mit welcher Taste willst du das Fenster verstecken?")
    If @error Then $hinputhide = HotKeySet("{PGDN}", "_hide")
    $inputshow = InputBox("Fenster zeigen", "Mit welcher Taste willst du das Fenster zeigen?")
    If @error Then $hinputshow = HotKeySet("{PGUP}", "_show")
    $hinputshow = HotKeySet("{" & $inputshow & "}", "_show")
    $hinputhide = HotKeySet("{" & $inputhide & "}", "_hide")
    MsgBox(0, "Fenster anzeigen und verstecken", $inputshow &" zeigt das Fenster" & @CRLF & $inputhide &" lässt es wieder verschwinden")
    MsgBox(0, "Fenster versteckt!", "Am Anfang ist das Fenster versteckt, du kannst es mit " & $inputshow & " zeigen!")

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

    ;~ Ende Input Box

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

    $Gui = GUICreate("Zwischenablage speichern Tool", 341, 271)
    $Version = GUICtrlCreateLabel("Version 1.1", 275, 240, 57, 17)
    $tree = _GUICtrlListView_Create($Gui, "Zwischenablage", 10, 16, 220, 240)
    $col = _GUICtrlListView_SetColumn($tree, 1, "Zwischenablage", 220)
    _GUICtrlListView_SetColumnWidth($tree, $col, 220)
    $Kopieren = GUICtrlCreateButton("Kopieren", 240, 16, 81, 33, 0)
    $Loeschen = GUICtrlCreateButton("Löschen", 240, 72, 81, 33, 0)
    $Alleloeschen = GUICtrlCreateButton("Alles löschen", 240, 128, 81, 33, 0)
    GUISetBkColor(0x075478)
    GUISetState(@SW_HIDE)

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

    $max = 1000

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

    $file = @ScriptDir & "\zwischenablage.txt"
    If FileExists($file) Then FileDelete($file)
    Global $additem[$max + 1], $tree, $selecteditem, $item, $inputhide, $inputshow, $hinputhide, $hinputshow
    For $i = 1 To $max
    $additem[$i] = ""
    Next

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

    $Zwischenablage1 = ""
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Kopieren
    Local $item = _GuiCtrlListView_GetFocusedItem($tree)
    ClipPut(_GUICtrlListView_GetItemTextString($tree, $item))
    Case $Loeschen
    $selecteditem = _GUICtrlListView_GetItemTextString($tree, $item)
    $fileread = FileRead($file)
    $filewrite = StringReplace($fileread, $selecteditem, "***DELETED***")
    FileDelete($file)
    FileWrite($file, $filewrite)
    _GUICtrlListView_DeleteItemsSelected($tree)
    Case $Alleloeschen
    $msgbox = MsgBox(4, "Alles löschen", "Sind sie sicher, dass sie alles löschen wollen?")
    If $msgbox = 6 Then
    _GUICtrlListView_DeleteAllItems($tree)
    FileDelete($file)
    EndIf
    EndSwitch
    $Zwischenablage2 = ClipGet()
    If $Zwischenablage2 <> $Zwischenablage1 Then _zwischenablageadd()
    WEnd

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

    Func _zwischenablageadd()
    For $i = 1 To $max
    If $additem[$i] = $Zwischenablage2 Then Return
    Next

    For $i = 1 To $max
    If $additem[$i] = "" Then
    FileWrite($file, @HOUR & ":" & @MIN & ":" & @SEC & " " & $Zwischenablage2 & @CRLF)
    $additem[$i] = $Zwischenablage2
    _GUICtrlListView_AddItem($tree, $Zwischenablage2)
    $Zwischenablage1 = $Zwischenablage2
    ExitLoop
    EndIf
    Next
    EndFunc ;==>_zwischenablageadd

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

    Func _GuiCtrlListView_GetFocusedItem($hWnd)
    For $i = 0 To _GUICtrlListView_GetItemCount($hWnd) - 1
    If _GUICtrlListView_GetItemState($hWnd, $i, $LVIS_FOCUSED) Then Return $i
    Next
    EndFunc ;==>_GuiCtrlListView_GetFocusedItem

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

    Func _show()
    GUISetState(@SW_SHOW)
    EndFunc ;==>_show

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

    Func _hide()
    GUISetState(@SW_HIDE)
    EndFunc ;==>_hide

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

    Func _terminate()
    Exit
    EndFunc ;==>_terminate

    [/autoit]

    Einmal editiert, zuletzt von DeadmanFinal (7. Juli 2008 um 18:05)

  • habs hinbekommen, zwar nur, wenn ich 2 spalten habe, ist aber nicht weiter tragisch.
    den rest dazu werde ich nach und nach einbauen, wenn der private stress mal was nachlässt =/

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <ClipBoard.au3>
    #Include <GuiListView.au3>
    #Include <Date.au3>

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

    Global $iMemo, $hNext = 0

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

    _Main()

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

    Func _Main()
    Local $hGUI

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

    ; Create GUI
    $hGUI = GUICreate("Clipboard", 420, 200, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    $ListView = GUICtrlCreateListView("Clipboard|Time", 0, 0, 400, 200, BitOR($LVS_NOCOLUMNHEADER,$LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_CHECKBOXES,$LVS_EX_HEADERDRAGDROP,$LVS_EX_FULLROWSELECT))
    $iMemo = GUICtrlGetHandle($ListView)
    ;_GUICtrlListView_SetExtendedListViewStyle($iMemo, BitOR($LVS_NOCOLUMNHEADER,$WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_HEADERDRAGDROP,$LVS_EX_FULLROWSELECT))
    _GUICtrlListView_SetColumnWidth($iMemo, 0, 270)
    _GUICtrlListView_SetColumnWidth($iMemo, 1, 120)

    GUISetState()

    WinSetOnTop($hGUI, "", 1)

    ; Initialize clipboard viewer
    $hNext = _ClipBoard_SetViewer ($hGUI)

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

    GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
    GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

    ;MemoWrite("GUI handle ....: " & $hGUI)
    ;MemoWrite("Viewer handle .: " & _ClipBoard_GetViewer())

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Shut down clipboard viewer
    _ClipBoard_ChangeChain ($hGUI, $hNext)
    EndFunc ;==>_Main

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

    ; Write message to memo
    Func MemoWrite($sMessage = "")
    _GUICtrlListView_AddItem($iMemo, $sMessage)
    _GUICtrlListView_AddSubItem($iMemo, _GUICtrlListView_GetItemCount($iMemo) - 1, _now(), 1)
    ;~ GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
    EndFunc ;==>MemoWrite

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

    ; Handle $WM_CHANGECBCHAIN messages
    Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    ; Show that message was received
    MemoWrite("***** $WM_CHANGECBCHAIN *****")

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

    ; If the next window is closing, repair the chain
    If $iwParam = $hNext Then
    $hNext = $ilParam
    ; Otherwise pass the message to the next viewer
    ElseIf $hNext <> 0 Then
    _SendMessage ($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
    EndIf
    EndFunc ;==>WM_CHANGECBCHAIN

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

    ; Handle $WM_DRAWCLIPBOARD messages
    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    ; Display any text on clipboard
    MemoWrite(_ClipBoard_GetData ())

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

    ; Pass the message to the next viewer
    If $hNext <> 0 Then _SendMessage ($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

    [/autoit]
  • Hi, ich bins (leider) noch mal.

    ich versuche gerade mit

    [autoit]

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    [/autoit]

    zu arbeiten.
    erreichen möchte ich, dass, sobald eine zeile markiert ist (quasi blau vervorgehoben), der text in spalte 1 kopiert wird, als 2tes soll man in dem listview mit den scollrad "scrollen" können. standardmäßig soll eine zeile markiert sein und beim scrollen dann jeweils die markierung hoch oder runterlaufen.

    irgendwie bekomme ich bei den funktionen unten aber nichts zurück ... wer kann mir helfen?

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <ClipBoard.au3>
    #Include <GuiListView.au3>
    #Include <Date.au3>
    #include <MouseSetOnEvent_UDF.au3>

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

    #NoTrayIcon

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

    Global $iMemo, $hNext = 0, $hGui, $hListView
    ;_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "_MOUSE_WHELLDOWN_EVENT")

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

    ; Create GUI
    $hGUI = GUICreate("Clipboard", 400, 176, 0, 0, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    $ListView = GUICtrlCreateListView("Clipboard|Time", 0, 0, 400, 176, BitOR($LVS_NOCOLUMNHEADER,$LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_HEADERDRAGDROP,$LVS_EX_FULLROWSELECT))
    ;$ListView2 = GUICtrlCreateListView("Clipboard|Time", 0, 0, 400, 176, BitOR($LVS_NOCOLUMNHEADER,$LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_CHECKBOXES,$LVS_EX_HEADERDRAGDROP,$LVS_EX_FULLROWSELECT))
    ;GUICtrlSetState($ListView2, $GUI_Hide)
    $iMemo = GUICtrlGetHandle($ListView)
    ;$iMemo2 = GUICtrlGetHandle($ListView2)
    _GUICtrlListView_SetColumnWidth($iMemo, 0, 270)
    _GUICtrlListView_SetColumnWidth($iMemo, 1, 120)
    ;_GUICtrlListView_SetColumnWidth($iMemo2, 0, 270)
    ;_GUICtrlListView_SetColumnWidth($iMemo2, 1, 120)

    ;WinSetOnTop($hGUI, "", 1)

    GUISetState()

    ; Initialize clipboard viewer
    $hNext = _ClipBoard_SetViewer ($hGUI)

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
    GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Shut down clipboard viewer
    _ClipBoard_ChangeChain ($hGUI, $hNext)

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

    Func _MOUSE_WHELLDOWN_EVENT()
    $MousePos = MouseGetPos( )
    $State = WinGetState($hGUI)
    If $State = 15 Or $State = 7 Then
    WinSetState($hGUI, "", @SW_HIDE)
    ElseIf $State = 23 Then
    WinMove($hGUI, "", $MousePos[0], $MousePos[1])
    WinSetState($hGUI, "", @SW_SHOW)
    WinActivate($hGUI)
    Else
    WinMove($hGUI, "", $MousePos[0], $MousePos[1])
    WinSetState($hGUI, "", @SW_SHOW)
    WinActivate($hGUI)
    EndIf
    EndFunc

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

    ; Write message to memo
    Func MemoWrite($sMessage = "")
    _GUICtrlListView_AddItem($iMemo, $sMessage)
    _GUICtrlListView_AddSubItem($iMemo, _GUICtrlListView_GetItemCount($iMemo) - 1, _now(), 1)
    ;_GUICtrlListView_AddItem($iMemo, $sMessage)
    ;_GUICtrlListView_AddSubItem($iMemo, _GUICtrlListView_GetItemCount($iMemo) - 1, _now(), 1)
    EndFunc ;==>MemoWrite

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

    ; Handle $WM_CHANGECBCHAIN messages
    Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    ; Show that message was received
    MemoWrite("***** $WM_CHANGECBCHAIN *****")

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

    ; If the next window is closing, repair the chain
    If $iwParam = $hNext Then
    $hNext = $ilParam
    ; Otherwise pass the message to the next viewer
    ElseIf $hNext <> 0 Then
    _SendMessage ($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
    EndIf
    EndFunc ;==>WM_CHANGECBCHAIN

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

    ; Handle $WM_DRAWCLIPBOARD messages
    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    ; Display any text on clipboard
    MemoWrite(_ClipBoard_GetData ())

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

    ; Pass the message to the next viewer
    If $hNext <> 0 Then _SendMessage ($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $iMemo
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    [/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 $LVN_BEGINSCROLL ; A scrolling operation starts, Minium OS WinXP
    Local $tInfo = DllStructCreate($tagNMLVSCROLL, $ilParam)
    _DebugPrint("$LVN_BEGINSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->DX:" & @TAB & DllStructGetData($tInfo, "DX") & @LF & _
    "-->DY:" & @TAB & DllStructGetData($tInfo, "DY"))
    ; No return value
    Case $LVN_ENDSCROLL ; A scrolling operation ends, Minium OS WinXP
    Local $tInfo = DllStructCreate($tagNMLVSCROLL, $ilParam)
    _DebugPrint("$LVN_ENDSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->DX:" & @TAB & DllStructGetData($tInfo, "DX") & @LF & _
    "-->DY:" & @TAB & DllStructGetData($tInfo, "DY"))
    ; No return value
    Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    $line = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 1)
    MsgBox(0, "", $line)
    Return 0 ; allow the list view to perform its normal track select processing.
    ;Return 1 ; the item will not be selected.
    Case $LVN_ITEMACTIVATE ; Sent by a list-view control when the user activates an item
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $line = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 1)
    MsgBox(0, "", $line)
    Return 0
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $line = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 1)
    MsgBox(0, "", $line)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func _DebugPrint($s_text, $line = @ScriptLineNumber)
    ConsoleWrite( _
    "!===========================================================" & @LF & _
    "+======================================================" & @LF & _
    "-->Line(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
    "+======================================================" & @LF)
    EndFunc ;==>_DebugPrint

    [/autoit]
    • Offizieller Beitrag

    der text in spalte 1 kopiert wird


    Kopieren oder Verschieben?

    standardmäßig soll eine zeile markiert sein und beim scrollen dann jeweils die markierung hoch oder runterlaufen.


    Das widerspricht der obigen Funktion. Mit dem Wechsel der Markierung würde die Aktion zum Verschieben/Kopieren in Spalte 1 veranlaßt.

  • habs wohl schlecht erklärt, weil ich das fertige programm schon im kopf habe *g*

    fangen will mal mit dem komplette wunsch an. eigentlich will ich nur die letzten 10 einträge der zwischenablage in dem listview angezeigt bekommen. schön wäre, wenn in zeile 1 immer der aktuellste eintrag vorhanden ist, die anderen quasi immer eine zeile runterrutschen.

    wird das listview angezeigt, soll zeile 1 markiert sein (weil es auch der eintrag ist, der aktuell in der zwischenablage ist)

    am liebsten wäre mir nun (listview kann mit mouse3 ein- & ausgeblendet werden), dass man, wenn das fenster angezeigt wird, einfach mit dem mausrad im listview (also den letzten 10 einträgen in der zwischenablage) scrollen kann. die zeile, die aktuell markiert ist, soll automatisch in die zwischenablage kopiert werden (wobei von der zeile natürlich nur spalte 1, da in spalte 2 ja nur datum und uhrzeit steht).

    weder das scrollen, noch die markierte zeile in die zwischenablage kopieren, funzt.

  • dank dir bugfix, werde ich mir mal angucken, wobei doch eher gegen ende.
    ich hab aber noch ein paar fragen ... hauptsächlich zum ListView:

    wie kann ich standardmäßig eine vertikal Scrollleiste einblenden lassen?
    wie klappt das mit dem "kopieren in die zwischenablage", wenn eine zeile markiert/aktiviert wird? also nicht unbedingt ein mausklick stattfindet (rechts-/linksklick bekomme ich hin)?
    ich hatte eigentlich folgende 2 sachen im auge, aber irgendwie will das nicht ...

    [autoit]

    Case $LVN_ITEMACTIVATE ; Sent by a list-view control when the user activates an item
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0
    ; No return value
    Case $NM_HOVER ; Sent by a list-view control when the mouse hovers over an item
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0 ; process the hover normally

    [/autoit]

    script sieht im moment so aus:

    Spoiler anzeigen
    [autoit]

    ;vertikale Scrollleiste

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

    #include <Clipboard.au3>
    #include <Date.au3>
    #include <GuiListView.au3>
    #include <MouseSetOnEvent_UDF.au3>
    #include <SendMessage.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    ;#include <Events.au3>

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

    #NoTrayIcon

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

    Global $iMemo, $hNext = 0, $hGui, $hListView, $hWndFrom, $iCode, $tInfo
    ;_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "_MOUSE_WHELLDOWN_EVENT")

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

    ; Create GUI
    $hGUI = GUICreate("Clipboard", 415, 176, 0, 0, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    $ListView = GUICtrlCreateListView("Clipboard|Time", 0, 0, 415, 176, BitOR($LVS_NOCOLUMNHEADER,$LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_HEADERDRAGDROP,$LVS_EX_FULLROWSELECT))
    $iMemo = GUICtrlGetHandle($ListView)
    _GUICtrlListView_SetColumnWidth($iMemo, 0, 270)
    _GUICtrlListView_SetColumnWidth($iMemo, 1, 120)

    ;WinSetOnTop($hGUI, "", 1)

    GUISetState()

    ; Initialize clipboard viewer
    $hNext = _ClipBoard_SetViewer ($hGUI)

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
    GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Shut down clipboard viewer
    _ClipBoard_ChangeChain ($hGUI, $hNext)

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

    Func _MOUSE_WHELLDOWN_EVENT()
    $MousePos = MouseGetPos( )
    $State = WinGetState($hGUI)
    If $State = 15 Or $State = 7 Then
    WinSetState($hGUI, "", @SW_HIDE)
    ElseIf $State = 23 Then
    WinMove($hGUI, "", $MousePos[0], $MousePos[1])
    WinSetState($hGUI, "", @SW_SHOW)
    WinActivate($hGUI)
    Else
    WinMove($hGUI, "", $MousePos[0], $MousePos[1])
    WinSetState($hGUI, "", @SW_SHOW)
    WinActivate($hGUI)
    EndIf
    EndFunc

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

    ; Write message to memo
    Func MemoWrite($sMessage = "")
    _GUICtrlListView_AddItem($iMemo, $sMessage)
    _GUICtrlListView_AddSubItem($iMemo, _GUICtrlListView_GetItemCount($iMemo) - 1, _now(), 1)
    EndFunc ;==>MemoWrite

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

    ; Handle $WM_CHANGECBCHAIN messages
    Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    ; Show that message was received
    MemoWrite("***** $WM_CHANGECBCHAIN *****")

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

    ; If the next window is closing, repair the chain
    If $iwParam = $hNext Then
    $hNext = $ilParam
    ; Otherwise pass the message to the next viewer
    ElseIf $hNext <> 0 Then
    _SendMessage ($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
    EndIf
    EndFunc ;==>WM_CHANGECBCHAIN

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

    ; Handle $WM_DRAWCLIPBOARD messages
    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    ; Display any text on clipboard
    MemoWrite(_ClipBoard_GetData ())

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

    ; Pass the message to the next viewer
    If $hNext <> 0 Then _SendMessage ($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

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

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

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_BEGINSCROLL ; A scrolling operation starts, Minium OS WinXP
    $tInfo = DllStructCreate($tagNMLVSCROLL, $ilParam)
    ; No return value
    Case $LVN_ENDSCROLL ; A scrolling operation ends, Minium OS WinXP
    $tInfo = DllStructCreate($tagNMLVSCROLL, $ilParam)
    ; No return value
    Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0 ; allow the list view to perform its normal track select processing.
    ;Return 1 ; the item will not be selected.
    ; No return value
    Case $LVN_ITEMACTIVATE ; Sent by a list-view control when the user activates an item
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0
    ; No return value
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ; No return value
    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)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ; No return value
    Case $NM_HOVER ; Sent by a list-view control when the mouse hovers over an item
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0 ; process the hover normally
    ;Return 1 ; prevent the hover from being processed
    ; No return value
    Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ;Return 1 ; not to allow the default processing
    Return 0 ; allow the default processing
    Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ; No return value
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Ganz oben einfpgen kannst du mit
    _GUICtrlListView_InsertItem , wobei du den Index auf 0 stellen must :)

  • ahjo, das ist natürlich auch ne coole idee ;)
    dank dir.

    und zu den restlichen probs vllt noch ne idee?

    - standardmäßig vertikale scrollleiste einblenden
    - wert in zwischenablage kopieren, wenn zeile markiert wird (zB mit der tastatur, also ohne einen mausklick)
    - scrollen im listview ermöglichen, ABER so, dass die markierte zeile hoch und runterscrollt?

  • Hiho,

    hab da noch ein aktuelles Prob. Das aktuellste Script ist nun soweit einsatzfähig, es gibt jedoch was, was nicht optimal ist.
    wenn ich was in die zwischenablage kopiere, wird es dem listview hinzugefügt - super
    wenn ich im listview einen eintrag anklicke, wird der text in die zwischenablage kopiert - bis dahin super
    das wird natürlich wiederum in das listview eingetragen ... soweit logisch. aber da ist der knackpunkt ... sofern ich was aus dem listview in die zwischenablage kopiert wird, soll es nicht nochmal dem listview hinzugfügt werden.

    wie stelle ich das an?

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=..\_Icons\shell32.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;vertikale Scrollleiste

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

    #include <Clipboard.au3>
    #include <Date.au3>
    #include <GuiListView.au3>
    #include <MouseSetOnEvent_UDF.au3>
    #include <SendMessage.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    ;#include <Events.au3>

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

    Global $iMemo, $hNext = 0, $hGui, $hListView, $hWndFrom, $iCode, $tInfo
    _MouseSetOnEvent($MOUSE_WHELLDOWN_EVENT, "_MOUSE_WHELLDOWN_EVENT")

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

    ; Create GUI
    $hGUI = GUICreate("Clipboard", 415, 176, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    $ListView = GUICtrlCreateListView("Clipboard|Time", 0, 0, 415, 176, BitOR($LVS_NOCOLUMNHEADER,$LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_HEADERDRAGDROP,$LVS_EX_FULLROWSELECT))
    $iMemo = GUICtrlGetHandle($ListView)
    _GUICtrlListView_SetColumnWidth($iMemo, 0, 270)
    _GUICtrlListView_SetColumnWidth($iMemo, 1, 120)

    WinSetOnTop($hGUI, "", 1)

    ;GUISetState()

    ; Initialize clipboard viewer
    $hNext = _ClipBoard_SetViewer ($hGUI)

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
    GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Shut down clipboard viewer
    _ClipBoard_ChangeChain ($hGUI, $hNext)

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

    Func _MOUSE_WHELLDOWN_EVENT()
    $MousePos = MouseGetPos( )
    $State = WinGetState($hGUI)
    If $State = 15 Or $State = 7 Then
    WinSetState($hGUI, "", @SW_HIDE)
    ElseIf $State = 23 Then
    WinMove($hGUI, "", $MousePos[0], $MousePos[1])
    WinSetState($hGUI, "", @SW_SHOW)
    WinActivate($hGUI)
    Else
    WinMove($hGUI, "", $MousePos[0], $MousePos[1])
    WinSetState($hGUI, "", @SW_SHOW)
    WinActivate($hGUI)
    EndIf
    EndFunc

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

    ; Write message to memo
    Func MemoWrite($sMessage = "")
    _GUICtrlListView_InsertItem($iMemo, $sMessage, 0)
    ;_GUICtrlListView_AddItem($iMemo, $sMessage)
    _GUICtrlListView_AddSubItem($iMemo, 0, _now(), 1)
    EndFunc ;==>MemoWrite

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

    ; Handle $WM_CHANGECBCHAIN messages
    Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    ; If the next window is closing, repair the chain
    If $iwParam = $hNext Then
    $hNext = $ilParam
    ; Otherwise pass the message to the next viewer
    ElseIf $hNext <> 0 Then
    _SendMessage ($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
    EndIf
    EndFunc ;==>WM_CHANGECBCHAIN

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

    ; Handle $WM_DRAWCLIPBOARD messages
    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    ; Display any text on clipboard
    If Not $iwParam = WinGetHandle($hGui) Then MemoWrite(_ClipBoard_GetData ())

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

    ; Pass the message to the next viewer
    If $hNext <> 0 Then _SendMessage ($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

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

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

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_BEGINSCROLL ; A scrolling operation starts, Minium OS WinXP
    $tInfo = DllStructCreate($tagNMLVSCROLL, $ilParam)
    ; No return value
    Case $LVN_ENDSCROLL ; A scrolling operation ends, Minium OS WinXP
    $tInfo = DllStructCreate($tagNMLVSCROLL, $ilParam)
    ; No return value
    Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0 ; allow the list view to perform its normal track select processing.
    ;Return 1 ; the item will not be selected.
    ; No return value
    Case $LVN_ITEMACTIVATE ; Sent by a list-view control when the user activates an item
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ClipPut($gText)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0
    ; No return value
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ClipPut($gText)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ; No return value
    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)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ; No return value
    Case $NM_HOVER ; Sent by a list-view control when the mouse hovers over an item
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    Return 0 ; process the hover normally
    ;Return 1 ; prevent the hover from being processed
    ; No return value
    Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ClipPut($gText)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ;Return 1 ; not to allow the default processing
    Return 0 ; allow the default processing
    Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ;MsgBox(0, "", $iCode & @CRLF & $gText)
    ; No return value
    Case $NM_SETFOCUS ; The control has received the input focus
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $gText = _GUICtrlListView_GetItemText($hWndFrom, DllStructGetData($tInfo, "Index"), 0)
    ClipPut($gText)
    ; No return value
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    PS: noch was, was mir aufgefallen ist. im moment wird nur text aufgenommen, bei allen anderen datein wird "0" in das listview geschrieben. da es mir hauptsächlich um text geht, ist das auch i.o.
    nur sieht "0" halt blöd aus, so dass ich gerne den dateinamen mit (evtl auch ohne) pfad im listview hätte. jmd ne idee?

  • Eigenes nicht eintrage z.B. mit einer Variablen, die das hinzufügen sperrt:

    Spoiler anzeigen
    [autoit]

    Global $OWN_CLIP_PUT
    ...
    ; Write message to memo
    Func MemoWrite($sMessage = "")
    If $OWN_CLIP_PUT Then Return
    ...
    EndFunc ;==>MemoWrite
    ...
    Func _ClipPut($text)
    $OWN_CLIP_PUT = True
    ClipPut($text)
    $OWN_CLIP_PUT = False
    EndFunc

    [/autoit]