我写了个winform程序,在后台运行,现在需要一个全局热键,也可以说是监视系统的粘贴动作,即检测用户是否按了ctrl+v.在网上找了些资料,说是调用api,研究了半天也没个头绪,现在我要解决的问题是,监视粘贴动作需要导入那几个dll?比如按下ctrl+v后我要调用change(),该怎么写啊?高手们帮忙啊!

解决方案 »

  1.   

    例如:[DllImport("GDI32.DLL")]
    private static extern bool BitBlt(参数);
      

  2.   

    调用写内存的API函数/// <summary>
    /// 向指定内存地址写入数据
    /// </summary>
    /// <param name="hProcess">进程句柄</param>
    /// <param name="lpBaseAddress">需要写入的地址</param>
    /// <param name="lpBuffer">将要写入的数据</param>
    /// <param name="nSize">写入长度</param>
    /// <param name="lpNumberOfBytesWritten">实际写入长度</param>
    /// <returns></returns>
    [DllImport("Kernel32.dll")]
    private static extern bool WriteProcessMemory(IntPtr hProcess, int lpBaseAddress, int lpBuffer, int nSize, int lpNumberOfBytesWritten);
      

  3.   

    老大们啊,我的意思是
    当我在任何界面下按下Ctrl+V时,会调用我的一段代码伪代码//调用API
    if(Ctrl && V )
     {
         //我的代码
     }
      

  4.   

    使用全局键盘钩子..
    .NET 你的先建个类库项目 使用APISetWindowsHookEx
      

  5.   

    用全局键盘钩子
    基本就是调用api和写一个回调函数api 就几个dll 
    内核有关
    Kernel32.dll
    绘图有关
    Gdi32.dll
    和..有关
    user32.dll
    还有几个不常用的
    在system32下
      

  6.   


        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            RegisterHotKey(this.Handle, 100, 2, Keys.V);
            }        protected override void WndProc(ref Message m)
            {
                if (m.Msg == 0x0312//这个是window消息定义的注册的热键消息 
                    && (int)m.WParam == 100) //如果是我们注册的那个热键 
                {
                    MessageBox.Show("你按了ctrl+v");
                }            base.WndProc(ref m);
            }        protected override void OnClosing(CancelEventArgs e)
            {
                UnregisterHotKey(this.Handle, 100);            base.OnClosing(e);
            }        [DllImport("user32.dll")]
            static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);        [DllImport("user32")]
            static extern bool UnregisterHotKey(IntPtr hWnd, int id); 
        }
      

  7.   

    我还想保留系统的ctrl+v的粘贴功能,这能做得了吗?即,按下Ctrl+V后,先粘贴再调用系统的消息?
      

  8.   

    C# 就是这个不喜欢,还要 Use vb6.0 中的DLL ,为什么自己不集成呢?任何界面下按下Ctrl+V,看看下面的这个能不能作一下参考:
    http://topic.csdn.net/u/20090423/14/899352d5-9bf4-4bb2-8b46-d634ba0aec2b.html
      

  9.   

    同意楼上的观点:
    C# code
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            RegisterHotKey(this.Handle, 100, 2, Keys.V);
            }        protected override void WndProc(ref Message m)
            {
                if (m.Msg == 0x0312//这个是window消息定义的注册的热键消息 
                    && (int)m.WParam == 100) //如果是我们注册的那个热键 
                {
                    MessageBox.Show("你按了ctrl+v");
                }            base.WndProc(ref m);
            }        protected override void OnClosing(CancelEventArgs e)
            {
                UnregisterHotKey(this.Handle, 100);            base.OnClosing(e);
            }        [DllImport("user32.dll")]
            static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);        [DllImport("user32")]
            static extern bool UnregisterHotKey(IntPtr hWnd, int id); 
        }
      

  10.   

    http://blog.csdn.net/null1/archive/2009/03/03/3953155.aspx