我使用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);
键盘有类似的东西吗?
答案 0 :(得分:3)
sendKeys方法似乎一次不支持多个字符,因此您需要自动将许多键发送到sendkeys方法。
经过一番思考,这就是我想出的。
Add-Type -AssemblyName System.Windows.Forms
timeout 3
'WASD'.ToCharArray() | ForEach-Object {[System.Windows.Forms.SendKeys]::SendWait($_)}
结果如下:
现在,逐行了解:
.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
所以我猜它有效。