拦截鼠标单击

时间:2015-05-05 19:39:12

标签: c# windows mousekeyhook

我目前正在编写一个程序,在最初点击时按住鼠标按钮,并继续按住该按钮直到用户再次按下鼠标按钮。

该程序通过使用MouseHookListener全局检测输入,然后使用input simulator按住已按下的鼠标按钮来工作。

该程序能够按预期按住鼠标,但原始鼠标点击存在问题,该信号指示程序模拟正在按住的按钮;它仍然被执行。我知道MouseHookListener使用低级钩子来操作,但它的HookCallBack()方法由于受到保护而无法被覆盖。

有没有办法阻止原来的鼠标输入?或者有没有办法让原始输入保持不变直到再次点击鼠标?

这是我迄今为止制作的代码(注意 - 在其他论坛中激活了mListener):

    public MouseHold()
    {
        mListener = new MouseHookListener(new GlobalHooker());
        mListener.MouseClick += mListener_MouseClick;
    }

    private bool isDown;
    private int count = 0;
    private InputSimulator sim = new InputSimulator();

    public MouseHookListener mListener;        

    private void mListener_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            if (isDown)
            {
                isDown = false;                    
                Console.Out.WriteLine(count);
            }

            else
            {
                Console.Out.WriteLine(count);
                isDown = true;
                sim.Mouse.LeftButtonDown();

            }
        }
    }

2 个答案:

答案 0 :(得分:2)

我是你提到的https://github.com/gmamaladze/globalmousekeyhook图书馆的作者。

要启用您的用例,我已将该库扩展了一个以上的事件。请注意,新版本中监听器的构造也略有变化。

我认为通过下面的示例,您可以在不涉及function suitelet(request, response){ if (request.getMethod() == 'GET') { var form = nlapiCreateForm('My Custom Form', false); var slcustomer = form.addField('custpage_selectfield', 'select', 'Customer', 'customer'); form.addSubmitButton('Submit'); //For submiting as i will check for post back response.writePage(form); //Write the form or display the form } else { if (request.getMethod() == 'POST') { var customerid = request.getParameter('custpage_selectfield'); nlapiLogExecution('debug', 'selected id', customerid); nlapiSetRedirectURL('RECORD', 'task', null, false); } } } 库的情况下完成您的方案。

它是如何工作的?

  1. 首先向下鼠标设置标志InputSimulator - 向下触发。
  2. 按下之前向下的鼠标按钮,并设置标记m_SupressNextUp
  3. 第二次击倒也被压制并重置旗帜m_SupressNextDown
  4. 第二次启动并重置m_SupressNextUp
  5. 系统返回初始状态。
  6. m_SupressNextDown

答案 1 :(得分:0)

在查看输入模拟器的文档后,我猜你需要反转鼠标按下输入。

输入模拟器的源代码有一个鼠标按下方法

    private void mListener_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        if (isDown)
        {
            isDown = false;                    
            Console.Out.WriteLine(count);
            sim.Mouse.LeftButtonUp(); //maybe try this
        }

        else
        {
            Console.Out.WriteLine(count);
            isDown = true;
            sim.Mouse.LeftButtonDown();

        }
    }
}