Имитация нажатий клавиш в Visual C ++ - PullRequest
2 голосов
/ 01 августа 2010

Хорошо, так что я могу совершенно не лаять здесь, потому что я не очень разбираюсь в программировании для Windows, но здесь идет речь.

Я пытаюсь инициировать симуляцию нажатия клавиш в проекте C ++в Visual Studio 2010.

По существу, когда программа получает определенную строку кода из другого приложения (все это обрабатывается многими операторами if, грязно, но работает)

Мне нужно, чтобы выполнитьта же функция, как если бы я нажимал клавиши control и s на моей клавиатуре.

Теперь какой-то код, который я нашел, был таким.

keybd_event(VK_LCONTROL,0,0,0); 
  keybd_event(bKey, 0, 0, 0);


   keybd_event(bKey, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_LCONTROL,0,KEYEVENTF_KEYUP,0); 

При этом bKey - соответствующий код ASCII для S, он ускользает от менярука, но тем не менее, это в основном не имеет отношения к этому сообщению.

То, что это должно сделать, насколько я понимаю, это

Push Control down
Push S down
Release S
Release Control.

Однако это, похоже, не делает этого, кажется, только подтолкнутьвниз и отпустите S, печатая S соответствующим образом или нет, в зависимости от того, доступен ли ввод текста в то время.

Я здесь вообще лаю не то дерево?Я знаю, как это сделать в Objective C в XCode, но эти два кажутся совершенно разными, я знаю, что это разные системы, но все же.

Может кто-нибудь предложить решение этой проблемы?По сути, это способ заставить программу нажимать Control + S вместе (не один за другим, а вместе).

Любая помощь очень ценится.Кажется, там много противоречивой информации.

1 Ответ

2 голосов
/ 01 августа 2010

Попробуйте вместо этого:

keybd_event(VK_LCONTROL,MapVirtualKey(VK_LCONTROL,0),0,0); 
keybd_event(bKey, MapVirtualKey(bKey,0), 0, 0);


keybd_event(bKey, MapVirtualKey(bKey,0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_LCONTROL,MapVirtualKey(VK_LCONTROL,0),KEYEVENTF_KEYUP,0); 
...