如何防止从 OneNote 复制的文本被粘贴为图像

如何防止从 OneNote 复制的文本被粘贴为图像

从 OneNote 复制文本时,它也会作为图像显示在剪贴板中。(内容以各种不同的格式类型保存在 Windows 剪贴板中)某些应用程序在粘贴时使用图像版本,导致粘贴的文本显示为图像。

Microsoft 支持页面上有一些未解决的支持票,但似乎没有正在开发的功能/错误修复。

自我回答的问题...但欢迎更好的解决方案。

答案1

我通过编写以下 AutoHotkey 脚本解决了这个问题

$^c::
Send ^c ; Do a normal copy to clipboard
sleep 100 ; Wait for the copy to finish
WinGet current_application, ProcessName, A ; Get the name of the current application

; if the application is OneNote, and the copied content is text ...
if ((current_application = "ONENOTE.EXE") && DllCall("IsClipboardFormatAvailable", "uint", 1)) {
    clipboard = %clipboard% ; remove the formatting
}
Return

此脚本检测当前应用程序和正在复制的内容类型。如果文本是从 OneNote 复制的,它会将文本以纯文本形式存储在剪贴板中,删除其他类型,从而使其他应用程序中的粘贴工作正常。

与其他解决方案(使用 Ctrl-V 时删除格式)相比,这个脚本的优势在于,在 Word 中复制粘贴文件/图像/格式化文本不会中断。

答案2

我找到了这个答案:Ctrl++Shift来自V

它在我遇到问题的程序(Discord)中不起作用,但似乎在某些应用程序中起作用

Mac 等效版本:Shift+++来自CommandOptionV询问不同

答案3

当我复制并粘贴到 Yahoo 邮箱时,它被复制为图像。这对我来说很管用。在 Gmail 中打开一个新的消息页面并复制到其中。我复制为文本。然后您可以从那里复制并粘贴为文本。

答案4

除了@Wouter 的建议外,如果您使用 Windows Store 中的 OneNote 作为 UWP,它将不会作为 ONENOTE.EXE 运行,我修改了 Autohotkey 脚本如下:

$^c::
    Send, ^c
    ClipWait, 1

    if ErrorLevel
    {
        MsgBox, Copying to clipboard failed.
        return
    }

    WinGet, current_application, ProcessName, A
    WinGetTitle, current_window_title, A

    if (current_application = "ApplicationFrameHost.exe" && InStr(current_window_title, "OneNote"))
    {
        if DllCall("IsClipboardFormatAvailable", "uint", 1)
        {
            clipboard := clipboard  ; Convert to text-only, removing formatting.
            ClipWait, 1
            if ErrorLevel
            {
                MsgBox, Failed to process clipboard data.
            }
        }
    }
return

相关内容