SendInput%userInput%导致我的计算机做了非常奇怪的事情。有时它会注销,有时我的键盘箭头会被禁用,有时它会在窗口中运行cmd无限次......
更新: 这是在命令行中输入并运行的东西: runas / user:administrator cmd
更新: 我想我几乎遇到了问题,因此我编辑了这个问题,遗漏了我认为现在无关紧要的问题 当SendInput发生时,用户仍然在键盘上输入数据,例如按下win键,这会导致系统注销,因为win-key + l是一个快捷方式。同样必须适用于所有其他正在发生的事情。另一个观察是SendInput会跳过某些字符,例如{enter}等。它只会在所有常规字符到位时处理它们。我注意到最后,SendInput仍在忙着做东西,也许是一些异国情调的角色,它推迟到最后。因为用户认为输出已完成,所以他最终再次按下快捷键,这与当前的sendInput结合导致系统崩溃。
更新:
如果有“!”,它也会变成bezerk。与SendInput一起发送。
这是我粘贴到电子白板的一个字符串:
dsjkfhjdsfsjdh !!!!!!!!!!! @@@@@@@@ ############ $$$$$$$$$$$ %%%%%%% %% ^^^^^^^^^^^^^&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;的 * ** * * (((((((((())))))))))))的 _ 的__ _ ++++++++++++++++ ======= ------------ 000000000000000099999988888。
但输出没有感叹号。像这样:
dsjkfhjdsfsjdh @@@@@@@ $$$$$$$$$$ %%%%%%%%%&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;的 * ** * * (((((((((()))))))))))) _ __ _ + == ------------ 000000000000000099999988888。
为什么?还有其他角色吗?我觉得感叹号很重要,我不想删除它们。有没有解决方法?
更新: 它比这更复杂。当我复制粘贴上面没有感叹号的字符时,它仍然会产生奇怪的东西 以下是最终userInput与SendInput结合并发送的一些代码:
StringReplace, contents, save_selection, ``, ````, All ; Do this replacement first to avoid interfering with the others below.
StringReplace, contents, contents, `r`n, %A_SPACE%, All ; Using `r works better than `n in MS Word, etc.
StringReplace, contents, contents, `;, ```;, All
;* loc_title origanally contains browser specification. Remove it.
StringGetPos, pos_delim, loc_title, - , R
length := StrLen(loc_title)
count := length - pos_delim
StringTrimRight, loc_title, loc_title, count
答案 0 :(得分:3)
您可以使用sendraw
代替sendinput
。
以下是文档的说法:
原始模式:SendRaw命令解释所有字符字面 而不是将{Enter}转换为ENTER键击,^ c to Control-C等。但是,转义序列的正常规则, 变量引用和表达式仍然适用,因为它们是 在命令执行之前处理。要使用SendInput的原始模式, SendPlay或SendEvent将{Raw}写为字符串中的第一项; 例如:SendInput {Raw} abc。
然后您不必担心!
或其他控件修饰符。
答案 1 :(得分:2)
感叹号字符出现问题的原因是SendInput
将其视为按 Alt 键的代码。
有几个相似的代码:
^
= Ctrl
+
= Shift
#
= Windows密钥
您可以找到SendInput文档中列出的其他内容。
您似乎想要发送原始文本,而不是SendInput
查找这些代码。您应该能够将{Raw}
放在userinput
变量的开头,它将忽略其余字符中的所有代码。
如果输入速度太慢,您可以在脚本中添加SetKeyDelay,-1
以消除密钥发送延迟。
答案 2 :(得分:-4)
我发现一个很好的解决方法是完全避免使用SendInput。而是使用剪贴板将字符串复制到内部,然后将其粘贴到屏幕上。它完美无瑕,速度快十亿倍。为什么一个人会首先使用SendInput?但是,实际的问题仍然存在,为什么SendInput行为如此奇怪?该字符串内部是什么:%userInput%导致我的系统崩溃?我该如何找到?