none
SendKeys sur une fenêtre particulière [Résolu] RRS feed

  • Question

  • Bonjour,

    J'essaye d'automatiser un process en faisant un script PowerShell.

    Pour cela je simule les touches de mon clavier avec SendKeys

    $shell = New-Object -Com WScript.Shell
    $shell.SendKeys("MonTexte")

    ça fonctionne bien, sauf que ça écrit sur mon interface PowerShell ISE. 

    Ma question est:

    Comment faire pour identifier mon programme .exe et envoyer ce que je veux dans ma fenêtre.

    Merci d'avance,

    Respectueusement.


    lundi 30 novembre 2020 15:14

Réponses

  • J'ai fini par trouvé: 

    cd E:\chemin\
    .\dbtool.exe
    
    $a = Get-Process | Where-Object {$_.MainWindowTitle -like "*dbtool*"}
    $wshell = New-Object -com WScript.Shell
    $wshell.AppActivate($a.id)
    $Tab = [char]9
    Start-Sleep -seconds 4
    $wshell.sendkeys("SQL_TOTO")
    $wshell.sendkeys("$Tab")
    $wshell.sendkeys("toto")
    $wshell.sendkeys("$Tab")
    $wshell.sendkeys("m")
    $wshell.sendkeys("m")
    $wshell.sendkeys("m")
    $wshell.sendkeys("m")
    
    Start-Sleep -seconds 10
    
    Stop-Process -Name *dbtool*

    lundi 30 novembre 2020 17:24
  • Bonjour,

    voici une solution que j'utilisais il y a très longtemps, du coup, c'est en VBS !

    ----

    ' Thierry DEMAN (tdeman@free.fr) SET wshshell = createObject ("Wscript.shell") ' Lancement de l'exécutable que l'on veut gérer (si nécessaire) wshshell.run "setupsnk.exe" 'délai en millisecondes, avant réessai.

    delai=500 ' Activation/attente de la fenêtre dont le titre est "Message 1", Envoi de "chaine 1" dès que la fenêtre 1 est détectée WinAuto "Message 1","Chaine 1" ' Activation/attente de la fenêtre dont le titre est "Message 2", Envoi de "chaine 2" dès que la fenêtre 1 est détectée WinAuto "Message 2", "Chaine 2" FUNCTION WinAuto(Fenetre,Touches) DO wscript.sleep(delai) LOOP UNTIL wshshell.AppActivate(Fenetre) wshshell.sendkeys(Touches) END FUNCTION

    Je pense que l'on doit pouvoir réaliser la même chose en Powershell, à partir des éléments donnés par Mehdi.

    Il est prudent de mettre un délai entre chaque "instruction", pour laisser le temps de se charger à chaque nouvelle fenêtre. 

    A bientôt,




    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info


    lundi 30 novembre 2020 19:06

Toutes les réponses

  • Salut je vais chercher dans les archives,

    j'avais fait pareil pour envoyer sur des VMS ou des machines à distance, mais sauf que c'était un script, c'était loinnnn de la ligne que tu as faite


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi

    lundi 30 novembre 2020 17:04
  • J'ai fini par trouvé: 

    cd E:\chemin\
    .\dbtool.exe
    
    $a = Get-Process | Where-Object {$_.MainWindowTitle -like "*dbtool*"}
    $wshell = New-Object -com WScript.Shell
    $wshell.AppActivate($a.id)
    $Tab = [char]9
    Start-Sleep -seconds 4
    $wshell.sendkeys("SQL_TOTO")
    $wshell.sendkeys("$Tab")
    $wshell.sendkeys("toto")
    $wshell.sendkeys("$Tab")
    $wshell.sendkeys("m")
    $wshell.sendkeys("m")
    $wshell.sendkeys("m")
    $wshell.sendkeys("m")
    
    Start-Sleep -seconds 10
    
    Stop-Process -Name *dbtool*

    lundi 30 novembre 2020 17:24
  • Bonjour,

    voici une solution que j'utilisais il y a très longtemps, du coup, c'est en VBS !

    ----

    ' Thierry DEMAN (tdeman@free.fr) SET wshshell = createObject ("Wscript.shell") ' Lancement de l'exécutable que l'on veut gérer (si nécessaire) wshshell.run "setupsnk.exe" 'délai en millisecondes, avant réessai.

    delai=500 ' Activation/attente de la fenêtre dont le titre est "Message 1", Envoi de "chaine 1" dès que la fenêtre 1 est détectée WinAuto "Message 1","Chaine 1" ' Activation/attente de la fenêtre dont le titre est "Message 2", Envoi de "chaine 2" dès que la fenêtre 1 est détectée WinAuto "Message 2", "Chaine 2" FUNCTION WinAuto(Fenetre,Touches) DO wscript.sleep(delai) LOOP UNTIL wshshell.AppActivate(Fenetre) wshshell.sendkeys(Touches) END FUNCTION

    Je pense que l'on doit pouvoir réaliser la même chose en Powershell, à partir des éléments donnés par Mehdi.

    Il est prudent de mettre un délai entre chaque "instruction", pour laisser le temps de se charger à chaque nouvelle fenêtre. 

    A bientôt,




    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info


    lundi 30 novembre 2020 19:06
  • Ok merci :) je passe en résolu
    mardi 1 décembre 2020 13:21