Zwischenablage überwachen und in TXT-Datei speichern?

  • Hallo Leute,

    ich habe eine TXT-Datei unter C:\Tools\Zwischenablage.txt gespeichert und geöffnet.
    Gibt es die Möglichkeit mit AutoIT die Zwischenablage zu überwachen und folgendes zu machen:

    1. Nur wenn die Datei C:\Tools\Zwischenablage.txt geöffnet ist, die Inhalte der Zwischenablage in die txt-Datei (ohne diese im Vodergrund zu bringen) einzufügen.
    2. Nach dem Einfügen zwei Mal (Enter - Return) und weiter die Zwischenablage überwachen....

    Besten Dank im Voraus!

    Viele Grüße,
    Dino

    Einmal editiert, zuletzt von Dino (21. Februar 2010 um 18:25)

  • Klasse :!:

    jetzt weiß nicht, ob es die Möglichkeit gibt, nachdem Einfügen imemer zwei Mal Enter zu drücken, damit ich es als Abschnitte sehe.
    Oscar ist nicht online, vielleicht habt ihr die Idee ;)

    Besten Dank!

    • Offizieller Beitrag

    Das zweimal ENTER verstehe ich nicht, wozu?
    Weshalb soll die Datei offen (also im Editor) sein? Dann kann man ja nichts eintragen?
    Mal als Ansatz:

    Spoiler anzeigen
    [autoit]

    ; === Fenstererkennung an Teilen des Titels
    Opt("WinTitleMatchMode", 2)

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

    ; === Hotkey zum Skript Beenden
    HotKeySet('^!e', '_ende') ; === STRG + ALT + e

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

    ; === Variable zum Speichern des letzten Clipboardinhalts
    Local $sClipOld = '', $sClip

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

    While True
    If WinExists("C:\Tools\Zwischenablage.txt") Then
    $sClip = ClipGet()
    If $sClip <> $sClipOld Then
    $sClipOld = $sClip
    ; in Datei schreiben
    ; Send geht nicht, da Datei im Hintergrund sein soll (warum soll sie überhaupt offen sein?)
    ; zum Schreiben muß die Datei geschlossen werden, dann kann mit Filewrite der Inhalt von
    ; $sClip geschrieben werden.
    EndIf
    EndIf
    Sleep(100)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

    [/autoit]
  • Hallo BugFix,

    die Datei kann auch geschlossen sein.
    Zwei Mal Enter, weil ich Inhalte verschiedener Artikel kopiere. Die TXT-Datei importiere ich hinterher im Excel, dann kann ich besser sehen bis wohin geht welcher Artikel. Einfach wegen Übersichtlichkeit.

    Dein Ansatz werde ich testen. :thumbup:

    VG,
    Dino

  • Klasse :!:

    jetzt weiß nicht, ob es die Möglichkeit gibt, nachdem Einfügen imemer zwei Mal Enter zu drücken, damit ich es als Abschnitte sehe.
    Oscar ist nicht online, vielleicht habt ihr die Idee ;)

    Besten Dank!

    da Oscar das Skript ins Zip-File gepackt hat, wäre das kein Problem einfach Zeile 304 wie folgt ändern

    [autoit]

    GUICtrlSetData($hMemo, GUICtrlRead($hMemo) & $clip &@CRLF &@CRLF

    [/autoit]


    und Zeile 46 auskommentieren/entfernen (Variable wurde inzwischen anscheinend in einem INCLUDE-File als Const deklariert),

    mfg (Auto)Bert

    • Offizieller Beitrag

    Hier ist mal das Grundgerüst eines Clipboard-Edits:

    Spoiler anzeigen
    [autoit]


    #include <Clipboard.au3>
    #include <GUIConstantsEx.au3>
    #include <SendMessage.au3>
    #include <WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    $hGui = GUICreate('Clipboard-Edit', 600, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $hEdit = GUICtrlCreateEdit('', 10, 10, 580, 240)
    $hSave = GUICtrlCreateButton('Save to file...', 10, 260, 120, 22)
    GUICtrlSetOnEvent(-1, '_SaveEdit')
    GUISetState()
    WinSetOnTop($hGui, '', 1)
    Global $hNext = _ClipBoard_SetViewer($hGui)
    GUIRegisterMsg($WM_CHANGECBCHAIN, 'WM_CHANGECBCHAIN')
    GUIRegisterMsg($WM_DRAWCLIPBOARD, 'WM_DRAWCLIPBOARD')

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

    While Sleep(1000)
    WEnd

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

    Func _End()
    _ClipBoard_ChangeChain($hGui, $hNext)
    Exit
    EndFunc ;==>_End

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

    Func _SaveEdit()
    Local $sPath, $hFile
    $sPath = FileSaveDialog('Choose a name', @ScriptDir, 'Text (*.txt)', 16 + 2, 'Clipboard.txt', $hGui)
    If @error Then Return
    $hFile = FileOpen($sPath, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, GUICtrlRead($hEdit))
    FileClose($hFile)
    EndIf
    EndFunc ;==>_SaveEdit

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

    Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    If $iwParam = $hNext Then
    $hNext = $ilParam
    ElseIf $hNext <> 0 Then
    _SendMessage($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, 'hwnd', 'hwnd')
    EndIf
    EndFunc ;==>WM_CHANGECBCHAIN

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

    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    Local $clip = ClipGet()
    If Not @error Then
    $clip = StringRegExpReplace($clip, '(\S)(\n)', '$1' & @CRLF)
    If StringRight($clip, 2) <> @CRLF Then $clip &= @CRLF
    GUICtrlSetData($hEdit, GUICtrlRead($hEdit) & $clip)
    EndIf
    If $hNext <> 0 Then _SendMessage($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

    [/autoit]