2017-10-05 94 views
1

我有一个脚本,我定义了一些热键。他们每个人都应该模拟鼠标点击定义的位置(有按钮,我在INI文件中定义位置)。Autoit在使用MouseClick时打开卡片()

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

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

我只是找不到如何解决这个问题 - 我试图找到,如果是possibble锁定可能打开新卡或类似的东西,但我没有发现任何东西......

所有热键我

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文件加载。

+0

控制修饰符是否搞乱了事情?在进行手动测试时,按住ctrl键查看是否得到相同的结果。 – Trevor

+0

是啊...这是一个问题...我看到,只有这个按钮有不同的行为,当按Ctrl ... 感谢您的帮助! –

回答

0

由于您已确定控制键关闭导致问题,因此您有两个选项。

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

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

选项#2的问题在于,您必须在每次要热键运行时都要按Ctrl键。