如何使用power shell脚本发送鼠标中键? 我想要这样的东西:
Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.SendKeys]::SendWait('{MButton}')
答案 0 :(得分:9)
function Click-MouseButton
{
param(
[string]$Button,
[switch]$help)
$HelpInfo = @'
Function : Click-MouseButton
By : John Bartels
Date : 12/16/2012
Purpose : Clicks the Specified Mouse Button
Usage : Click-MouseButton [-Help][-Button x]
where
-Help displays this help
-Button specify the Button You Wish to Click {left, middle, right}
'@
if ($help -or (!$Button))
{
write-host $HelpInfo
return
}
else
{
$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
if($Button -eq "left")
{
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
}
if($Button -eq "right")
{
$SendMouseClick::mouse_event(0x00000008, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000010, 0, 0, 0, 0);
}
if($Button -eq "middle")
{
$SendMouseClick::mouse_event(0x00000020, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000040, 0, 0, 0, 0);
}
}
}
您可以将此功能添加到您的个人资料或其他脚本中,然后您可以通过以下方式调用它:
Click-MouseButton“middle”
答案 1 :(得分:3)
好吧,SendKeys用于模拟键盘输入而不是鼠标输入。如果有一个键盘机制来调用该函数,那么您可以使用SendKeys。例如,如果为控件配置了键盘加速器,则可以发送Alt +«char»。您可以发送Tab键然后使用空格键单击按钮。
对于使用PowerShell实际发送密钥,首先必须获得要向其发送击键的Window句柄。如何获得窗口句柄取决于窗口的创建方式。一种方法是使用Win32 API FindWindow
。一旦你有了Window,你需要确保它是前台窗口(另一个Win32 API - SetForegroundWindow
这样做),然后你可以开始发送它的击键。 PowerShell V2及更高版本允许您通过{P <1}} cmdlet通过.NET PInvoke机制访问Win32 API,例如:
Add-Type
另一种可能的方式, iff Window是基于WinForms(或WPF)并且它在PowerShell进程中运行,是使用Reflection进入你想要发送MButtonClick并调用的控件OnMouse点击自己。您需要对控件的引用,但可能是在PowerShell进程中运行时,您创建了控件,因此您可以引用它。
您可能会发现UI Automation with Windows PowerShell上的这篇MSDN文章很有用。还有MSDN topic on simulating mouse and keyboard input可能会有所帮助。