Я имитируя нажатие Ctrl кнопку с помощью:Simulate Ctrl-кнопка нажата
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
keybd_event(VK_CONTROL, 0, 0, 0); //key down
/* Stuff which needs ctrl to be pressed is done here */
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); //key up
Этот код находится в файле .dll. DLL используется в приложении WPF. Теперь у меня странное поведение, что нажатый ключ Ctrl распознается, только если окно WPF НЕ активно. Значение, когда я нажимаю на другое окно для деактивации окна WPF и принудительно запускаю код без активации окна WPF, снова работает. После щелчка по окну WPF он больше не работает.
Все идеи в чем проблема?
Редактировать: Я переместил код из dll в приложение wpf, которое ничего не изменило. В приложении WPF я тестировал:
keybd_event(VK_CONTROL, 0, 0, 0);
child.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Зачем вы используете импорт dll для этого? – ThaMe90
Потому что я использую его в любом случае для некоторых других вещей. Но я попробовал разные решения, чтобы поднять ключевые события. Все решения привели к такому же поведению. – andineupert
'keybd_event' является асинхронным. Используйте 'SetKeyboardState'. установите все 256 байтов в 0, кроме одного в индексе VL_CONTROL (установите на -128 или 0x80). Используйте снова со всеми 0 после синхронного RaiseEvent – manuell