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
#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
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
- ???