sendmessage with shift,control,alt key combination

时间:2010-07-05 19:20:40

标签: c# .net winapi keyboard

我正在尝试将⇧Shift + F8 等组合键发送到特定窗口。我可以通过提出WM_KEYDOWN,然后WM_KEYUP并指定(int)System.Windows.Forms.Keys.F8作为wParam来自行发送F8,但无法弄清楚如何使用换班钥匙。我已尝试将其与System.Windows.Forms.Keys.SHIFT以及System.Windows.Forms.Keys.SHIFTKEY进行ORing,但这似乎不起作用。还有其他方法吗?

请注意,我不能使用SendInput或可能因为它们没有采用窗口句柄,而且我的窗口可能不在前台。任何建议都赞赏......

2 个答案:

答案 0 :(得分:1)

发送单独的WM_KEYDOWN条消息,每个按键一条消息。

WM_KEYDOWN -> Shift

WM_KEYDOWN -> F8

WM_KEYUP   -> F8

WM_KEYUP   -> Shift

在记事本中按⇧Shift + F8 时,这是Spy ++中消息序列的消息捕获。

WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:36 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

WM_KEYDOWN nVirtKey:VK_F8 cRepeat:1 ScanCode:42 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

WM_KEYUP nVirtKey:VK_F8 cRepeat:1 ScanCode:42 fExtended:0 fAltDown:0 fRepeat:1 fUp:1

WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:36 fExtended:0 fAltDown:0 fRepeat:1 fUp:1

答案 1 :(得分:1)

你必须使用keybd_eventSendInput将修改键发送到另一个应用程序,因为windows处理修饰键的方式(好玩,是吗?)。我认为两者都可能要求其他应用程序集中精力才能正常工作。

只是发送一系列keydowns / keyups就好像你按下并按住修改键不会(或者,至少,不是最后我尝试过)工作,因为大多数应用程序分别轮询这些键而不是监听有关他们的消息。我想如果你控制两个应用程序的源代码,这可能会有效。