如何通过从另一个人调用System.Windows.Forms.SendKeys.Send(“abc”)来阻止作为全局热键的一部分的shift键在向Windows中的活动窗口发送文本时发生干扰包含班次的全局热键被激活时的处理?
激活热键时激活的窗口误解了发送到的文本,因为Shift键是热键的一部分,在接收和处理发送给它的文本时仍然按下。人工不可能足够快地释放移位键,因此在收到文本时仍然没有按下它。 无法将热键更改为不包含shift ,即使可能,ctrl-key也会以类似的方式干扰处理。 发送应用程序作为普通用户运行,没有管理员权限,并启用了UAC。
<shift>+F9
(RegisterHotKey(hWnd, hotkeyId, 4/*MOD_SHIFT*/, 120 /*Keys.F9*/
); System.Windows.Forms.SendKeys.Send("abc")
在接收窗口获取,处理和解释之后,有哪些方法可以确保发送的文本最终结束?
也就是说,当通过按<shift>+F9
向正在运行的notepad.exe实例发送“abc”时,显示在记事本中的文本应该是“abc”而不是“ABC”。
答案 0 :(得分:1)
据我所知,
我认为#1非常自我解释,但请记住,即使您在开始发送密钥之前确认没有按下Shift,也可能在发送密钥时用户仍然可以按Shift或其他修改器或者甚至更糟糕的是活动窗口失去焦点并完全停止它的可能性。如果您正在设计一个程序,只需在热键按下后插入用户定义的文本并且用户期望它,那么这不是什么大问题,并且是适合这种情况的方法。
您有#2的几个选项,我建议使用SendMessage和An apropriate message(WM_CHAR,WM_SETTEXT,WM_KEYDOWN等)直接向窗口发送消息有问题。
说完一切之后,重要的是要意识到这是一个非常不确定的过程。您永远不能保证模拟键盘输入或发送密钥消息将按照您的意愿进行注册,这可能在很大程度上取决于您发送消息的应用程序(特别是在SendMessage的情况下)。