none
Combinaison de touches sous Vista.

    Question

  • Bonjour tout le monde,

    Le langage C# propose l'instruction Sendkeys.Send() pour envoyer une simulation de touches.

    Sous Windows XP, ça fonctionne très bien.

    Sous Vista, ça soulève une exception de sécurité.

    Alors on cherche un contournement, et il s'avère que ceci fonctionne très bien (copié de chez Stackoverflow à une retouche près) :

    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = "ctlF12.js";
    process.StartInfo = startInfo;
    process.Start();
    

    sous réserve d'avoir dans le répertoire de l'exécutable un fichier ctlF12.js qui contient ceci :

    WshShell = WScript.CreateObject("WScript.Shell");
    WshShell.SendKeys("^F12");
    

    Je me trompe, ou c'est une ineptie sur le plan de la sécurité ?

    Je ne vois pas très bien en quoi un fichier texte facilement repérable et modifiable par n'importe quel virus à la portée d'un débutant est plus sûr qu'un programme C#.

    lundi 4 juillet 2016 15:37

Réponses

  • Bonjour,

    Si j'en lis la documentation de SendKeys.Send, il est écrit que la classe SendKeys a été mise à jour pour depuis la version 3.0 du Framework .Net pour permettre son utilisation dans les applications qui s'exécutent sur Windows Vista.

    Lien : SendKeys.Send, méthode (String)

    Cordialement,

    • Marqué comme réponse Gloops lundi 4 juillet 2016 16:00
    lundi 4 juillet 2016 15:44

Toutes les réponses

  • Bonjour,

    Si j'en lis la documentation de SendKeys.Send, il est écrit que la classe SendKeys a été mise à jour pour depuis la version 3.0 du Framework .Net pour permettre son utilisation dans les applications qui s'exécutent sur Windows Vista.

    Lien : SendKeys.Send, méthode (String)

    Cordialement,

    • Marqué comme réponse Gloops lundi 4 juillet 2016 16:00
    lundi 4 juillet 2016 15:44
  • Ah bien vu, merci.

    Sinon en version 2 il est vrai qu'on peut écrire un module en VB.Net avec ça :

    Public Sub Sendkeys(text$, Optional wait As Boolean = False)
        Dim WshShell As Object
        Set WshShell = CreateObject("wscript.shell")
        WshShell.Sendkeys text, wait
        Set WshShell = Nothing
    End Sub
    

    Bien entendu la version 3 c'est mieux.

    lundi 4 juillet 2016 15:59