如何将Ctrl/Shift/Alt +组合键发送到应用程序窗口?(通过SendMessage)

use*_*042 11 c# sendmessage

我可以成功地将任何单个密钥消息发送到应用程序,但我不知道如何发送密钥组合(如Ctrl+ F12,Shift+ F1,Ctrl+ R等...)

试过这样做:

SendMessage(handle, WM_KEYDOWN, Keys.Control, 0);
SendMessage(handle, WM_KEYDOWN, Keys.F12, 0);
SendMessage(handle, WM_KEYUP, Keys.F12, 0);
SendMessage(handle, WM_KEYUP, Keys.Control, 0);
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用(应用程序的行为只是F12按下,而不是Ctrl+ F12).

任何想法如何使这项工作?

Ed *_*tes 5

您可能会发现使用SendInput (此处的文档)可以更好地工作.你需要从C#调用它,例如这里.可以提供数据的阵列,键向下和向上,并适当地设置其它消息参数,例如是否向左或向右Ctrl/ Shift/ Alt压制.

您也可以使用SendKeys该类(此处的文档).这使您可以按名称指定键,例如,{^F12}Ctrl+ F12.

编辑:OP现在说他需要将输入发送到最小化的应用程序而不激活它们.这是不可能以任何方式可靠地进行,包括使用专门的硬件.我从事自动化工作.这是不可能的.OP需要使用FindWindow/ SetForegroundWindow切换目标应用程序,然后他可以切换回他的应用程序.

  • @ user1792042,首先,你应该在你的问题中添加它作为一个要求.其次,您无法可靠地使用SendMessage来模拟击键.第三,您无法在后台可靠地将输入发送到应用程序.但是,您可以激活目标应用程序,然后重新激活您的应用程序. (2认同)