我正在尝试将⇧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
或可能因为它们没有采用窗口句柄,而且我的窗口可能不在前台。任何建议都赞赏......
答案 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_event或SendInput
将修改键发送到另一个应用程序,因为windows处理修饰键的方式(好玩,是吗?)。我认为两者都可能要求其他应用程序集中精力才能正常工作。
只是发送一系列keydowns / keyups就好像你按下并按住修改键不会(或者,至少,不是最后我尝试过)工作,因为大多数应用程序分别轮询这些键而不是监听有关他们的消息。我想如果你控制两个应用程序的源代码,这可能会有效。