我正在尝试在窗口中模拟 CTRL + Fx 按键,但它没有按照指示工作。当我的程序发送键击时,它只是忽略 CTRL ,所以如果它按 CTRL + F3 ,窗口只获得 F3 按键,这里是一些使用Window Detective捕获的事件的截图:
手动按 CTRL + F3 :
这个是我的程序,使用PostMessage按 CTRL + F3 :
如您所见,它们完全相同,所以我不知道该怎么做。这是我正在使用的代码:
[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之外,还有其他方法可以将关键笔划发送到未聚焦的窗口吗?或者背后有一些秘密,某些程序可能会被忽略?
由于