当 运行 在 Visual Studio 之外时,为什么我的剪贴板操作应用程序表现不同?

Why is my clipboard-manipulating application behaving differently when run outside of Visual Studio?

我有一个 "output type" 为 "Windows Application" 的控制台应用程序(以实现无头行为,即没有 UI,没有控制台 window)。目的是 "clean" Windows 剪贴板中的文本,即 trim 所有前导和尾随空格并删除格式。

调试时效果很好,但是当我从资源管理器中运行它时,它只是清除剪贴板内容。

这是我的代码:

[STAThread]
internal static void Main(string[] args)
{
    var currentClipboardText = System.Windows.Clipboard.GetText();

    // only if the clipboard has text; leave any other content intact.
    if(!string.IsNullOrEmpty(currentClipboardText))
    {
        currentClipboardText = currentClipboardText.Trim();
        var pattern =  @"[\t\r\n\v\f\u2028\u2029]"; // match vert. whitesp & tabs
        currentClipboardText = Regex.Replace(currentClipboardText, pattern, " "); 
        System.Windows.Clipboard.SetDataObject(currentClipboardText);                
    }
}

MS Word 格式输入示例,复制到剪贴板:

在我运行调试器中的程序之后(在"debug"模式或"release"模式下,没有区别),这是从剪贴板粘贴回Word的结果:

如果我做同样的练习,但 运行 通过在 Windows 资源管理器(即 \bin\Debug 目录)中双击该程序,则没有文本留在要粘贴到 Word 中的剪贴板:

这里有什么区别?为什么它不能在 Visual Studio 之外工作?

By default, data placed on the system Clipboard with SetDataObject is automatically cleared from the Clipboard when the application exits.

MSDN

改为使用System.Windows.Clipboard.SetDataObject(currentClipboardText, true);,以便在应用程序退出后将数据保留在剪贴板中。

我测试了你的代码,调试的时候没有用。我更改了行:

System.Windows.Clipboard.SetDataObject(currentClipboardText);

与:

System.Windows.Clipboard.SetText(currentClipboardText);

它在调试时和不调试时都有效。我认为正在发生的事情是 Word 不再将 DataObject 识别为可粘贴文本。

希望这能解决您的问题。