Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell模拟键盘_Powershell_Powershell 4.0_Powershell Ise - Fatal编程技术网

Powershell模拟键盘

Powershell模拟键盘,powershell,powershell-4.0,powershell-ise,Powershell,Powershell 4.0,Powershell Ise,我在使用sendkeys is Powershell时遇到问题。我正在尝试制作一个脚本,它将把键:shift,w,a,s,d发送到游戏中。我正在尝试的代码是: Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.SendKeys]::SendWait(+{w}{a}{s}{d}); 但当我用这个的时候,它只是发送Wasd。它不会改变移动,我可以看到这已经在游戏控制台中发送 有没有办法模拟按键 可以使用以下方法对鼠标

我在使用sendkeys is 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);
键盘有类似的功能吗?

试试这个:

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

因此我得到了wasd,所以我想它是有效的。

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

经过深思熟虑后,我想到了这一点

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

现在,让我们逐行了解正在发生的事情:

添加类型,就像您之前所做的那样。 接下来是一条三秒钟的超时消息,我在其中快速双击并打开记事本。 最后,我用字符“WASD”生成一个字符串,然后调用system String.ToCharray方法,该方法将字符串转换为字符数组。现在我用的是W,A,S,D,而不是WASD。 对于这些对象中的每一个字母,W,A,S和D,我都调用SendWait静态方法。在ForEach脚本块中,$\符号用于引用当前对象


这是我能想到的最简洁易懂的方法。

Hmmm[System.Windows.Forms.SendKeys]::SendWait{t}{y}{e}{t}{h}{I}{s}{p}{l}{e}{a}{s}{e}在这里工作谢谢@FoxDeply的回复,唯一的问题是这不能解决我的问题。游戏似乎不接受SendWait方法。我的球员没有停止移动。但当我打开一个聊天窗口时,它会输入WASD。我认为它必须更像我发送的第二个代码,才能让游戏接受它作为真正的输入。那么,游戏可能会对sendkeys有一些保护。@sodawillow,我很确定,对您回答的问题的其他答案进行否决投票是违反堆栈溢出准则的。我已经对我的投票进行了评论:我只是不同意答案的第一句话:sendKeys方法似乎一次不支持多个字符。如果我违反了这里的规定,我很抱歉。但这显然不是我对投票规则的理解。我现在就去看帮助部分,这里没有讽刺:。此外,我认为这个问题更多的是针对shift键,而不是其他任何东西,但我意识到我弄错了。