web-dev-qa-db-fra.com

Envoi de clé Windows à l'aide de SendKeys

Je travaille sur des raccourcis en C #. Je réussis à implémenter Ctrl, Alt et Shift avec SendKeys.

Comme ça;

Ctrl + C:

System.Windows.Forms.SendKeys.SendWait("^c");

ou Alt + F4:

System.Windows.Forms.SendKeys.SendWait("%{F4}");

Mais je ne peux pas envoyer de "clé Windows" avec SendKeys. J'ai essayé ex: Win + E : .SendWait("#e") mais cela ne fonctionne pas. Que dois-je utiliser au lieu de "#"?

Merci.

28
nuriaycan

OK se révèle ce que vous voulez vraiment: http://inputsimulator.codeplex.com/

Ce qui a fait tout le travail difficile d'exposer les méthodes Win32 SendInput À C #. Cela vous permet d'envoyer directement la clé Windows. Ceci est testé et fonctionne:

InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_E);

Notez cependant que dans certains cas, vous souhaitez envoyer spécifiquement la clé à l'application (comme ALT+F4), Auquel cas utilisez le Form méthode de bibliothèque. Dans d'autres, vous voulez l'envoyer au système d'exploitation en général, utilisez ce qui précède.


Ancien

En gardant cela ici pour référence, cela ne fonctionnera pas dans tous les systèmes d'exploitation et ne se comportera pas toujours comme vous le souhaitez. Notez que vous essayez d'envoyer ces touches à l'application et que le système d'exploitation les intercepte généralement tôt. Dans le cas de Windows 7 et Vista, trop tôt (avant l'envoi du E).

SendWait("^({ESC}E)") ou Send("^({ESC}E)")

Remarque à partir d'ici: http://msdn.Microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx

Pour spécifier que toute combinaison de MAJ, CTRL et ALT doit être maintenue enfoncée pendant que plusieurs autres touches sont enfoncées, placez le code de ces touches entre parenthèses. Par exemple, pour spécifier de maintenir la touche MAJ enfoncée lorsque vous appuyez sur E et C, utilisez "+ (EC)". Pour spécifier de maintenir la touche MAJ enfoncée pendant que E est enfoncé, suivi de C sans MAJ, utilisez "+ EC".

Notez que puisque vous voulez appuyer sur ESC et (disons) E en même temps, vous devez les mettre entre crochets.

22
yamen

Alt + F4 fonctionne uniquement entre parenthèses

SendKeys.SendWait("(%{F4})");
4
Oleg Gavril

téléchargez InputSimulator depuis paquet nuget .

puis écrivez ceci:

        var simu = new InputSimulator();
        simu.Keyboard.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_E);

dans mon cas pour créer un nouveau bureau vertical, 3 clés nécessaires et un code comme celui-ci (touche Windows + ctrl + D):

        simu.Keyboard.ModifiedKeyStroke(new[] { VirtualKeyCode.LWIN, VirtualKeyCode.CONTROL }, VirtualKeyCode.VK_D);
0
Ali Rasouli
SetForegroundWindow( /* window to gain focus */ );
SendKeys.SendWait("^{ESC}"); // ^{ESC} is code for ctrl + esc which mimics the windows key.
0
m-jo