从其他线程捕获全局钩子事件(鼠标键盘)

时间:2014-09-05 16:39:29

标签: c# multithreading hook global

你做了一个钩子库,从键盘和鼠标捕获全局事件。

   `private bool Install()     //this function install all the hooks (mouse/keyobard) 
    {                            
        bool started=true;
        started &= _globalMouse.Install();
        started &= _globalKeyboard.Install();

        if(!started)
        {
            Uninstall();
        }
        return started;
    }

    private void Uninstall() //this function unistall all the hooks
    {
        _globalMouse.Uninstall();
        _globalKeyboard.Uninstall();
    }


    private void run()   // this is the method that is called by the thread to register and 
                         // there should be caught all the global events (mouse/keyboard) 
    {

        Instance.Install();
       while(_running)
       {
           Thread.Sleep(0);
       }

        Instance.Uninstall();
    }`

这是创建和启动线程函数:

        public bool Start()
        {
            if(_thread!=null && _thread.IsAlive)
            {
                return true;
            }
            _running = true;
            _thread = new Thread(run);
            _thread.Start();
            return _running;
        }

问题是,如果我直接从我的表单中使用方法Install(),它就可以了。如果方法start()应该启动线程它不起作用(是的,线程保持活动状态,是的,我在表单中正确捕获了所需的事件(使用Install()函数)。< / p>

我在不同页面上看到我需要一个循环来从系统中向系统发送消息,但我不知道如何制作它。

我的问题是如何让我的线程能够捕获在表单线程中工作正常的全局事件。

0 个答案:

没有答案