区分剪贴板更改的来源

问题描述

我想在剪贴板内容发生变化时记录它,所以我创建了以下代码

#Persistent
FileEncoding,UTF-8
OnClipboardChange("ClipChanged")
return

ClipChanged(Type) {
    Now := A_Now
    FormatTime,time,Now,dd.MM.yyyy HH:mm:ss
    FileAppend,% Format("{}   '{}'`n",Clipboard),D:\clipboard_log.txt
}

现在,当我更改剪贴板时,我想忽略场景。我想记录仅由外部应用程序所做的剪贴板更改。我想出了一个主意:

#Persistent
FileEncoding,UTF-8
OnClipboardChange("ClipChanged")
global clipChangedByMe := false
return

ClipChanged(Type) {
    if (clipChangedByMe)
    {
        clipChangedByMe := false
    }
    else
    {
        Now := A_Now
        FormatTime,dd.MM.yyyy HH:mm:ss
        FileAppend,D:\clipboard_log.txt
    }
}

^c::
    clipChangedByMe := true
    Clipboard := ClipboardAll
return

出于某种原因,ClipChanged 事件不会在第 Clipboard := ClipboardAll 行之后触发。有什么问题吗?

解决方法

乍一看,我在这里看到了几个问题。如果您想要保留 Ctrl + Coriginal function,您必须使用波浪号前缀:~^c。其次,ClipboardClipboardAll 都是内置变量,您出于某种原因将一个分配给另一个?

更新:嗯,以下似乎有效:

Global clipChangedByMe := false
OnClipboardChange("ClipChanged")

~^c::clipChangedByMe := true

ClipChanged() {
    If (clipChangedByMe)
        clipChangedByMe := false
    else {
        FormatTime,time,dd.MM.yyyy HH:mm:ss
        FileAppend,% Format("{}`n{}`n`n",Clipboard),D:\clipboard.log
    }
}