大家好我写了一个控制台应用程序:
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");
复制args[0]
到剪贴板?
答案 0 :(得分:10)
首先,您必须在应用程序中添加对 System.Windows.Forms 的引用。
转到项目 - >添加引用,从刚打开的窗口中的.NET选项卡中选择System.Windows.Forms。
您必须通过将STAThread属性应用于Main()函数来避免ThreadStateException。然后您可以毫无问题地使用剪贴板功能。
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);
}
}
这只是一个例子。在代码周围添加一些错误处理,比如检查P / Invoke函数的返回值将是一个很好的补充。
SetClipboardData
是有趣的,你也想确保你打开和关闭剪贴板。
作为第一个参数传入的13
是数据格式。 13 means unicode string。
答案 1 :(得分:5)
Marshal.StringToHGlobalUni函数实际上以不适合SetClipboardData的方式分配内存(使用带有LMEM_FIXED的LocalAlloc),这可能导致崩溃。 (你不会指望它给出方法名称,但是进入代码,例如使用ReSharper会显示这一点。)根据文档SetClipboardData on MSDN,SetClipboardData需要GlobalAlloc和GMEM_MOVABLE。
这是MIT许可的System.Windows.Forms替代方案,经过测试并完成了错误处理:Clippy
(剪贴板推送代码本身可在此处找到:Clippy.cs
答案 2 :(得分:0)
您需要使用ClipBoard.SetText方法
Clipboard.SetText(args[0], TextDataFormat.Text);