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

  代码主要分为两部分,首先调用系统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);
        }
    }
时间: 2024-12-09 17:49:50

C# 控制台程序实现 Ctrl + V 粘贴功能的相关文章

js实现ctrl+v粘贴并上传图片

再分享一个刚学会的小东东:聊天室实现ctrl+v粘贴并上传图片,亲测有效(目前只能粘贴QQ或者微信的截图上传,桌面上的图片直接复制再粘贴无效,今后再深究),下面上代码 前端页面: <textarea class="scroll" id="text" placeholder="在此输入..."></textarea> <script type="text/javascript"> docume

c# TextBox只允许输入数字,禁用右键粘贴,允许Ctrl+v粘贴数字

TextBox只允许输入数字,最大长度为10 //TextBox.ShortcutsEnabled为false 禁止右键和Ctrl+v private void txtNumber_KeyPress(object sender, KeyPressEventArgs e) { //只允许输入数字,粘贴数字 if (!(Char.IsNumber(e.KeyChar) || e.KeyChar == (char)8)) { e.Handled = true; } } //允许Ctrl+v粘贴数字 p

js实现ctrl+v粘贴图片或是截图

浏览器环境:谷歌浏览器 1.ctrl+v粘贴图片都是监听paste时间实现的,复制的数据都存在clipboardData下面,虽然打印显示数据长度为0,但是还是可以获取数据的 2.打印clipboardData.items发现是一个DataTransferItem. 3.DataTransferItem有个getAsFile()的方法,可以获取文件 document.addEventListener('paste', function (event) { console.log(event);

ckeditor 实现ctrl+v粘贴图片并上传、word粘贴带图片

由于工作需要必须将word文档内容粘贴到编辑器中使用 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题 考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来解决这一问题 发现不管什么编辑器只要将图片转换成base64后就可以直接使用(IE8及一下可能不支持),由于编辑器中添加word文档功能也只是自己用,因此可以忽略这种浏览器了 找了很久,试用了很多编辑器,

xhEditor实现ctrl+v粘贴word图片并上传

自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片.需要用户手动一张张上传Word图片.如果只有一张图片还能够接受,如果图片数量比较多,这种操作就显得非常的麻烦. 1.只粘贴图片并上传到服务器 config.extraPlugins = 'uploadimage'; //config.uploadUrl = '上传路径

richtextbox Ctrl+V只粘贴纯文本格式

只能粘贴剪切板中的TXT内容 并且 不能改变 剪切板的内容1 当用户按下Ctrl+V屏蔽系统的粘贴功能,然后添加自己的功能2019年12月19日 19:34:38 private void richTextBox1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.V) { e.Handled = true;//屏蔽Ctrl+ V组合按键 DataFormats.Format myForm

让C++控制台程序停下来,实现暂停功能

让C++控制台程序停下来,实现暂停功能 一.针对Microsoft #include   <stdlib.h> (1)第一种方式system( "PAUSE "); -------------------- (2)第二种方式getchar();  // 这招对QT程序也有用--------------------- (3)第三种方式Sleep(); 二.针对Linux(1)第一种方式 getchar(); 参考: http://www.cppblog.com/lauer39

C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出

C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出,这里使用到了Windows API SetConsoleCtrlHandler函数 注意:在VS中调试执行时,在处理程序例程中设置断点,不会中断:会提示:无可用源,如下图: 完整示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Eclipse使用Ctrl+C和Ctrl+V复制粘贴时总是卡顿

Eclipse使用Ctrl+C和Ctrl+V复制粘贴时总是卡顿,解决办法: 更改打开代码超链接按键Ctrl为Alt: Window -> Preferences -> General -> Editors -> Text Editors -> Hyperlinking 设定按键为:Alt,保存,即可.