2017-10-05 5 views
1

J'ai un script où j'ai défini quelques touches de raccourci. Chacun d'eux devrait simuler un clic de souris dans une position définie (il y a des boutons poussoirs, je définis la position dans le fichier INI).Autoit ouvre la carte quand il utilise MouseClick()

J'ai un problème avec un bouton - généralement, quand je simule un clic de souris sur mon script, tout est OK, mais quand je veux cliquer sur ce bouton en même temps, quand il est pressé, une nouvelle carte est ouverte dans le navigateur Web.

Lorsque j'utilise ma souris manuellement et que je clique sur ce bouton problématique, la nouvelle carte ne s'ouvre pas.

Je ne peux pas trouver comment résoudre ce problème - j'essayé trouver, si elle est possibble pour verrouiller la possibilité d'ouvrir de nouvelles cartes ou quelque chose comme ça, mais je ne trouve rien ...

Tous les raccourcis clavier I ont défini dans deux illustrations:

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

étape suivante fait un vecteur de structures:

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 

définition de structure:

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

Hotkeys: Activation

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

et la fonction ouverte par les:

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 

positions X et Y sont chargés de fichier INI.

+0

Le modificateur de contrôle gâche-t-il les choses? Lorsque vous faites votre test manuel, maintenez ctrl pour voir si vous obtenez les mêmes résultats. – Trevor

+0

Oui ... c'est un problème ... Je vois, que seulement ce bouton a un comportement différent lorsque vous appuyez sur ctrl ... Merci pour votre aide! –

Répondre

0

Étant donné que vous avez déterminé que la touche de contrôle vers le bas est à l'origine d'un problème, vous disposez de deux options.

Option 1 Utilisez des raccourcis clavier sans modificateur. Pas idéal. Option # 2 Poussez le modificateur vers le bas et vers le haut avant de forcer le clic.

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

Le problème avec l'option # 2 est que vous devez réprimer la touche ctrl chaque fois que vous voulez que le raccourci clavier pour exécuter.