我的AutoIt脚本在按Ctrl + 1,Ctrl + 2等时粘贴字符串 。
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
这是解决方案; 你只需要添加这个函数,它来自 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")
.