我的控制台应用程序带有"输出类型" " 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中运行程序后(在" debug" mode或" release" mode,没有区别),这里是从剪贴板粘贴回Word的结果:
如果我执行相同的练习但是通过在Windows资源管理器中双击它来运行程序(即在\bin\Debug
目录中),则剪贴板上没有任何文本可以粘贴到Word中:
这有什么区别?为什么它不在Visual Studio之外工作?
答案 0 :(得分:2)
默认情况下,当应用程序退出时,会自动从剪贴板中清除放置在带有SetDataObject的系统剪贴板上的数据。
使用System.Windows.Clipboard.SetDataObject(currentClipboardText, true);
代替在应用程序退出后将数据保留在剪贴板中。
答案 1 :(得分:0)
我已经测试了您的代码,但在调试时它不起作用。我换了一行:
System.Windows.Clipboard.SetDataObject(currentClipboardText);
使用:
System.Windows.Clipboard.SetText(currentClipboardText);
它在调试时有效,在没有调试时也有用。我认为正在发生的事情是Word不再将DataObject识别为可粘贴的文本。
我希望这能解决你的问题。