Question Sendkeys:Comment simuler l'entree clavier?(Résolu)

Plus d'informations
il y a 12 ans 11 mois #1215 par Dan
Hello,
quelqu'un pourrait il m'aider sur ce sujet?

dans plusieurs cas je voudrais remplir les champs d'un popup windows en simulant l'entrée clavier. par exemple le popup de login qui apparait lors de l'acces netbios sur un serveur.
ou sur le champs login d'une application quelconque.

je lance par exemple une application par

[code:1]
$app = New-Object -com wscript.shell
$app.Exec(\"nom_de_l'app\"«»)
[/code:1]

mais la methode sendkeys qui apparait sur $app apres la premiere commande disparait lorsque $app represente mon application (2eme commande).

merci d'avance

Message édité par: Dan, à: 22/10/07 15:53<br><br>Message édité par: Arnaud, à: 30/11/07 10:01

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 11 mois #1218 par janel
La méthode ne disparaît pas, elle appartient toujours à $app. Ce qu'il te manque, c'est le fait que $app.SendKeys envoie ses informations à l'application qui a le focus, c'est-à-dire qui est au premier plan. Pour cela, tu peux utiliser la méthode AppActivate() avant SendKeys().

Dans le cas où tu veux lancer l'application dans ton script, tu peux le faire ainsi:

[code:1]
$shell = new-object -com WScript.Shell
$app = $shell.Exec(\&quot;notepad\&quot;«»)
$shell.AppActivate($app.ProcessID)
$shell.SendKeys(\&quot;Hello world!\&quot;«»)[/code:1]
Tu noteras que dans mon exemple, l'objet COM s'appelle $shell et que $app représente l'objet créé par l'appel à la méthode Exec de $shell. J'ai fait ce changement parce que le nom de $app suggère plutôt une application comme objet, alors que l'objet WScript.Shell n'est pas une application en tant que telle.

J'espère que ça répond à ton besoin.

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 10 mois #1237 par Dan
parfait merci beaucoup. j'ai compris le principe et ca fonctionne.

par contre j'ai deux questions sur les effets de bord :)

1 / j'ai besoin de temporiser entre les methodes appvalidate et sendkeys pour eviter les erreurs
mais je ne sais pas sur quoi me baser pour valider que l'application c'est bien mise en avant plan. du coup je temporise 2 secondes pour etre sûr. car 1 seconde fournis des erreurs de temps en temps mais je ne trouve pas la propriete capable de me dire que l'appli est bien en avant plan.

2/ j'ai une application qui freeze quand je passe par powershell pour la démarrer et ce systematiquement alors que la meme application demarrée depuis le bon vieux cmd ne pose pas de pb il semble donc qu'il faille peut etre changer qqchose dans l'environnement wscript-shell mais je ne trouve aucune info pour completer les lignes
$shell = New-Object -comobject wscript.shell
ou
$shell.AppActivate(\&quot;Microsoft Internet Explorer\&quot;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 10 mois #1238 par newt
au passage Janel

existe t il un \&quot;dictionnaire\&quot; sous powerschell
comme des commandes propres aux appli

du style \&quot;apple\&quot;
je demande a une application AP d'ouvrir tel fichier
puis de l'enregistrer sous tel format
par exemple

je ne sais pas si je suis clair...

NEWTON_

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 10 mois #1239 par janel
Dan écrit:

1 / j'ai besoin de temporiser entre les methodes appvalidate et sendkeys pour eviter les erreurs
mais je ne sais pas sur quoi me baser pour valider que l'application c'est bien mise en avant plan. du coup je temporise 2 secondes pour etre sûr. car 1 seconde fournis des erreurs de temps en temps mais je ne trouve pas la propriete capable de me dire que l'appli est bien en avant plan.


Ca ne semble faire partie des propriétés exposées ni par System.Diagnostics.Process ni par Win32_Process, qui sont les deux classes les plus facilement utilisables depuis PowerShell pour manipuler des process. Il est possible que ça existe, mais auquel cas c'est bien caché dans une classe \&quot;ésotérique\&quot;. Je me souviens avoir vu ça dans les API Win32, mais l'appel à une fonction Win32 depuis PowerShell n'est pas des plus évidents. C'est possible, mais ça requiert un codage assez complexe, peut-être trop par rapport à ton besoin.

En attendant, à moins que ce délai de 2 secondes te pose problème, ta solution est sans doute tout à fait viable...

2/ j'ai une application qui freeze quand je passe par powershell pour la démarrer et ce systematiquement alors que la meme application demarrée depuis le bon vieux cmd ne pose pas de pb il semble donc qu'il faille peut etre changer qqchose dans l'environnement wscript-shell mais je ne trouve aucune info pour completer les lignes
$shell = New-Object -comobject wscript.shell
ou
$shell.AppActivate(\&quot;Microsoft Internet Explorer\&quot;)


Peux-tu nous dire exactement de quelle application il s'agit, comment tu la démarres depuis le bon vieux CMD et quel symptôme tu as précisément quand tu la démarres depuis PowerShell?

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 10 mois #1240 par Dan
merci pour ta recherche sur le point 1
je me contenterai du timer

sur le point 2 je ne peux pas te la donner car il s'agit d'une application interne a mon entreprise c'est un .exe qui fait apparaitre un popup de login puis un menu
et j'ai le process qui passe en not responding ... le menu n'apparait pas. je n'ai personne en interne qui peu m'en dire plus sur les besoins en ressource de cette appli malheureusement.
en cmd je tape juste le chemin complet de appli.exe puis entrée et ca fonctionne.
pour info j'ai des dlls dans le repertoire source de l'appli il y a peut etre lieu de donner ce chemin en parametre pour que powershell sache ou aller les chercher<br><br>Message édité par: Dan, à: 27/10/07 11:02

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.351 secondes
Propulsé par Kunena