Dropbox für Links aus Browsern

  • Hallo,
    ich will mir gerne einen Downloadmanager bauen, aber hab ein Problem mit einer sog. "Dropbox".
    Das soll ein kleines Fenster sein, das "Always on Top" ist und ich die Links einfach reinziehen kann.

    Allerdings nimmt das Fenster nur Filedrops an, sollte aber die Links aus dem Browsern annehmen.
    Gibt es dafür überhaupt eine Lösung mit Autoit?
    Es gehen ja nichteinmal normale Texte, die markiert wurden.

    Vielen Dank für eure Hilfe

    mfg Peter

    2 Mal editiert, zuletzt von _peter_ (1. September 2010 um 18:58)

  • Hallo _peter_,

    ich mache es bei meinem YT-Downlaoder (Link siehe Signatur) über Rechtsklick | Linkadresse kopieren. Hier ein Skriptauszg davon:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    Global $iWidht = 575, $iHeight = 300, $sURL
    Global $idfrmMain = GUICreate("ins ClipBoard kopierte Links einfügen", $iWidht, $iHeight)
    Global $origHWND = DllCall("user32.dll", "hwnd", "SetClipboardViewer", "hwnd", $idfrmMain), $sjpgBckgrnd
    $origHWND = $origHWND[0]

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

    Local $idLV_Down = GUICtrlCreateListView("Ur-Link: |Titel |Erfolg|DL-Link|Size|Titellänge", 10, 25, $iWidht - 20, $iHeight - 105, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSetFont(-1, 9, 800)
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)

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

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

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

    GUISetState()
    while 1
    $nMsgg = GuiGetMsg()
    switch $nMsgg
    case -3
    Exit
    EndSwitch
    WEnd

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

    #region Clipboard

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

    Func OnClipBoardChange($hWnd, $Msg, $wParam, $lParam) ;funkey Spoiler-Reader
    ; send notification about clipboard change to next clipviewer
    DllCall("user32.dll", "int", "SendMessage", "hWnd", $origHWND, "int", $WM_DRAWCLIPBOARD, "int", $wParam, "int", $lParam)
    If ClipGet() <> $sURL Then
    $sURL = ClipGet()
    GUICtrlCreateListViewItem($sURL & "| |", $idLV_Down)
    EndIf
    EndFunc ;==>OnClipBoardChange

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

    Func OnClipBoardViewerChange($hWnd, $Msg, $wParam, $lParam) ;funkey Spoiler-Reader
    ; if our remembered previous clipviewer is removed then we must remember new next clipviewer
    ; else send notification about clipviewer change to next clipviewer
    If $wParam = $origHWND Then
    $origHWND = $lParam
    Else
    DllCall("user32.dll", "int", "SendMessage", "hWnd", $origHWND, "int", $WM_CHANGECBCHAIN, "hwnd", $wParam, "hwnd", $lParam)
    EndIf
    EndFunc ;==>OnClipBoardViewerChange
    #endregion Clipboard
    Func OnAutoitExit() ;funkey Spoiler-Reader
    ; send notification that we no longer will be in clipboard hook queue
    DllCall("user32.dll", "int", "ChangeClipboardChain", "hwnd", $idfrmMain, "hwnd", $origHWND)
    EndFunc ;==>OnAutoitExit

    [/autoit]

    als Vorlage hatte ich den Spoilerreader von funkey genommen,

    mfg autoBert

  • Danke für die schnelle Antwort. So ähnlich habe ich es bisher auch gelöst, allerdings wäre mir Drag & Drop schon lieber :)

  • So etwas in der Art hatten wir doch schon einige male.

    Hilft Dir dies [ gelöst ] Drag & Drop auf AutoIt-Button nicht weiter ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Nein leider nicht, weil alle Beispiele die ich gefunden habe Dateien behandeln.
    Bei den Links aus dem Browsern handelt es sich um "gedragten" Text.
    Das kann man leicht ausprobieren, indem man den Link in einen Texteditor zieht, dann steht die URL da.

    *...weiter auf eine Lösung hoffe*

    peter

  • Wie kann man denn den Text dragen ? Meinst du markieren und dann ziehen ? Ja, diese Funktion ist mir noch nicht bekannt. Aber du könntest ja theoretisch eine Editbox machen, und in diese den Link hineinziehen. Und die ganze zeit überprüfen, ob diese Leer ist, oder einen Text enthällt. Und wenn dies der Fall ist, dann die kommende Funktion ausführen. :)

    lg Tim

  • Hallo _peter_,

    das RichEditControl beherscht es, siehe

    das Beispiel aus der Hilfe zu: _GUICtrlRichEdit_GetCharAttributes

    #AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    Global $lblMsg, $hRichEdit

    Main()

    Func Main()
    Local $hGui, $iMsg, $iCp1
    $hGui = GUICreate("Beispiel (" & StringTrimRight(@ScriptName,4) &")", 320, 350)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "Dies ist ein Test.", 10, 10, 300, 220, _
    BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    $lblMsg = GUICtrlCreateLabel("", 10, 235, 300, 60)
    GUISetState()

    _GuiCtrlRichEdit_AutoDetectURL($hRichEdit, True)
    _GuiCtrlRichEdit_AppendText($hRichEdit, @CR & "http://www.autoitscript.com")
    $iCp1 = _GuiCtrlRichEdit_GetFirstCharPosOnLine($hRichEdit, 2)
    _GuiCtrlRichEdit_SetSel($hRichEdit, $iCp1, $iCp1 + 3)
    Report("Die Zeichen Attribute, der zweiten Start Zeile sind " & _
    _GuiCtrlRichEdit_GetCharAttributes($hRichEdit))
    While True
    $iMsg = GUIGetMsg()
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    EndSelect
    WEnd
    EndFunc ;==>Main

    Func Report($sMsg)
    GUICtrlSetData($lblMsg, $sMsg)
    EndFunc ;==>Report

    [autoit][/autoit]


    AutoTim, genau das hat er ja vor (vielliecht nicht mit Edit, aber das spielt ja keine Rolle)

    mfg autoBert

    3 Mal editiert, zuletzt von autoBert (28. August 2010 um 20:48)

  • Hallo AutoTim,

    GuiRichEdit-Control ist die AutoIt-Implementation des Rich Text Formates damit kannst du z.B. einen Editor schreiben, da anders als bei einem Edit-contol einzeln Zeichen formatiert weden können. Für nähere Infos zu den Funktionen empfehle ich dir die GuiRichEdit Benutzerdefinierte Funktion Referenz in der Hilfe anzuschauen,

    mfg autoBert

  • sry für die späte Antwort. Sieht sehr gut aus mit dem GuiRichEdit. Der Link wird eingefügt und den Rest bekomme ich auch noch hin.

    Dankeschön :)

  • Hallo _peter_,

    da sich hier nich viele (ich bisher auch nur rudimentär) mit GuiRichEdit beschäftigen wäre es nett wenn du dein Ergebnis als Beispielskript postet
    ,

    mfg autoBert

  • Na klar :)

    [autoit]

    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Local $hGui, $iMsg
    $hGui = GUICreate("Dropbox",150,150, -1, -1, BitOr($WS_SIZEBOX,$WS_BORDER) ,bitOR($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW) )
    GUICtrlSetState(-1, $GUI_ONTOP)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui,"",0,0, 150, 150,-1)
    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    _GuiCtrlRichEdit_SetEventMask($hRichEdit, $ENM_SELCHANGE )
    While True
    $iMsg = GUIGetMsg()
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    _GUICtrlRichEdit_Destroy($hRichEdit)
    GuiDelete()
    Exit
    EndSelect
    WEnd

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

    Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam)
    #forceref $hWnd, $iMsg, $iWparam
    Local $hWndFrom, $iCode, $tNMHDR, $tEnLink, $cpMin, $cpMax, $tMsgFilter
    $tNMHDR = DllStructCreate($tagNMHDR, $iLparam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hRichEdit
    Select
    Case $iCode = $EN_SELCHANGE
    Checklink()
    EndSelect
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    func Checklink()
    Local $sURL, $arrValidURL
    $sURL = _GUICtrlRichEdit_GetText($hRichEdit)
    $arrValidURL = StringRegExp($sURL, "(?s)((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)",2)

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

    _GUICtrlRichEdit_GetSelText($hRichEdit)
    _Guictrlrichedit_settext($hRichEdit,"")
    if UBound($arrValidURL) > 0 Then
    ;// Gueltige URL ok, mach irgendwas damit
    ConsoleWrite($arrValidURL[0] & @CRLF)
    ;//
    EndIf
    EndFunc

    [/autoit]