【发布时间】:2015-07-29 15:18:21
【问题描述】:
SendInput %userInput% 导致我的计算机执行非常奇怪的操作。有时它会注销,有时我的键盘箭头会被禁用,有时它会在 Windows 中无限次运行 cmd...
更新: 这是在命令行中输入并运行的内容: runas /user:administrator cmd
更新:
我想我几乎遇到了问题,因此我编辑了问题以省略我现在认为不相关的内容。
当 SendInput 发生时,而用户仍在键盘上输入数据,例如按下 win-key,那么这可能会导致系统注销,因为 win-key + l 是一个快捷键。对于正在发生的所有其他事情也必须如此。另一个观察结果是 SendInput 会跳过某些字符,例如 {enter} 等。它只在最后处理它们,当所有常规字符都放置到位时。我注意到最后,SendInput 仍然忙于做一些事情,也许是一些奇异的字符延迟到最后。因为用户认为输出已经完成,所以他再次按下快捷键,结合当前的sendInput导致系统崩溃。
更新:
如果有一个“!”,它也会变得很糟糕。使用 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
【问题讨论】:
-
内容存储在我上面提到的ini文件中。奇怪的是,即使我重新启动并且除了通过使用热键粘贴该文件的内容来读取该文件之外不执行任何操作,它也会变得狂暴。第一次可以贴。第二次发狂。
-
我想我现在可以通过询问来减少这个问题:只要 SendInput 正在进行,我如何防止任何进一步的 UserInput 发生?我不认为这很困难。困难的是我要找出哪些隐藏字符仍在输出,以便我可以过滤掉它们?
-
命令 SendInput %userinput% 将处理 userinput 变量中的值并将其作为键盘命令发送到 Windows。听起来您的问题在您的脚本中较早地设置了用户输入。需要设置用户输入的代码来调试问题。您可以使用 BlockInput 命令阻止输入。 Win+L 不会让您退出,它只是锁定帐户。
-
blockinput 不起作用,因为我有 win 7,所以它只适用于管理员权限。我尝试了管理员破解,但在我的电脑上找不到文件 shellexecute。
标签: autohotkey