将结果复制到剪贴板

大家好我写一个控制台应用程序:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { public static void Main(String[] args) { if (args.Length == 0) { Console.WriteLine("No file to upload..."); Environment.Exit(0); } else Console.WriteLine("[~] Trying to upload: " + args[0]); string name = Regex.Match(args[0], @"[^\\]*$").Value; ftp ftpClient = new ftp(@"ftp://site.ru/", "dfgd", "QWERTY_123"); ftpClient.upload("www/site.ru/upload/" + name, args[0]); Console.WriteLine("[+] Upload File Complete"); Console.ReadKey(); } } } 

如何在Console.WriteLine("[+] Upload File Complete");之后Console.WriteLine("[+] Upload File Complete");args[0]复制到剪贴板?

首先,您必须在应用程序中添加对System.Windows.Forms的引用。

转到项目 – >添加引用,从刚打开的窗口中的.NET选项卡中选择System.Windows.Forms。

您必须通过将STAThread属性应用于Main()函数来避免ThreadStateException。 然后您可以毫无问题地使用剪贴板function。

 using System; using System.Windows.Forms; class Program { [STAThread] static void Main(string[] args) { Clipboard.SetText("this is in clipboard now"); } } 

如果你不想使用对System.Windows.Forms的引用,你可以通过P / Invoke来实现

平台调用Clipboard API是一种可能的解决方案。 例:

 using System.Runtime.InteropServices; class Program { [DllImport("user32.dll")] internal static extern bool OpenClipboard(IntPtr hWndNewOwner); [DllImport("user32.dll")] internal static extern bool CloseClipboard(); [DllImport("user32.dll")] internal static extern bool SetClipboardData(uint uFormat, IntPtr data); [STAThread] static void Main(string[] args) { OpenClipboard(IntPtr.Zero); var yourString = "Hello World!"; var ptr = Marshal.StringToHGlobalUni(yourString); SetClipboardData(13, ptr); CloseClipboard(); Marshal.FreeHGlobal(ptr); } } 

这只是一个例子。 在代码周围添加一点error handling,比如检查P / Invoke函数的返回值将是一个很好的补充。

SetClipboardData是有趣的一点,你也想确保你打开和关闭剪贴板。

作为第一个参数传入的13是数据格式。 13 表示unicode字符串 。

Marshal.StringToHGlobalUni函数实际上以不适合SetClipboardData的方式分配内存(使用带有LMEM_FIXED的LocalAlloc),这可能导致崩溃。 (你不会指望它给出方法名称,但是进入代码,例如使用ReSharper就会发现这一点。)SetClipboardData要求GlobalAlloc和GMEM_MOVABLE根据文档: MSDN上的SetClipboardData 。

这是MIT许可的System.Windows.Forms替代方案,经过测试并完成了error handling: Clippy

(剪贴板推送代码本身可以在这里找到: Clippy.cs

您需要使用ClipBoard.SetText方法

  Clipboard.SetText(args[0], TextDataFormat.Text);