2017-10-05 140 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鍵。