Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ecrire du texte dans une application Win32 [C#]

Anonyme
    22 octobre 2019 à 19:39:26

    Bonjour à tous, voilà mon problème après près de 3h de recherche intensive. Je n'ai toujours pas trouvé de solution (j'ai vraiment cherché partout mais rien ne semble fonctionnait)

    Alors voilà, j'aimerais juste simuler une pression de touche de clavier sur une application externe à la mienne, sans avoir besoin du focus de cette dernière, je me tourne alors vers Win32, PostMessage qui semble être le plus "propice" à ce genre de tâche.

    Je tombe alors sur WM_KEYDOWN, je cherche encore et encore et je commence à pouvoir construire un code : 

    const int WM_KEYDOWN = 0x100;
    const int VM_KEYUP = 0x101;
    const int VK_F5 = 0x74;
    const int VK_R = 0x52;
    IntPtr hNotepad = GetForegroundWindow(); //Correspond au handle de la fenêtre Notepad (sur à 100%)
    PostMessage(hNotepad, WM_KEYDOWN, VK_F5, 0);
    Thread.Sleep(10);
    PostMessage(hNotepad, WM_KEYUP, VK_F5, 0); //F5 fonctionne bien mais lorsque je fais ça : 
    PostMessage(hNotepad, WM_KEYDOWN, VK_R, 0);
    Thread.Sleep(10);
    PostMessage(hNotepad, WM_KEYUP, VK_R, 0); //ça ne fonctionne pas, le 'R' ne s'écrit pas dans le notepad.
    
    

    Je précise que si je change hNotepad par un textbox de mon application par exemple textbox1.Handle, cela fonctionne bien, alors ma question est la suivante, j'imagine avec les problemes que je rencontres, que je récupère le Handle de la fenetre en elle même c'est à dire que j'essaye d'entrer quelque chose dans un endroit ou on ne peut pas écrire, alors la question que je pose ici est : Comment recuperer un accès au contenu de la-dite fenêtre pour pouvoir ecrire dans le Notepad et pas sur la fenetre en elle même.

    Merci beaucoup à tous ceux qui m'aideront =)

    Edit : 

    J'ai finalement trouvé une solution, avec GetWindow (très simple d'utilisation) maintenant ce que j'aimerais c'est pouvoir écrire dans un champ de texte contenu dans le handle enfant, malheuresement, le handle enfant est visiblement tenu par OpenGL, est-ce possible d'utiliser l'api win32 dans ce cas là ? Merci d'avance

    -
    Edité par Anonyme 22 octobre 2019 à 20:59:58

    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2019 à 17:17:54

      Bon, on est d'accord que ce que vous tentez de faire est un truc qui n'est pas interdit dans votre pays et par les conditions d'usages du programme que vous voulez "piloter" ?

      Pour en être sûr, il faudrait que vous donniez ces détails.

      Tant qu'on n'a pas ces informations précises, on ne donnera que des trucs vagues.

      Il existe des "API Win32" plus dédiés à ce type de "délire" mais on n'en parlera pas sans les informations déjà demandées.

      Quand vous utilisez "PostMessage", vous postez un message dans la file de message de VOTRE thread.

      Le thread dépilera votre message quand il n'aura plus d'autres actions à faire.

      Le Handler de fenêtre (hNotepad chez vous) n'est qu'un nombre servant à démultiplexer les messages vers la méthode WndProc de la fenêtre correspondant à cet handler :

      https://docs.microsoft.com/fr-fr/dotnet/api/system.windows.forms.control.wndproc?view=netframework-4.8

      Si la fenêtre n'a pas été créée par votre thread, la fenêtre n'est pas connue et le message est "perdu".

      Voilà pourquoi quand vous utilisez un handler d'une fenêtre de votre application "ça fonctionne".

      Il faut donc poster votre message vers une file de message qui n'est ni celle de votre thread courant, ni d'un autre thread de votre processus mais dans la file de message d'un thread d'un autre processus.

      Vous comprenez bien que cela demande des contextes de sécurités bien plus strictes.

      Et avec certain framework, DirectX, OpenGL ou autre, bons nombres de ces messages sont complètement ignorés.

      Et avec d'autres sous-systèmes, comme POSIX ou OS/2 etc..., il n'y a même pas la garantie qu'il y ait une file de message pour une fenêtre.

      Donc, dans l'absolu, ce que vous tentez de faire, c'est du pur bricolage de bas étage.

      "GetWindow" est peut-être un début de solution, mais cela n'est pas garanti car il faut que l'on connaisse précisément le contexte exact d'utilisation de votre "malware".

      Si vous cherchez à piloter une application qui utilise OpenGL, vous êtes mal barré, n'est pas hacker qui veut. :-°

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
      Anonyme
        24 octobre 2019 à 3:00:35

        Bonjour, j'ai finalement trouvé mon erreur ^^ C'était plutôt simple, non rien d'illégal, je suis en train de coder un utilitaire qui connecte mes comptes Dofus 1.29 ^^' (Utilisation personnelle).

        En fait le problème était relativement simple à résoudre : Le handle que je cherchais à atteindre était comme je l'avais constaté pas celui de la fenêtre en elle-même, j'ai donc dû utiliser GetWindow().. pour pouvoir accéder aux enfants (j'ai fais un tout petit peu de développement graphique donc je sais à peu près comment fonctionne la hiérarchie, mais mes compétences dans ce domaine sont vraiment minimes). 

        J'ai alors récupéré le Handle qui gérait le jeu en lui même donc (celui géré par openGL) et voilà.

        Merci beaucoup pour votre réponse détaillée (bien que légèrement piquante)

        Bien à vous.

        Edit : J'ai demandé au support du jeu si j'avais le droit de faire ce genre de choses et ils ont répondu que tant que le verificateur de bot ne le detecte pas, à la limite il s'en foutent un peu quoi ^^

        -
        Edité par Anonyme 24 octobre 2019 à 3:02:00

        • Partager sur Facebook
        • Partager sur Twitter
          24 octobre 2019 à 14:30:37

          >C'était plutôt simple, non rien d'illégal

          Bon si, c'est pas parce que vous ne vous faites pas (encore) gauler que c'est "légal".

          OpenGL, il s'en cogne des fenêtres Windows et autres handlers, si vous avez ce genre de machin qui fonction c'est justement que ce n'est pas avec la partie OpenGL de l'application/jeu que vous dialoguez.

          Les concepteurs du jeu ne se sont pas trop fait chier pour l'IHM, il réutilise vraisemblablement les contrôles natifs de l'OS pour la faire.

          C'est pas top pour la qualité graphique et les performances, mais le quidam moyen n'en a cure.

          C'est un avantage pour vous, temps que les concepteurs ont un poil dans la main et qu'il ne change pas l'IHM.

          Mais vos bricolages se casseront la gueule à la première mise à jour ( de l'IHM) venue. Et comme ce que vous faites est illégal, il a des chances que les concepteurs la mette à jours juste pour vous faire chier (aussi que tous les autres "bottistes" dont vous ferez partie, que cela vous plaise ou non).

          Si vous insistez, des outils comme Spy++ ( https://docs.microsoft.com/fr-fr/visualstudio/debugger/introducing-spy-increment?view=vs-2019 ) permettent de "voir" la hiérarchie des fenêtres (qui changera tous les quatre matins) et donc de modifier votre code en fonction. Code qui devra être vérifié / mise à jours à chaque changement de l'IHM (en attendant qu'ils se sortent les doigts du c.. pour ne plus utiliser les contrôles Windows et que cela scelle définitivement la fin de vos bricolages).

          Avec ce type d'outils vous verrez comment naviguer dans cette hiérarchie et envoyer le bon handler de fenêtre à la bonne pompe à message (détails que je ne donnerai pas, c'est facilement trouvable sur le net, et comme vous faites des trucs illégaux, je vais pas aggraver mon cas).

          La réponse du support du jeu est technico-technique par légaliste, et même ironique, "Si on te chopes, tu payes".

          Un détecteur de bot n'est pas une CGU et c'est la CGU qui est l'élément légal que vous avez accepté. Si le détecteur de bot déconne mais que vous n’enfreigniez pas les CGU, vous pouvez leur casser les dents devant les tribunaux. Mais cela marche dans l'autre sens aussi, c'est pas parce que le détecteur de botne vous ne vois pas qu'ils n'ont pas le droit de vous dépouille devant les tribunaux si vous avez enfreint les CGU.

          EDIT :

          https://www.dofus.com/fr/cgu

          Article 5.2.5 : "logiciels d’automatisation"

          -
          Edité par bacelar 24 octobre 2019 à 14:33:09

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

          Ecrire du texte dans une application Win32 [C#]

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown