C#PostMessage CTRL + Fx无效

时间:2016-10-25 18:36:08

标签: c# winapi

我正在尝试在窗口中模拟 CTRL + Fx 按键,但它没有按照指示工作。当我的程序发送键击时,它只是忽略 CTRL ,所以如果它按 CTRL + F3 ,窗口只获得 F3 按键,这里是一些使用Window Detective捕获的事件的截图:

手动按 CTRL + F3

enter image description here

这个是我的程序,使用PostMessage按 CTRL + F3 enter image description here

如您所见,它们完全相同,所以我不知道该怎么做。这是我正在使用的代码:

[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, uint msg, uint wParam, uint lParam);

const int VK_CONTROL = 0x11;
const uint VK_CONTROL_LUP = 0xC01D0001;
const uint VK_CONTROL_LDOWN = 0x1D0001;

const int VK_F3 = 0x72;
const uint F3_LDOWN = 0x3D0001;
const uint F3_LUP = 0xC03D0001;

const int WM_KEYDOWN = 0x0100;
const int WM_KEYUP = 0x0101;

//Modifier
PostMessage(hWnd, WM_KEYDOWN, (uint)VK_CONTROL, VK_CONTROL_LDOWN);

//Key down
WinApi.PostMessage(hWnd, WM_KEYDOWN, (uint)VK_F3, F3_LDOWN);
//key up
WinApi.PostMessage(hWnd, WM_KEYUP, (uint)VK_F3, F3_LUP);

WinApi.PostMessage(hWnd, WM_KEYUP, (uint)VK_CONTROL, VK_CONTROL_LUP);

经过几次测试后,我在第一个PostMessage后加了一个10秒的延迟(按住 CTRL ),如果按箭头键,窗口会检测 CTRL ,但如果我按任何其他键,例如 F3 ,它就会忽略它。

除了我正在使用的PostMessage之外,还有其他方法可以将关键笔划发送到未聚焦的窗口吗?或者背后有一些秘密,某些程序可能会被忽略?

由于

0 个答案:

没有答案