我通過模擬按下Ctrl鍵按鈕:模擬按住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'。除了指令VL_CONTROL(設置爲-128或0x80)外的所有256字節設置爲0。同步後再次使用到0 RaiseEvent – manuell