当 运行 在 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.
改为使用System.Windows.Clipboard.SetDataObject(currentClipboardText, true);
,以便在应用程序退出后将数据保留在剪贴板中。
我测试了你的代码,调试的时候没有用。我更改了行:
System.Windows.Clipboard.SetDataObject(currentClipboardText);
与:
System.Windows.Clipboard.SetText(currentClipboardText);
它在调试时和不调试时都有效。我认为正在发生的事情是 Word 不再将 DataObject 识别为可粘贴文本。
希望这能解决您的问题。
我有一个 "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.
改为使用System.Windows.Clipboard.SetDataObject(currentClipboardText, true);
,以便在应用程序退出后将数据保留在剪贴板中。
我测试了你的代码,调试的时候没有用。我更改了行:
System.Windows.Clipboard.SetDataObject(currentClipboardText);
与:
System.Windows.Clipboard.SetText(currentClipboardText);
它在调试时和不调试时都有效。我认为正在发生的事情是 Word 不再将 DataObject 识别为可粘贴文本。
希望这能解决您的问题。