剪贴板增强---Kawvin增强剪贴板_V2.0
Posted zhanglei1371
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剪贴板增强---Kawvin增强剪贴板_V2.0相关的知识,希望对你有一定的参考价值。
#Persistent SetWorkingDir,%A_ScriptDir% ;设置工作目录 #MaxThreadsPerHotkey 5 ;最大热键数量 #NoEnv ;#Warn #SingleInstance force ;单脚本运行 #WinActivateForce ;强制激活窗体 Process Priority,,High ;线程,主,高级 CoordMode, Mouse ;鼠标相对于屏幕 AutoTrim,on ;自动省略首尾的空格和Tab SetBatchLines -1 ;让脚本无休眠地执行(换句话说,也就是让脚本全速运行) ComObjError(0) ;禁用 COM 错误通告 Menu, Tray, UseErrorLevel ;阻止显示对话框和终止线程 ; #NoTrayIcon Label_DefVar: global MyAppVer:="Kawvin增强剪贴板v2.0(Q285781427)" global MyClipBoard_ini:= "MyClipBoard.ini" global All_Modes:="一次复制多次粘贴|多次复制一次粘贴|同时使用2个剪贴板|临时记事本|禁用" global Sel_Mode:= ;当前模式 global EnableSound:= ;启用声音 global CopyHotKey:= ;复制热键 global PasteHotKey:= ;粘贴热键 global BackHotKey:= ;多次向前 global PrevHotKey:= ;多次向后 global MenuHotKey:= ;菜单热键 global ListWinHotKey:= ;列表窗体热键 global LCopyHotKey:= ;用于显示-复制热键 global LPasteHotKey:= ;用于显示-粘贴热键 global LBackHotKey:= ;用于显示-多次向前 global LPrevHotKey:= ;用于显示-多次向后 global LMenuHotKey:= ;用于显示-菜单热键 global LListWinHotKey:= ;用于显示-列表窗体热键 global MyClipMenu:= ;定义剪贴板菜单 global CurWin_Title:= ;当前鼠标下的窗体标题 global MyUseTongPei :=0 ;设置是否启用通配符 global MyPasteLine :=0 ;定义目前将要粘贴的行数 global MyClipArray:={} ;定义剪贴板历史记录 global MyMaxID:=0 ;最大序号 global MySel:= ;定义临时存放变量 global MySelRich:= ;定义临时存放变量 global MyAutoEnter := ;定义是否自动回车 global MyFirText:= ;第一剪贴板内容 global MySecText:= ;第二剪贴板内容 global MyWS:= ;位数 global MyStart:= ;起始序号 global MyEnd:= ;终止序号 global MySpace:= ;间距 Label_Start: iniRead,Sel_Mode,%MyClipBoard_ini%,通用设置,当前模式 iniRead,EnableSound,%MyClipBoard_ini%,通用设置,启用声音 iniRead,CopyHotKey,%MyClipBoard_ini%,通用设置,复制热键 iniRead,PasteHotKey,%MyClipBoard_ini%,通用设置,粘贴热键 iniRead,BackHotKey,%MyClipBoard_ini%,通用设置,多次向前 iniRead,PrevHotKey,%MyClipBoard_ini%,通用设置,多次向后 iniRead,MenuHotKey,%MyClipBoard_ini%,通用设置,菜单热键 iniRead,ListWinHotKey,%MyClipBoard_ini%,通用设置,窗体热键 ;替换热键到正常键 LCopyHotKey:=MyFun_RetrunKeys(CopyHotKey) LPasteHotKey:=MyFun_RetrunKeys(PasteHotKey) LBackHotKey:=MyFun_RetrunKeys(BackHotKey) LPrevHotKey:=MyFun_RetrunKeys(PrevHotKey) LMenuHotKey:=MyFun_RetrunKeys(MenuHotKey) LListWinHotKey:=MyFun_RetrunKeys(ListWinHotKey) SkSub_CreatTrayMenu() Label_RegHotKey: CopyHotKey=$%CopyHotKey% PasteHotKey=$%PasteHotKey% BackHotKey=$%BackHotKey% PrevHotKey=$%PrevHotKey% MenuHotKey=$%MenuHotKey% ListWinHotKey=$%ListWinHotKey% if (Sel_Mode!="禁用") { hotkey,%CopyHotKey%,Label_Copy hotkey,%PasteHotKey%,Label_Paste hotkey,%BackHotKey%,Label_PasteBack hotkey,%PrevHotKey%,Label_PastePrev hotkey,%MenuHotKey%,TrayHandle_ShowMyClipArrayMenu hotkey,%ListWinHotKey%,TrayHandle_ShowListWin } Label_DrawGUI: gui Destroy if Sel_Mode=一次复制多次粘贴 { gui Main:+AlwaysOnTop Gui Font, w700 cRed Gui, Add, Text, x10 y5 h20 , 复制/添加:%LCopyHotKey%,1次粘贴:%LPasteHotKey%,②多次向:前%LBackHotKey%/后%LPrevHotKey% Gui Font Gui, Add, Edit, vMyFirText x12 y22 w360 h330 , Gui Font, w700 cRed Gui, Add, CheckBox, Checked vMyAutoEnter gLabel_AutoEnter x230 y360 w210 h20 , 粘贴后自动回车 Gui Font Gui, Add, Button, gLabel_GetData x20 y360 w80 h35 , ①数据确认 Gui, Add, Button, gLabel_Clear x102 y360 w80 h35 , 清空重置 Gui Font, s10 w700 cRed gui,Add,Text,x195 y382 h20,当前模式:%Sel_Mode% Gui Font Gui, Show, x127 y87 h402 w385, %MyAppVer% } if Sel_Mode=多次复制一次粘贴 { gui Main:+AlwaysOnTop Gui Font, w700 cRed Gui, Add, Text, x10 y5 h20 ,复制/添加:%LCopyHotKey%,粘贴:%LPasteHotKey% Gui Font Gui, Add, Edit, vMyFirText x12 y22 w360 h330 , Gui Font, w700 cRed Gui, Add, CheckBox, Checked vMyAutoEnter gLabel_AutoEnter x230 y360 w210 h20 , 粘贴后自动回车 Gui Font ;Gui, Add, Button, gLabel_GetData x20 y360 w80 h35 , 数据确认 Gui, Add, Button, gLabel_Clear x102 y360 w80 h35 , 清空重置 Gui Font, s10 w700 cRed gui,Add,Text,x195 y382 h20,当前模式:%Sel_Mode% Gui Font Gui, Show, x127 y87 h402 w385, %MyAppVer% } if Sel_Mode=同时使用2个剪贴板 { gui Main:+AlwaysOnTop Gui Font, w700 cRed Gui, Add, Text, x10 y5 h20 , 第1剪切板(复制:Alt+F11,粘贴:%LBackHotKey%) Gui Font Gui, Add, Edit, vMyFirText x12 y22 w360 h185 , Gui Font, w700 cRed Gui, Add, Text, x12 y213 h20 , 第2剪切板(复制:Alt+F12,粘贴:%LPrevHotKey%) Gui, Add, CheckBox, vMyUseTongPei gLabel_EnabledTongPei x273 y210 w120 h20 , 启用通配符(*) Gui Font Gui, Add, Edit, vMySecText x12 y230 w360 h90 , Gui, Add, Text, x12 y334 w30 h20 , 位数 Gui, Add, Edit, vMyWS x38 y330 w50 h20 , Gui, Add, UpDown, range1-9 x82 y330 w20 h20 , 1 Gui, Add, Text, x108 y334 w30 h20 , 起始 Gui, Add, Edit, vMyStart x134 y330 w50 h20 , 1 Gui, Add, UpDown, range1-999 x162 y330 w20 h20 , 1 Gui, Add, Text, x204 y334 w30 h20 , 终止 Gui, Add, Edit, vMyEnd x230 y330 w50 h20 , Gui, Add, UpDown, range1-999 x212 y330 w20 h20 , 99 Gui, Add, Text, x295 y334 w30 h20 , 间距 Gui, Add, Edit, vMySpace x322 y330 w50 h20 , Gui, Add, UpDown, range1-999 x352 y330 w20 h20 , 1 Gui Font, w700 cRed Gui, Add, CheckBox, Checked vMyAutoEnter gLabel_AutoEnter x230 y360 w210 h20 , 粘贴后自动回车 Gui Font ;Gui, Add, Button, gLabel_GetData x20 y360 w80 h35 , 数据确认 Gui, Add, Button, gLabel_Clear x102 y360 w80 h35 , 清空重置 Gui Font, s10 w700 cRed gui,Add,Text,x195 y382 h20,当前模式:%Sel_Mode% Gui Font Gui, Show, x127 y87 h402 w385, %MyAppVer% } if Sel_Mode=临时记事本 { gui Main:+AlwaysOnTop Gui Font, w700 cRed Gui, Add, Text, x10 y5 h20 , 复制/添加:%LCopyHotKey%,1次粘贴:%LPasteHotKey%,②多次向:前%LBackHotKey%/后%LPrevHotKey% Gui Font Gui, Add, Edit, vMyFirText x12 y22 w360 h330 , Gui Font, w700 cRed Gui, Add, CheckBox, Checked vMyAutoEnter gLabel_AutoEnter x230 y360 w210 h20 , 粘贴后自动回车 Gui Font Gui, Add, Button, gLabel_GetData x20 y360 w80 h35 , ①数据确认 Gui, Add, Button, gLabel_Clear x102 y360 w80 h35 , 清空重置 Gui Font, s10 w700 cRed gui,Add,Text,x195 y382 h20,当前模式:%Sel_Mode% Gui Font Gui, Show, x127 y87 h402 w385, %MyAppVer% } WinGet, MyID, ID, A ; 获取 窗体ID. WinGetPos,,, MyWindowWidth, MyWindowHeight, A ;---- 放置屏幕键盘在屏幕的底部(考虑到任务栏的位置): SysGet, MyWorkArea, MonitorWorkArea, %MyMonitor% ; 计算用户窗体X坐标: MyWindowX = %MyWorkAreaRight% MyWindowX -= %MyWorkAreaLeft% ; 现在 MyWindowX 包含了显示器的宽度. MyWindowX -= %MyWindowWidth% MyWindowX += %MyWorkAreaWidth% ; 计算水平靠右的位置. ; 以下操作是为了防止窗体不是主显示器,或者任务栏停靠在屏幕左侧: MyWindowX += %MyWorkAreaLeft% ; 计算用户窗体Y坐标: MyWindowY = %MyWorkAreaBottom% MyWindowY -= %MyWindowHeight% WinMove, A,, %MyWindowX%, %MyWindowY% WinSet, AlwaysOnTop, On, ahMyid %MyID% ;WinSet, TransColor, %TransColor% 220, ahMyid %MyID% return ;========================= ;我的过程 SkSub_CreatTrayMenu() { Menu,Tray,DeleteAll Menu, Tray, NoStandard ;自定义菜单放在标准菜单上面 iniRead,Sel_Mode,%MyClipBoard_ini%,通用设置,当前模式 if Sel_Mode=禁用 menu,tray,icon,ICONS\KCx.ico else menu,tray,icon,ICONS\KC.ico loop,parse,All_Modes,`| { if A_LoopField!= { Menu, tray, add,%A_LoopField%,TrayHandle_ModeChange if (A_LoopField=Sel_Mode) menu,tray,Check ,%A_LoopField% } } Menu,tray, add ; 分隔符 menu,tray,add,清空剪贴板,TrayHandle_ClearCllipBoard Menu, tray, add ,剪贴板序列菜单,TrayHandle_ShowMyClipArrayMenu Menu, tray, add ,显示剪贴板列表窗体,TrayHandle_ShowListWin Menu, tray, add ; 分隔符 Menu,tray, add,参数设置,TrayHandle_EditSetting Menu,tray, add ; 分隔符 Menu, tray, add ,退出,TrayHandle_Exit Menu, Tray, Default, 剪贴板序列菜单 Menu, Tray, Click, 1 } return SkSub_CreatMyClipArrayMenu() { if MyClipArray.Length()<=1 return Menu,MyClipMenu,DeleteAll loop % MyClipArray.Length() { MyClipItem:= if strlen(MyClipArray[A_Index])>20 { MyClipItem:=substr(MyClipArray[A_Index],1,20) . "......" } else { MyClipItem:=% MyClipArray[A_Index] } menu,MyClipMenu,add,%MyClipItem%,MenuHandle_SetMenuItemToClipBoard menu,MyClipMenu,Icon,%MyClipItem%,ICONS\%A_Index%.ico } menu,MyClipMenu,add menu,MyClipMenu,add,清空历史记录,MenuHandle_ClearMenuItem ;Menu, MyClipMenu, Show } return TrayHandle_ShowMyClipArrayMenu: { ;MouseGetPos,Menu_X, Menu_Y MouseGetPos,,,CurWin_id ;当前鼠标下的进程ID WinGet, CurWin_Fullpath,ProcessPath,Ahk_ID %CurWin_id% ;当前进程的路径 WinGetTitle, CurWin_Title,Ahk_ID %CurWin_id% ;当前进程的标题 Menu, MyClipMenu, Show } return MenuHandle_SetMenuItemToClipBoard: MyPasteLine:=A_ThisMenuItemPos ClipBoard:=MyClipArray[MyPasteLine] ClipWait,0.5 send,^{vk56} return MenuHandle_ClearMenuItem: MyClipArray:={} Clipboard:= Menu,MyClipMenu,DeleteAll return TrayHandle_ShowListWin: gosub ,Label_GetData GuiControlGet,MyFirText,,MyFirText MouseGetPos,,,CurWin_id ;当前鼠标下的进程ID WinGet, CurWin_Fullpath,ProcessPath,Ahk_ID %CurWin_id% ;当前进程的路径 WinGetTitle, CurWin_Title,Ahk_ID %CurWin_id% ;当前进程的标题 Gui MyListWin:New Gui MyListWin:+AlwaysOnTop Gui MyListWin:Font, s12 Gui MyListWin:Add,Text, x5 y13 h21,指定的程序: Gui,MyListWin:Add, DropDownList,x100 y10 w300 vactivewindow, Gui MyListWin:Add,Button,x405 y9 w70 gMySub_RefreshList,刷新 MySub_RefreshList() MyListItems:= if MyClipArray.Length()=0 return loop % MyClipArray.Length() { if (A_Index=1) MyListItems:=MyClipArray[A_Index] else MyListItems:=MyListItems . "|" . MyClipArray[A_Index] } Gui MyListWin:Add,ListBox, x5 w470 h465 vMyListItem gMySub_PastMyListItem, %MyListItems% Gui MyListWin:Font Gui MyListWin:Show, w480 h500, 剪贴板列表 return TrayHandle_ClearCllipBoard: Clipboard:= return TrayHandle_ModeChange: Sel_Mode:=A_ThisMenuItem iniwrite,%Sel_Mode%,%MyClipBoard_ini%,通用设置,当前模式 Reload return TrayHandle_EditSetting: ;gui Destroy gui MySetWin:New ;Gui MySetWin:+OwnerMain gui MySetWin:+AlwaysOnTop Gui MySetWin:Font, s12 Gui MySetWin:Add, GroupBox, x11 y6 w315 h185, 热键指定:通用 Gui MySetWin:Font Gui MySetWin:Font, s11 Gui MySetWin:Add, Text, x25 y35 w105 h23 +0x200 Right, 复制: Gui MySetWin:Add, Edit, x145 y35 w165 h21 Gui MySetWin:Add, Text, x25 y65 w105 h23 +0x200 Right, 一次性粘贴: Gui MySetWin:Add, Edit, x145 y65 w165 h21 Gui MySetWin:Add, Text, x25 y95 w105 h23 +0x200 Right, 向前粘贴: Gui MySetWin:Add, Edit, x145 y95 w165 h21 Gui MySetWin:Add, Text, x25 y125 w105 h23 +0x200 Right, 向后粘贴: Gui MySetWin:Add, Edit, x145 y125 w165 h21 Gui MySetWin:Add, Text, x25 y155 w105 h23 +0x200 Right, 弹出菜单: Gui MySetWin:Add, Edit, x145 y155 w165 h21 Gui MySetWin:Add, Button, x65 y205 w75 h30, 确认 Gui MySetWin:Add, Button, gWinSetButtonCancel x200 y205 w75 h30, 取消 Gui MySetWin:Font Gui MySetWin:Show, w340 h250, 参数设置 return MySub_RefreshList() { droplist:= GuiControl,MyListWin:,activewindow,| WinGet, id, list,,, Program Manager Loop, %id% { this_id := id%A_Index% WinGetTitle, this_title, ahk_id %this_id% if this_title= continue if (this_title=CurWin_Title) droplist=%droplist%%this_title%|| else droplist=%droplist%%this_title%| } GuiControl,MyListWin:,activewindow, %droplist% ;Gui, MyListWin:Add, DropDownList,x100 y5 w370 vactivewindow, %droplist% } MySub_PastMyListItem() { GuiControlget,activewindow,MyListWin: ;MsgBox % activewindow if A_GuiEvent =DoubleClick { ClipBoard:=MyClipArray[A_EventInfo] sleep 100 ;WinWaitActive, %CurWin_Title% ,,5 WinActivate, %activewindow% send,^{vk56} } } WinSetButtonCancel: { Gui MySetWin:Destroy return } MySetWin确认: { Gui MySetWin:Destroy return } Label_Copy: if (Sel_Mode="一次复制多次粘贴" or Sel_Mode="多次复制一次粘贴" or Sel_Mode="临时记事本") { Clipboard = Send, ^{vk43} ClipWait,0.5 if ( ErrorLevel ) ;如果没有选择到什么东西,则退出 Return if MyFirText= MyFirText=%Clipboard% else MyFirText=%MyFirText%`n%Clipboard% Clipboard = GuiControl,,MyFirText,%MyFirText% } return Label_Paste: Critical, On GuiControlget, MyAutoEnter GuiControlget, MyFirText if (Sel_Mode="一次复制多次粘贴" or Sel_Mode="多次复制一次粘贴" or Sel_Mode="临时记事本") { if MyFirText= return else { if MyClipArray.Length()=0 Clipboard:=MyFirText sleep 100 if (MyAutoEnter=1) ;如果自动回车 { send,^{vk56} send,{Enter} } else { send,^{vk56} } Clipboard:= } } return !F11:: Critical, On if Sel_Mode=同时使用2个剪贴板 { GuiControl,,MyFirText, Clipboard = Send, ^{vk43} ClipWait,0.5 if ( ErrorLevel ) ;如果没有选择到什么东西,则退出 Return GuiControl,,MyFirText,%Clipboard% Clipboard = } return !F12:: Critical, On if Sel_Mode=同时使用2个剪贴板 { GuiControl,,MySecText, Clipboard = Send, ^{vk43} ClipWait,0.5 if ( ErrorLevel ) ;如果没有选择到什么东西,则退出 Return GuiControl,,MySecText,%Clipboard% Clipboard = } return Label_PasteBack: Critical, On GuiControlget, MyAutoEnter if (Sel_Mode="一次复制多次粘贴" or Sel_Mode="临时记事本") { if (MyPasteLine=-1) ;粘贴行数-1时,退出 Return MyPasteLine -=1 if (MyPasteLine <1) ;粘贴行数大于最大行数,不粘贴 { MyPasteLine:=0 return } Clipboard:=MyClipArray[MyPasteLine] sleep 100 if (MyAutoEnter=1) ;如果自动回车 { send,^{vk56} send,{Enter} } else { send,^{vk56} } Clipboard:= } if (Sel_Mode="同时使用2个剪贴板") { GuiControlGet, MyFirText if MyFirText= return else { Clipboard:=MyFirText sleep 100 if (MyAutoEnter=1) ;如果自动回车 { send,^{vk56} send,{Enter} } else { send,^{vk56} } Clipboard:= } } return Label_PastePrev: Critical, On GuiControlget, MyAutoEnter if (Sel_Mode="一次复制多次粘贴" or Sel_Mode="临时记事本") { if (MyPasteLine=-1) ;粘贴行数-1时,退出 Return MyPasteLine +=1 if (MyPasteLine > MyMaxID) ;粘贴行数大于最大行数,不粘贴 { MyPasteLine:=MyMaxID+1 return } Clipboard:=MyClipArray[MyPasteLine] sleep 100 if (MyAutoEnter=1) ;如果自动回车 { send,^{vk56} send,{Enter} } else { send,^{vk56} } Clipboard:= } if (Sel_Mode="同时使用2个剪贴板") { GuiControlGet, MySecText GuiControlGet, MyWS GuiControlGet, MyStart GuiControlGet, MyEnd GuiControlGet, MySpace GuiControlGet, MyUseTongPei if MySecText= ;第二剪贴板为空,退出 Return if (MyUseTongPei=0) ;不启用通配符 { Clipboard:=MySecText sleep 100 if (MyAutoEnter=1) ;如果自动回车 { send,^{vk56} send,{Enter} } else { send,^{vk56} } Clipboard:= } if (MyUseTongPei=1) ;启用通配符 { if (MyStart<MyEnd+1) ;如果起始值小于终止值 { MyTemStr:=MySecText ;MyPiPei:=MyFun_MakeN0(MyStart,MyWS) MyPiPei:=substr("000000000" . MyStart,1-MyWS) stringreplace,MyTemStr,MyTemStr,(*),%MyPiPei%,all MyStart:=MyStart+MySpace GuiControl,,MyStart,%MyStart% Clipboard:=MyTemStr sleep 100 if (MyAutoEnter=1) ;如果自动回车 { send,^{vk56} send,{Enter} } else { send,^{vk56} } Clipboard:= } } } return ; 粘贴后自动回车 Label_AutoEnter: { if (MyAutoEnter=1) MyAutoEnter:=0 else MyAutoEnter:=1 return } ; 清空重置 Label_Clear: { MyPasteLine:=-1 MyClipArray:={} MyMaxID:=0 MyFirText:= MySecText:= MyWS:=1 MyStart:=1 MyEnd:=99 MySpace:=1 GuiControl,,MyFirText, GuiControl,,MySecText, GuiControl,,MyWS,1 GuiControl,,MyStart,1 GuiControl,,MyEnd,99 GuiControl,,MySpace,1 ;清空菜单 Clipboard:= Menu,MyClipMenu,DeleteAll Return } ; 获取数据 Label_GetData: { GuiControlGet, MyFirText MyClipArray:={} if (Sel_Mode="一次复制多次粘贴" or Sel_Mode="临时记事本") { ;读取内容到数组 loop,parse,MyFirText,`n`|,`r { TemStr:=A_LoopField if (TemStr="") continue MyClipArray.push(Temstr) } MyMaxID:=MyClipArray.Length() MyPasteLine:=0 } ;创建菜单 SkSub_CreatMyClipArrayMenu() return } ; 启用通配符 Label_EnabledTongPei: { if (MyUseTongPei =0) { MyUseTongPei :=1 GuiControlGet,MySecText,,MySecText GuiControl,,MySecText,%MySecText%(*) }else { MyUseTongPei :=0 GuiControlGet,MySecText,,MySecText StringReplace,MySecText,MySecText,(*),,All GuiControl,,MySecText,%MySecText% } return } MyFun_RetrunKeys(HotKeyString) { StringReplace,HotKeyString,HotKeyString,`+,Shift`+,All StringReplace,HotKeyString,HotKeyString,`!,Alt`+,All StringReplace,HotKeyString,HotKeyString,`^,Ctrl`+,All StringReplace,HotKeyString,HotKeyString,`#,Win`+,All return , % HotKeyString } GuiClose: TrayHandle_Exit: ExitApp
以上是关于剪贴板增强---Kawvin增强剪贴板_V2.0的主要内容,如果未能解决你的问题,请参考以下文章
Ditto - Windows剪贴板增强小工具,方便复制粘贴多条记录