剪贴板增强---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  
时间: 2024-08-03 00:09:31

剪贴板增强---Kawvin增强剪贴板_V2.0的相关文章

c++对c对增强实用性”增强

实用性"增强 实用性"增强 //C语言中的变量都必须在作用域开始的位置定义!! //C++中更强调语言的"实用性",所有的变量都可以在需要使用时再定义. int main() { int i = 0; printf("ddd"); int k; system("pause"); return 0; } register关键字增强 //register关键字 请求编译器让变量a直接放在寄存器里面,速度快 //在c语言中 regi

在linux系统中安装virtualbox增强功能(增强包)的详细步骤

1. 点击菜单栏 设备 –> 分配光驱 –> 选择一个虚拟光盘,找到VirtualBox安装目录下的VBoxGuestAdditions.iso,加载此镜像.2. 启动Linux系统并用root身份登入系统3. 执行挂载命令,将虚拟光盘挂在到 /mnt/cdrom,如果没有cdrom目录,则先创建之. 代码如下: mkdir /mnt/cdrommount -t auto -r ro /dev/cdrom /mnt/cdrom 4. 复制脚本到/tmp目录下 代码如下: cd /mnt/cdr

【Windows编程】系列第九篇:剪贴板使用

 上一篇我们学习了常见的通用对话框,本篇来了解剪贴板的使用,它常用于复制粘贴功能. 剪贴板是Windows最早就加入的功能,由于该功能非常实用,我们几乎每天都会使用到.通过剪贴板,我们就可以将数据从一个应用程序传递到另一个应用程序,是一种简单的进程间通信. 许多文档处理软件都有复制.剪切.粘贴功能,这些都是用Windows剪贴板实现的,当然我们也可以在我们的程序中实现自己的剪贴板功能,本篇我们就来实现自己的剪贴板.使用剪贴板时,都是先把源数据先传到剪贴板上,再在需要的时候从剪贴板传输到目的处

Spring AOP 创建增强类

AOP联盟为增强定义了org.aopalliance.aop.Advice接口,Spring支持5种类型的增强:  1)前置增强:org.springframework.aop.BeforeAdvice 代表前置增强,因为Spring 只支持方法级的增强,所有MethodBeforeAdvice是目前可用的前置增强,表示在目标方法执行前实施增强,而BeforeAdvice是为了将来版本扩展需要而定义的:  2)后置增强:org.springframework.aop.AfterReturning

Spring aop——前置增强和后置增强 使用注解Aspect和非侵入式配置

AspectJ是一个面向切面的框架,它扩展了java语言,定义了AOP语法,能够在编译期提供代码的织入,所以它有一个专门的编译器用来生成遵守字节码字节编码规范的Class文件 确保使用jdk为5.0以上版本. 01.使用注解标注增强(AspectJ)  :取代了配置文件中的aop:pointcut节点的配置 添加jar和log4j的配置文件 aspectj-1.8.7.jar aspectjweaver.jar 添加头文件: xmlns:aop="http://www.springframewo

SAP 4代增强

*20170325 160000 以下之外, 还有:1.替代, -用过一次:2.BTE -没用过,需要学习: 第二代增强和第三代增强的差别: 1.Tcode 不同:第二代: CMOD 增强管理,SMOD 实施的增强点:第三代: SE18 BADI定义,SE19 BADI实现: 2.实现方式不同: SMOD 增强 是基于函数模块的增强,函数名称是 EXIT_程序名_'xxx',使用CALL customer-function 'XXX'调用函数模块,函数里面一般是 INCLUDE Zxxx 一句话

SAP 中如何寻找增强

方法一.利用TCODE寻找增强(第二代的增强) 执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个的绝大部分SMOD增强. 点击进去,自己手动寻找需要的增强. 这是第二代增强 方法二.利用系统函数寻找         MODX_FUNCTION_ACTIVE_CHECK 在这个FUNCTION的代码最后添加一个断点.执行需要增强的TCODE,如果有增强,就会自动跳入DEBUG界面.在DEBUG界面,查看f_tab字段,这里

windows剪贴板

0x01  Windows剪贴板 Windows剪贴板是一种比较简单同时也是开销比较小的IPC(InterProcess Communication,进程间通讯)机制.Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局共享内存,用来暂存在各进程间进行交换的数据:提供数据的进程创建一个全局内存块,并将要传送的数据移到或复制到该内存块:接受数据的进程(也可以是提供数据的进程本身)获取此内存块的句柄,并完成对该内存块数据的读取. 为使剪贴板的这种IPC机制更加完善和便于使用,需要解决好

Listary Pro- 文件浏览与搜索增强的超级神器

Listary 是一款 Windows 文件浏览增强工具,为 Windows 资源管理器增加智能命令.最近文档以及收藏功能.文件小,功能强大.秒杀系统自带搜索功能!! 它是一款非常优秀的 Windows 文件浏览和搜索增强工具,可以为你 Windows 的「文件浏览对话框」.「资源管理器」等增加非常方便的文件快速定位.实时全盘搜索.常用文件夹收藏.打开历史.快速切换到已打开的路径.快捷右键菜单等一系列非常非常实用和高效的功能,它能将 Windows 的便捷性提高到一个新的高度! 这里有一段来自i