0

有没有一种方法可以通过Powershell 中的SendKey将参数传递给我的自定义应用程序

TCL中的EXPECT之类的东西

#!/usr/bin/perl -w
use Expect;
my $exp = new Expect;

my $command = 'ssh -l user 10.10.10.25';

$exp->spawn($command) or die "Cannot spawn $command: $!\n";

my $patidx = $exp->expect(30, 'Enter passphrase for key');
$exp->send("password\n");

我厌倦了使用以下内容,但它似乎没有调用我的自定义应用程序

$a = Get-Process | Where-Object {$_.Name -eq "Notepad"}
wait
[Microsoft.VisualBasic.Interaction]::AppActivate($a.ID)
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
wait
[System.Windows.Forms.SendKeys]::SendWait("{F5}{ENTER}")

我的客户应用程序就像C:\somecli -option1 -option2 -option 3

我有一个cli命令说 ping -t 10.10.10.1 这里命令是“ping”,参数是“-t 10.10.10.1”,所以当我最初调用命令时,我假设使用“ping -t 10.10.10.1”我需要传递另一个参数说: y 在一些执行完成后,这个命令,sendkey 确实允许我

4

2 回答 2

0

我不太明白您将“传递参数”传递给 SendKeys 是什么意思,但 SendKeys 仅适用于当前聚焦的窗口,这意味着您无法向后台运行的任何应用程序输入键。前面提到的 PowerShell 的 WASP 模块只是在内部使用了 SendKeys,所以如果 WASP 不起作用,那么也不会输入 SendKeys 函数。

至于“这适用于任何自定义应用程序”,SendKeys 基于 WinForms API,因此它只能与使用该 API 的应用程序交互。

编辑:

根据您的编辑,您似乎只想发送在运行时定义的密钥。只需将您的键分配给一个变量(如$keys="Keys I want to send"),然后发送该变量(如[System.Windows.Forms.SendKeys]::SendWait($keys))。Read-Host如果您希望用户键入要发送的密钥,则可以使用。

于 2012-10-22T19:28:37.670 回答
0

您可以在http://wasp.codeplex.com/中使用 WASp shap

这是他们网站上的示例:

Select-Window notepad | Send-Keys "%(ea)Testing{Enter}{F5}"
于 2012-10-22T08:01:44.917 回答