【问题标题】:Is there a way in AutoHotkey to know between a mouse click and touchscreen click现在在鼠标点击和触摸屏点击之间有没有办法在自动热键中使用
【发布时间】:2016-12-13 00:15:05
【问题描述】:

我有两台显示器,其中一台是触摸屏。现在做一个简单的自动热键代码。您在鼠标点击触摸屏点击之间获得了一个价值

我在 主显示器 1 上使用例如 Photoshop 应用程序

而且我的触摸屏显示器 2

上有一个虚拟键盘和我的(最喜欢的击键组合)

如果我用左手在我的虚拟键盘显示器 2 上进行触摸屏点击,我想要。

鼠标指针停留在我的主显示器 1

这样我就可以继续使用 PhotoShop 而不会中断将鼠标指针移回我的主显示器 1。

这是脚本迄今为止的另一种想法。

::^d ;push ctrl + d to disable the mouse pointer movement
BlockInput MouseMove 
return

::^e ;push ctrl + e to enable the mouse pointer movement
BlockInput MouseMoveOff 
return

【问题讨论】:

  • 您好!让我看看我是否理解您的需求:所以您想在没有触摸屏的情况下在显示器上使用鼠标,并且当您在触摸屏显示器上键入内容时,您不希望鼠标移到那里? (你想让鼠标仍然在没有触摸屏的显示器上)我说的对吗?
  • 是的,我想在我制作的虚拟键盘上使用我最喜欢的所有快捷键(宏)。用我的左手一键推动它,然后继续进行而不中断鼠标指针返回触摸屏显示器。 look to picture

标签: windows keyboard keyboard-shortcuts autohotkey touchscreen


【解决方案1】:

使用 AHK 区分输入设备并非易事。可以,但是比较复杂。
如果您可以将触摸屏上的每次点击都解释为触摸点击,那么您可以执行以下操作:

When the mouse moves on the normal screen  
    store it's position in a variable.

When a left click is executed on the touch screen do the click  
    move the mouse back to the last know position on the normal monitor.

你需要:

SysGet
RegisterCallbackSetTimer+MouseGetPos
Hotkeys

【讨论】:

  • 我的想法和你一样,把它移回普通显示器上最后知道的鼠标指针位置。我现在知道 touch click-(goes to click coordinate direct)mouse click-(goes to click逐步坐标) - 但我想要一个像这样的简单代码 - 如果您进行触摸单击,则冻结鼠标指针 - 在我移动鼠标时解冻鼠标指针用鼠标指针。
  • 当然,通过一些数学运算,您可以做到这一点。但是您必须完全覆盖正常的左键单击操作并将其替换为 controlclick 操作,否则您无法“冻结”光标。但有些应用程序无法正确接收ControlClicks。
  • 我正在考虑这个 1 - 如果你用鼠标移动鼠标指针然后解冻鼠标指针 2 - 如果你静止不动(不动)并做任何类型的(左)单击然后冻结鼠标指针(这样您就不需要覆盖正常的左键单击并将其替换为控制单击操作)
  • 你不懂。您不能冻结光标。您可以阻止用户生成的鼠标事件,但是您无法确定他是否尝试移动鼠标、左键单击甚至是触摸单击。
  • 您不了解触摸输入的工作原理。触摸单击将首先在内部移动鼠标,然后单击左键。这就是 Windows 内部的工作方式。如果您阻止鼠标输入,那么您也阻止了触摸输入,您将无法确定用户是否正在尝试触摸单击、单击或移动鼠标。
【解决方案2】:

我没有第二台显示器来全面测试此代码,但我已经在我的主显示器上进行了测试,这是一个触摸屏。这段代码应该可以解决问题:)

; Screen pixel split between monitors
; You should change this values according to the desired region of interest
screen_split_min := 0
screen_split_max := 200
; To get absolute monitor coordinates
CoordMode, Mouse, Screen

MouseGetPos, pre_mx, pre_my
While 1
{
  MouseGetPos, tmp_mx, tmp_my
  If tmp_mx > %screen_split_max%
  {
    pre_mx := tmp_mx
    pre_my := tmp_my
  }
}

~LButton::
  MouseGetPos, mx, my
  If mx <= %screen_split_max% and mx >= %screen_split_min%
  {
    MouseMove, pre_mx, pre_my, 0
  }
return

HTH ;)

【讨论】:

  • 这个代码如果对我来说是一个不错的选择,而且它有效,我确实稍微更改了代码。只有我在考虑(如果您站着不动并单击,则冻结鼠标指针)和(如果您用鼠标移动鼠标指针,则解冻鼠标指针)的代码。)
  • 要在一定时间后冻结鼠标指针,您可以有一个计时器机制,它会检查 X 秒是否已经过去并且鼠标位置没有改变,然后执行单击。但是,解冻更复杂:我不知道如何区分它是来自触摸屏还是来自鼠标......除非您假设屏幕上的某个位置(例如显示器 1)仅适用于鼠标和其他(显示器 2)到触摸屏。如果这是你想要告诉我的,我可以帮你写代码;)
  • 您的示例代码对我有用,我有 - 主显示器 1(x0 到 x1920)(y0 到 y1080)和触摸显示器 2(x1921 到 x3840)(y0 到 y1080) - 但冻结鼠标指针的方法是: 1 - 您不必返回 2 - 如果您只有一个触摸显示器,那么您可以在不选择区域的情况下使用它。
  • 那么,如果代码有效,这个答案是否正确?我这么说,所以如果人们寻找类似的问题可以很容易地找到解决方案。或者您想要其他解决方案?正如@Forivin 所说,在内部执行触摸单击时鼠标将始终移动,因此您所说的方法将无法正常工作。
  • 我可以向您确认,该代码有效并且答案是正确的。 (在两台显示器上)以及@Forivin 所说的话 - 我不同意这一点。如果您冻结鼠标指针,那么它会在内部阻塞,您只能使用自己的触摸屏和我的旧替代创意代码手动对其进行自我测试。您可以在不将鼠标指针移动到触摸屏显示器的情况下单击触摸屏。
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 2015-01-05
  • 2021-03-07
  • 1970-01-01
  • 2018-06-28
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多