SendInput() n'est pas égal appuyant sur la touche manuellement sur le clavier en C++?

Je voulais écrire un code c++ pour émuler en appuyant sur une touche du clavier "A":

//Set up a generic keyboard event.
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0; //hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;

//Press the "..." key
ip.ki.wVk = code; //virtual-key code for the "a" key
ip.ki.dwFlags = 0; //0 for key press
SendInput(1, &ip, sizeof(INPUT));

//Release the "..." key
ip.ki.dwFlags = KEYEVENTF_KEYUP; //KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));

Il fonctionne très bien lorsque je lance un autre programme et d'attendre à mon programme à exécuter, à la "Une" est cliqué et le premier programme de réagir. Mais j'ai trouvé que dans l'autre application mon action a été en quelque sorte empêché (je peux manuellement, appuyez sur "A" sur le clavier, mais l'utilisation de mon programme ne cause pas d'action).

Donc, ce que je peux faire pour en appuyant sur la touche "A" à partir du programme identiques manuellement touche "A" (donc le deuxième programme ne reconnaît pas qu'il a été appelé par le programme)?

Je n'ai pas le code source du deuxième programme et ne sais pas comment il reconnaît que "A" n'était pas pressée manuellement.

Je suis sûr que la fenêtre je tiens à réagir à mon code est de premier plan, de recevoir et de bloquer ma clé (donc il peut décider que l'événement ne vient pas de l'utilisateur, mais à partir d'un programme).

SendInput a été inventée pour résoudre les problèmes avec l'envoi de clavier individuel des messages dans les différents appels à keybd_event. Ne pas abuser de SendInput en l'appelant plusieurs fois avec un seul INPUT structure. Construire un tableau de INPUT structures et de les envoyer en une seule fois.
J'ai aussi utilisé keybd_event avec le même résultat. Encore merci pour pointer quelques conseils.
Je doute que cette question sera d'aller n'importe où jusqu'à ce que vous donner plus de détails à propos de ce "deuxième programme".
Il y a un quelques relative posts à la OldNewThing qui pourrait être d'intérêt...
autant que je sache. il semble que l'autre programme de toujours vérifier le hwnd de l'expéditeur. c'est une sorte de protection.

OriginalL'auteur PolGraphic | 2013-09-05