繁体   English   中英

为什么在Visual Studio外部运行时,我的剪贴板操作应用程序的行为会有所不同?

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

我有一个控制台应用程序,其“输出类型”为“ Windows应用程序”(以实现无头行为,即没有UI,没有控制台窗口)。 目的是“清除” Windows剪贴板中的文本,即修剪所有前导和尾随空白并删除格式。

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

这是我的代码:

[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格式格式化的示例输入,已复制到剪贴板:

在此处输入图片说明

在dubugger中运行程序后(无论是在“调试”模式还是在“发布”模式,都没有区别),以下是从剪贴板粘贴回Word的结果:

在此处输入图片说明

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

在此处输入图片说明

这里有什么区别? 为什么在Visual Studio之外无法正常工作?

默认情况下,当应用程序退出时,带有SetDataObject的系统剪贴板上放置的数据会自动从剪贴板中清除。

MSDN

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

我已经测试了您的代码,并且在调试时不起作用。 我改变了这一行:

System.Windows.Clipboard.SetDataObject(currentClipboardText);

附:

System.Windows.Clipboard.SetText(currentClipboardText);

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

我希望这能解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM