我经常使用“海思剪切板”复制、粘贴,复制、粘贴,alt+1~9复制,ctrl+1~9粘贴,当手工复制了之后,我想使用C#代码实现ctrl+1~9粘贴这个动作,请问怎么实现?谢谢!

解决方案 »

  1.   

    到MSDN中查询一下Clipboard类的相关信息你可以用Clipboard把数据存到剪切板,也可以从Clipboard取出你放进去的数据
      

  2.   

    第一点:Key press事件里面去定义你的key
    第二点:读写clipboard.
      

  3.   

    在KeyPress事件里面写
    如果调用
     IDataObject data = Clipboard.GetDataObject();
     if (data.GetDataPresent(DataFormats.Text))
          textBox1.Text = data.GetData(DataFormats.Text).ToString();
      

  4.   

    测试过了
    在Key_Down事件里面写
    if (e.Control && e.KeyValue >= 49 && e.KeyValue <= 57)
                {
                    IDataObject getData = Clipboard.GetDataObject();
                    if(getData.GetDataPresent(DataFormats.Text))
                    {
                        this.txtValue.Text = getData.GetData(DataFormats.Text).ToString();
                    }
                }
      

  5.   

    谢谢楼上各位的指点
    但是这个应该不是我需求的,不过还是谢谢!
    这个问题的难点在于,海思剪贴板是第三方软件,它运行的时候,使用alt+1~9复制,ctrl+1~9粘贴
    我现在的问题就是要在手工复制了之后,我想使用C#代码实现ctrl+1~9粘贴这个动作但是上面的代码好像都是针对C#来操作的?继续请教,谢谢先!
      

  6.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using System.Diagnostics;namespace ClipboardEdit
    {
        public class InterceptKeys
        {
            private const int WH_KEYBOARD_LL = 13;        private const int WM_KEYDOWN = 0x0100;        private static LowLevelKeyboardProc _proc = HookCallback;        private static IntPtr _hookID = IntPtr.Zero;        /// <summary>
            /// 启动监测程序
            /// </summary>
            public static void RunHook()
            {
                _hookID = SetHook(_proc);
            }        /// <summary>
            /// 关闭监测程序
            /// </summary>
            public static void UnHook()
            {
                UnhookWindowsHookEx(_hookID);
            }        private static IntPtr SetHook(LowLevelKeyboardProc proc)
            {
                using (Process curProcess = Process.GetCurrentProcess())
                using (ProcessModule curModule = curProcess.MainModule)
                {
                    return SetWindowsHookEx(WH_KEYBOARD_LL, proc,GetModuleHandle(curModule.ModuleName), 0);
                }
            }        /// <summary>
            /// 设置默认值与数据
            /// </summary>
            /// <param name="initInt"></param>
            /// <param name="outString">"F:\图片\精品分类\品牌图片\google徽标\@[email protected]"</param>
            public static void Init(int initInt, string outString)
            {
                i = initInt;
                str = outString;
            }        private static int i = 0;
            private static string str = @"I:\over\Images\google\@[email protected]";        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
            {
                if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
                {
                    int vkCode = Marshal.ReadInt32(lParam);
                    Keys key=(Keys)vkCode;
                    //同时按下Ctrl+V键的时候
                    if (Control.ModifierKeys == Keys.Control && key.Equals(Keys.V))
                    {
                        //获得剪切板数据
                        string data = Clipboard.GetText(TextDataFormat.UnicodeText);
                        //重新设置剪切板数据
                        DataObject m_data = new DataObject();
                        m_data.SetData(DataFormats.Text, true, str.Replace("@_@",Convert.ToString(++i)));
                        Clipboard.SetDataObject(m_data, true);
                    }
                }
                return CallNextHookEx(_hookID, nCode, wParam, lParam);
            }        #region 调用API        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]        private static extern IntPtr SetWindowsHookEx(int idHook,        LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]        [return: MarshalAs(UnmanagedType.Bool)]        private static extern bool UnhookWindowsHookEx(IntPtr hhk);        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]        private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,        IntPtr wParam, IntPtr lParam);        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]        private static extern IntPtr GetModuleHandle(string lpModuleName);        #endregion
        } 
    }调用:InterceptKeys.RunHook();
    说明:
        其实光显示或改变剪切板里面的数据没有这么多代码的,这里启动键盘监测程序,只有按下CTRL+C改会改变剪切板中的数据,像[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]这样的代码都是引入DLL,调用系统API用于监测键盘事件的。