为什么我的脚本会使Ctrl键永久有效?

时间:2015-01-26 14:48:14

标签: windows send autoit ctrl

当我按 Ctrl + 1 Ctrl + 2 等时,我的AutoIt脚本会粘贴字符串。< / p>

Func copyPasta1()
   Send($texts[1], 1)
EndFunc
Func copyPasta2()
   Send($texts[2], 1)
EndFunc
...    
HotKeySet("^" & $keys_arr[2], "copyPasta" & ($i - 1))

有时 Ctrl 键被锁定,因此整个系统的行为就像我连续按下 Ctrl 一样。按 Ctrl 可解析它。

我尝试使用 Shift ,但随后 Shift 被锁定。有人有解决方案吗?我的剧本:

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <FileConstants.au3>
#include <Array.au3>
#include <Math.au3>

HotKeySet("^q", "end")

Func end()

    SplashTextOn("", "Programm wird beendet", 200, 40, -1, -1, 1, "", 10, 600)
    Sleep(1000)
    SplashOff()
    Exit

EndFunc

Func copyPasta1()
    Send($texts[1], 1)
EndFunc
Func copyPasta2()
    Send($texts[2], 1)
EndFunc
Func copyPasta3()
    Send($texts[3], 1)
EndFunc
Func copyPasta4()
    Send($texts[4], 1)
EndFunc
Func copyPasta5()
    Send($texts[5], 1)
EndFunc
Func copyPasta6()
    Send($texts[6], 1)
EndFunc
Func copyPasta7()
    Send($texts[7], 1)
EndFunc
Func copyPasta8()
    Send($texts[8], 1)
EndFunc
Func copyPasta9()
    Send($texts[9], 1)
EndFunc

; read config File
Local $hFileOpen = FileOpen(@WorkingDir & "\config.cfg", $FO_READ)

If $hFileOpen = -1 Then

    MsgBox(1, "", "Keine config Datei gefunden.")
    Exit

EndIf

Global $texts[12]

$sFileRead = FileRead($hFileOpen)
FileClose($hFileOpen)
$arr1 = StringSplit($sFileRead, "#TASTE:", 1)

For $i = 2 To _Min($arr1[0], 10)

    $arr2 = StringSplit($arr1[$i], "#SATZ:", 1)

    If $arr2[0] == 2 Then

        $keys_arr = StringSplit($arr2[1], '"', 1)
        $texts_arr = StringSplit($arr2[2], '"', 1)

        If $keys_arr[0] == 3 And $texts_arr[0] == 3 Then

            HotKeySet("^" & $keys_arr[2], "copyPasta" & ($i - 1))
            $texts[$i - 1] = $texts_arr[2]

        EndIf

    EndIf

Next

SplashTextOn("", "Programm gestartet", 200, 40, -1, -1, 1, "", 10, 600)
Sleep(1000)
SplashOff()

While 1
    Sleep(1000)
WEnd

Exit

1 个答案:

答案 0 :(得分:0)

这是解决方案;你只需要添加这个函数,它来自http://www.autoitscript.fr/wiki/FAQ#Pourquoi_la_touche_Ctrl_reste_enfonc.C3.A9e.2C_apr.C3.A8s_que_j.27ai_lanc.C3.A9_mon_script_.3F

#include < Misc.au3 >
;Envoi la chaîne $ss après que les touches Shift Alt et Ctrl sont relachées. Optionnellement, donne une erreur après 1 sec si aucune de ces touches reste enfoncée.
;Nécessite d'inclure misc.au3 dans le script pour la fonction _IsPressed.
Func _SendEx($ss, $warn = "")
  Local $iT = TimerInit()

  While _IsPressed("10") Or _IsPressed("11") Or _IsPressed("12")
    If $warn <> "" And TimerDiff($iT) > 1000 Then
        MsgBox(262144, "Avertissement", $warn)
    EndIf
    Sleep(50)
  WEnd
  Send($ss)
EndFunc ;==>_SendEx

上述评论可以翻译成:

  

在Shift,Alt和Ctrl键被释放后发送$ss字符串。如果没有按下这些键,则可选择在1秒后返回错误。   Misc.au3需要_IsPressed()

并使用_SendEx("Your text")代替Send("Your text")