• Mein nächstes Programm:
    Clippy, ein von einem anderen Thread angeregter Clipboardmanager.

    BETA!!
    Momentan nur unter XP getestet!

    Funktionsweise:

    • Kopiert den aktuellen Zwischenablageninhalt in ein Array
    • Per Klick aufs Trayicon kann man zwischen den verschiedenen Inhalten schalten
    • Drückt man Win+V, öffnet sich das selbe Fenster bei der Maus, nach Klick wird das ausgewählte direkt eingefügt
    • Phrasenunterstützung: Es können Inhalte, die öfters benötigt werden als Phrasen gespeichert werden
    • Clear-button: löscht das Array, sodass nur noch der aktuelle Inhalt der Zwischenablage (+Phrasen) verbleibt
    • Audivisuelles Feedback bei neuem Inhalt (Sound von freesounds.org, Bilder von mir
    code
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=1.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <Array.au3>
    Opt("TrayAutoPause",0)
    Opt("TrayMenuMode",1)
    Opt("TrayOnEventMode",1)
    Global $clipboard[1]=[0],$x=500,$y=500
    TraySetIcon(@ScriptDir & "\1.ico")
    TraySetToolTip("Clippy")
    TraySetOnEvent($TRAY_EVENT_PRIMARYUP,"_selectGUI")
    If not FileExists(@AppDataDir & "\GLi\Clippy\phrases.ini") Then
    $hfile=FileOpen(@AppDataDir & "\GLi\Clippy\phrases.ini",10)
    FileWrite($hfile,"[options]" & @CRLF & "num=0" & @CRLF & "[phrases]")
    FileClose($hfile)
    EndIf
    For $i=0 To Number(IniRead(@AppDataDir & "\GLi\Clippy\phrases.ini","options","num",0))-1
    _ArrayAdd($clipboard,IniRead(@AppDataDir & "\GLi\Clippy\phrases.ini","phrases",String($i),""))
    $clipboard[0]+=1
    Next
    _createGUI()
    AdlibEnable("_getClipBoard",1000)
    HotKeySet("#v","_insert")
    ;#main loop:
    While True
    Sleep(300)
    WEnd
    ;#funcs:
    Func _getClipBoard()
    $clip=ClipGet()
    _ArraySearch($clipboard,$clip,0,0,1)
    If not @error Or $clip="" Then Return
    _ArrayAdd($clipboard,$clip)
    $clipboard[0]+=1
    _notifyNewClipboardEntry()
    EndFunc
    Func _setClipBoard($data,$flag=0)
    ;flag: 0=$data means index of $clipboard, 1=$data means String
    Switch $flag
    Case 1
    ClipPut($data)
    case 0
    ClipPut($clipboard[$data])
    EndSwitch
    EndFunc
    Func _notifyNewClipboardEntry()
    Soundplay("ping.wav")
    TraySetIcon(@ScriptDir & "\2.ico")
    Sleep(200)
    TraySetIcon(@ScriptDir & "\3.ico")
    Sleep(200)
    TraySetIcon(@ScriptDir & "\1.ico")
    EndFunc
    Func _shorten($what)
    If Stringlen($what) > 50 then $what = Stringleft($what,47) & "..."
    Return $what
    EndFunc
    Func quit()
    Exit
    EndFunc
    Func _about()
    MsgBox(64,"Info","Developed by GLi Labors, L3viathan2142")
    EndFunc
    Func _createGUI()
    Global $gui=GUICreate("ClippyControl",250,13,-1,-1,$WS_POPUP,$WS_EX_TOOLWINDOW)
    Global $list=GUICtrlCreateList("",0,0,250,0)
    Global $quitbutton=GUICtrlCreateButton("Quit",0,13,13,20)
    Global $clrbutton=GUICtrlCreateButton("Clear",0,13,13,20)
    Global $aboutbutton=GUICtrlCreateButton("About",0,13,13,20)
    Global $addbutton=GUICtrlCreateButton("+",0,13,13,20)
    EndFunc
    Func _limit($what,$dimension)
    ;~ 0:x, 1:y,2:w,3:h
    Switch $dimension
    Case 1
    If $what > @DesktopHeight-400 Then $what=@DesktopWidth-400
    case 0
    if $what > 2*@DesktopWidth-250 Then $what=2*@DesktopWidth-250
    EndSwitch
    return $what
    EndFunc
    Func _insert()
    GUISetState(@SW_SHOW)
    WinMove("ClippyControl","",_limit(MouseGetPos(0),0) , _limit(MouseGetPos(1),1),250, 13*$clipboard[0]+13)
    GUICtrlSetPos($list,0,0,250,13*$clipboard[0]+13)
    GUICtrlSetPos($quitbutton,0,13*$clipboard[0]+13,70,20)
    GUICtrlSetPos($clrbutton,70,13*$clipboard[0]+13,70,20)
    GUICtrlSetPos($aboutbutton,70,13*$clipboard[0]+13,70,20)
    GUICtrlSetPos($addbutton,70,13*$clipboard[0]+13,20,20)
    For $i=1 To $clipboard[0]
    GUICtrlSetData($list,$clipboard[$i])
    Next
    While True
    If not WinActive("ClippyControl") Then Return GUISetState(@SW_HIDE)
    Switch GUIGetMsg()
    Case $list
    GUISetState(@SW_HIDE)
    ClipPut(GUICtrlRead($list))
    sleep(100)
    Send("^v")
    ExitLoop
    EndSwitch
    WEnd
    EndFunc
    Func _selectGUI()
    GUISetState(@SW_SHOW)
    WinMove("ClippyControl","",@DesktopWidth-250 , @DesktopWidth-(30+13*$clipboard[0]+13+300),250, 13*$clipboard[0]+13+20)
    GUICtrlSetPos($list,0,0,250,13*$clipboard[0]+13)
    GUICtrlSetPos($quitbutton,0,13*$clipboard[0]+13,70,20)
    GUICtrlSetPos($clrbutton,70,13*$clipboard[0]+13,70,20)
    GUICtrlSetPos($aboutbutton,140,13*$clipboard[0]+13,70,20)
    GUICtrlSetPos($addbutton,210,13*$clipboard[0]+13,20,20)
    For $i=1 To $clipboard[0]
    GUICtrlSetData($list,$clipboard[$i])
    Next
    While True
    If not WinActive("ClippyControl") Then Return GUISetState(@SW_HIDE)
    Switch GUIGetMsg()
    Case $list
    ClipPut(GUICtrlRead($list))
    ExitLoop
    case $quitbutton
    Exit
    case $addbutton
    _addphrase()
    case $aboutbutton
    GUISetState(@SW_HIDE)
    _about()
    ExitLoop
    case $clrbutton
    For $i=1 To $clipboard[0]
    _ArrayDelete($clipboard,$i)
    Next
    $clipboard[0]=0
    GUICtrlSetData($list,"")
    For $i=0 To Number(IniRead(@AppDataDir & "\GLi\Clippy\phrases.ini","options","num",0))-1
    _ArrayAdd($clipboard,IniRead(@AppDataDir & "\GLi\Clippy\phrases.ini","phrases",String($i),""))
    $clipboard[0]+=1
    Next
    ExitLoop
    EndSwitch
    WEnd
    GUISetState(@SW_HIDE)
    EndFunc
    Func _addphrase()
    $input=InputBox("Neue Phrase eingeben"," ")
    If @error Then Return
    IniWrite(@AppDataDir & "\GLi\Clippy\phrases.ini","phrases",IniRead(@AppDataDir & "\GLi\Clippy\phrases.ini","options","num",0),$input)
    IniWrite(@AppDataDir & "\GLi\Clippy\phrases.ini","options","num",IniRead(@AppDataDir & "\GLi\Clippy\phrases.ini","options","num",0)+1)
    _ArrayAdd($clipboard,$input)
    EndFunc

    [/autoit]


    bekannte Bugs:

    • Fehlerhafte Limitierung des Fensters bei Win+V, wenn zu nah am unteren Rand
    • fenster könnte theoretisch größer als der Bildschirm werden...


    Todo:

    • Optik
    • korrekte Limitierung von Position und Größe
    • ???

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    Einmal editiert, zuletzt von L3viathan2142 (18. September 2009 um 11:57)

  • Hat der mir eiskalt geklaut, wie schon gesagt, bitte keine anderen selbst gemoddete versionen uploaden.
    Wenn du sowas machen willst, kannst du mir auch helfen.

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

    • Offizieller Beitrag

    Ich denke dir hat niemand was geklaut. Oscar hat schon vor Monaten ein Script in der Art veröffentlicht. ClipboardMemo

    Geklaut wäre, wenn L3viathan2142 deinen Code verwenden würde.

  • @leviathan, bei dem Bug mit der "Theoretisch könnte das Fenster größer als der Bildschirm werden", würde ich mit einem UpDown und @DesktopHeight limitieren ;)

  • @leviathan, bei dem Bug mit der "Theoretisch könnte das Fenster größer als der Bildschirm werden", würde ich mit einem UpDown und @DesktopHeight limitieren

    Richtig, dazu brauche ich aber das echte @DesktopHeight. Manche Leute haben mehrere Monitore, es wird jeweils nur der Wert des ersten Monitors ausgegeben.

    Deshalb: Ich suche diese UDF, um die "echte" Desktophöhe und -breite zu ermitteln... ?(

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    • Offizieller Beitrag

    Hab sie gefunden! Ist von AspirinJunkie: Auflösung des 2ten Monitors

    Edit: Ah, verdammt! Es wird aber nicht angezeigt, ob der Desktop geklont oder erweitert ist und wenn erweitert, in welche Richtung. Schade!

    Edit2: Ich habe jetzt mal eine eigene Funktion dazu geschrieben: _GetGlobalResolution