Powershell模拟键盘

时间:2015-12-13 17:59:30

标签: powershell powershell-v4.0 powershell-ise

我使用sendkeys时遇到问题是Powershell。我试图制作一个会发送密钥的脚本:shift,w,a,s,d到游戏中。我尝试的代码是:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait(+{w}{a}{s}{d});

但是当我使用它时它只发送" Wasd"。它不会改变运动,我可以看到它已经在游戏机控制台中发送。

有没有办法可以模拟按键?

可以使用鼠标左键完成:

    $signature=@' 
          [DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
          public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
    '@ 

    $SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru

$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);

键盘有类似的东西吗?

2 个答案:

答案 0 :(得分:3)

sendKeys方法似乎一次不支持多个字符,因此您需要自动将许多键发送到sendkeys方法。

经过一番思考,这就是我想出的。

Add-Type -AssemblyName System.Windows.Forms    
timeout 3
'WASD'.ToCharArray() | ForEach-Object {[System.Windows.Forms.SendKeys]::SendWait($_)}

结果如下:

Send keys with PowerShell, awesome![1]

现在,逐行了解:

  • 像以前一样添加类型。
  • 接下来,三秒钟超时消息,我快速双击并打开记事本。
  • 最后,我使用字符' WASD'制作字符串,然后调用系统字符串.ToCharArray()方法,该方法将字符串转换为字符数组。现在我正在使用W,A,S,D而不是WASD。

对于每个对象(每个字母,W,A,S和D),我调用SendWait()静态方法。在ForEach脚本块中,$_符号用于引用当前对象。

这是我能提出的最简洁易懂的方法。

答案 1 :(得分:1)

试试这个:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait("+")
[System.Windows.Forms.SendKeys]::SendWait("{w}{a}{s}{d}")

结果我得到了wasd所以我猜它有效。