C# 拦截鼠标点击
我目前正在编写一个程序,在最初单击鼠标按钮时按住鼠标按钮,并继续按住它直到用户再次按下鼠标按钮 该程序的工作原理是使用全局检测输入,然后使用按住已按下的鼠标按钮 程序能够按预期按住鼠标,但原始鼠标点击存在问题,该问题向程序发出信号,以模拟按住按钮;它仍然得到执行。我知道MouseHookListener使用低级钩子进行操作,但是它的HookCallBack()方法由于受到保护而无法被重写 有没有办法阻止原始的鼠标输入?或者有没有一种方法可以使原始输入保持不变,直到再次单击鼠标 这是我迄今为止编写的代码(注意-mListener正在其他地方的论坛中被激活):C# 拦截鼠标点击,c#,windows,mousekeyhook,C#,Windows,Mousekeyhook,我目前正在编写一个程序,在最初单击鼠标按钮时按住鼠标按钮,并继续按住它直到用户再次按下鼠标按钮 该程序的工作原理是使用全局检测输入,然后使用按住已按下的鼠标按钮 程序能够按预期按住鼠标,但原始鼠标点击存在问题,该问题向程序发出信号,以模拟按住按钮;它仍然得到执行。我知道MouseHookListener使用低级钩子进行操作,但是它的HookCallBack()方法由于受到保护而无法被重写 有没有办法阻止原始的鼠标输入?或者有没有一种方法可以使原始输入保持不变,直到再次单击鼠标 这是我迄今为止编写
在查看了输入模拟器的文档之后,我猜您需要反转鼠标向下的输入 输入模拟器的源代码有一个鼠标向上的方法
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();
}
}
}
我是你提到的图书馆的作者 为了启用您的用例,我又通过一个事件扩展了库。请注意,监听器的结构在新版本中也略有改变 我相信通过下面的示例,您可以在不涉及
InputSimulator
库的情况下完成场景
它是如何工作的?
m_supersnextup
-按下被触发m_supersnextdown
m_supersnextup
m_supersnextdown
不幸的是,这并没有多大改变。我应该解释一下代码,所以这是我的错。仅当用户第二次单击鼠标时,才会输入isDown为true时的代码。它不受模拟输入的影响。同样,我的问题是,我需要停止将原来的鼠标单击发送到目的地(即它的目的地程序)。不过,谢谢你的建议。至于关于反转输入的部分,当用户再次单击鼠标时,它会释放先前设置的LeftButtonDown。@LiamKelly so
mListener
仅在第二次单击时触发?bool默认为false。因此,我认为isDown=true
首先被触发。不,用户每次单击都会触发mListener。第一次(激活)点击进入else条件,然后第二次(终止)点击进入第一个条件。此代码执行它需要的操作。很高兴看到开发人员对代码中的小问题感兴趣。^^更新后的代码可以在按下鼠标时按住鼠标,但在某些应用程序中似乎不起作用,但确实起作用。不过,这可能就是我测试它的应用程序。我在一个叫Warframe的游戏上测试了它(我正在开发的这个工具是为了减少手指的疲劳,顺便说一句),它在那里不起作用,但在其他程序上可以突出显示文本,等等。这只是给其他使用它的人注意的东西。进一步的测试表明,事实上这就是我测试它的应用程序。然而,它以前允许通过输入模拟器进行输入。
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();
}
}
}
internal class Sample
{
private IKeyboardMouseEvents m_GlobalHook;
private bool m_SupressNextUp;
private bool m_SupressNextDown;
public void Subscribe()
{
m_GlobalHook = Hook.GlobalEvents();
m_GlobalHook.MouseDownExt += GlobalHookMouseDownExt;
m_GlobalHook.MouseUpExt += GlobalHook_MouseUpExt;
}
void GlobalHook_MouseUpExt(object sender, MouseEventExtArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (m_SupressNextUp)
{
Console.WriteLine(@"First mouse up supress.");
e.Handled = true;
m_SupressNextDown = true;
}
else
{
Console.WriteLine(@"Second mouse up - make it heppen.");
m_SupressNextDown = false;
}
}
}
private void GlobalHookMouseDownExt(object sender, MouseEventExtArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (m_SupressNextDown)
{
Console.WriteLine(@"Second mouse down supress.");
e.Handled = true;
m_SupressNextUp = false;
}
else
{
Console.WriteLine(@"First mouse down - make it heppen.");
m_SupressNextUp = true;
}
}
}
public void Unsubscribe()
{
m_GlobalHook.MouseDownExt -= GlobalHookMouseDownExt;
m_GlobalHook.MouseUpExt -= GlobalHook_MouseUpExt;
m_GlobalHook.Dispose();
}
}