我目前正在编写一个程序,在最初点击时按住鼠标按钮,并继续按住该按钮直到用户再次按下鼠标按钮。
该程序通过使用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();
}
}
}
答案 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);
}
}
}
库的情况下完成您的方案。
InputSimulator
- 向下触发。m_SupressNextUp
m_SupressNextDown
m_SupressNextUp
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();
}
}
}