您的位置:首页 > 编程语言 > C#

C# 控制台程序实现 Ctrl + V 粘贴功能

2015-12-25 23:01 826 查看
  代码主要分为两部分,首先调用系统API注册剪切板相关的事件,然后监控用户的按键操作。完整代码如下:

   class ClipBoard
{
[DllImport("user32.dll", SetLastError = true)]
private static extern Int32 IsClipboardFormatAvailable(uint format);

[DllImport("user32.dll", SetLastError = true)]
private static extern Int32 OpenClipboard(IntPtr hWndNewOwner);

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr GetClipboardData(uint uFormat);

[DllImport("user32.dll", SetLastError = true)]
private static extern Int32 CloseClipboard();

[DllImport("kernel32.dll", SetLastError = true)]
private static extern Int32 GlobalLock(IntPtr hMem);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern Int32 GlobalUnlock(IntPtr hMem);

[DllImport("kernel32.dll")]
public static extern UIntPtr GlobalSize(IntPtr hMem);

const uint CF_TEXT = 1;

/// <summary>
/// 实现控制台自动粘贴板功能
/// </summary>
/// <returns></returns>
public static string PasteTextFromClipboard()
{
string result = "";
if (IsClipboardFormatAvailable(CF_TEXT) == 0)
{
return result;
}
if (OpenClipboard((IntPtr)0) == 0)
{
return result;
}

IntPtr hglb = GetClipboardData(CF_TEXT);
if (hglb != (IntPtr)0)
{
UIntPtr size = GlobalSize(hglb);
IntPtr s = (IntPtr)GlobalLock(hglb);
byte[] buffer = new byte[(int)size];
Marshal.Copy(s, buffer, 0, (int)size);
if (s != null)
{
result = ASCIIEncoding.ASCII.GetString(buffer);
GlobalUnlock(hglb);
}
}

CloseClipboard();
return result;
}

/// <summary>
/// 监控用户输入的按键
/// </summary>
public void KeyPress()
{
ConsoleKeyInfo ki = Console.ReadKey(true);
if ((ki.Key == ConsoleKey.V) && (ki.Modifiers == ConsoleModifiers.Control))
{
Console.WriteLine("Ctrl+V pressed");
string s = ClipBoard.PasteTextFromClipboard();
Console.WriteLine(s);
}

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: