1

我有一个脚本,我在其中定义了一些热键。他们每个人都应该在定义的位置模拟鼠标点击(有按钮,我在 INI 文件中定义位置)。

我有一个按钮的问题 - 通常,当我通过脚本模拟鼠标点击时一切正常,但是当我想同时点击这个按钮时,当它被按下时,新卡会在网络浏览器中打开。

当我手动使用鼠标并单击这个有问题的按钮时,新卡没有打开。

我只是找不到解决此问题的方法-我尝试查找是否可以锁定打开新卡的可能性或类似的东西,但我没有找到任何东西...

我在两个向量中定义的所有热键:

Global $HotKeyArrayHotKeys[] = [ "^1", "^2", "^3", "^4",... ]
Global $HotKeyArrayLabels[] = [ "A", "B", "C", "D",... ]

下一步是制作一个结构向量:

For $i = 0 To $MaxInd-1       $HotKeyArray[$i] =
    DllStructCreate($StructHotKey)  
    DllStructSetData (  $HotKeyArray[$i], "HotKey", string($HotKeyArrayHotKeys[$i]))         
    DllStructSetData (  $HotKeyArray[$i], "Label", string($HotKeyArrayLabels[$i]) )    
Next

结构定义:

Global Const $StructHotKey = "struct;CHAR HotKey[3];CHAR Label[12];INT X;INT Y;INT CheckBoxNr;INT DataNumber;endstruct"

激活热键:

For $i = 0 To $MaxInd
    HotKeySet( DllStructGetData ( $HotKeyArray[$i], "HotKey" ) )    ;
Next

他们打开的功能:

Func UniversalFunc()
   If @HotKeyPressed == DllStructGetData ( $HotKeyArray[0], "HotKey" ) Then
            MouseClick( "left", DllStructGetData ( $HotKeyArray[0], "X" ), DllStructGetData ( $HotKeyArray[2], "Y" ), 1, 1 )
        Return 0
   EndIf
   For $i = 0 To $MaxInd-1
        If @HotKeyPressed == DllStructGetData ( $HotKeyArray[$i], "HotKey" ) Then
            MouseClick( "left", DllStructGetData ( $HotKeyArray[0], "X" ), DllStructGetData ( $HotKeyArray[2], "Y" ), 1, 1 )
            Sleep(50)
            MouseClick( "left", DllStructGetData ( $HotKeyArray[$i], "X" ), DllStructGetData ( $HotKeyArray[$i], "Y" ), 1, 7 )
            Return 0
        EndIf
   Next
    Return 0
EndFunc

X 和 Y 位置从 INI 文件加载。

4

1 回答 1

0

由于您已确定按下 Control 键会导致问题,因此您有两个选择。

选项 #1 使用不带修饰符的热键。不理想。选项 #2 在强制单击之前向下和向上推动修改器。

func HotKey()
  send("{CTRLDOWN}")
  send("{CTRLUP}")
  MouseClick( "left" ....
EndFunc

选项#2 的问题是每次您希望热键运行时都必须重新按下 ctrl 键。

于 2017-10-11T21:24:14.060 回答