powershell:如何发送鼠标中键?

时间:2012-08-25 21:55:31

标签: powershell

如何使用power shell脚本发送鼠标中键? 我想要这样的东西:

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.SendKeys]::SendWait('{MButton}')

2 个答案:

答案 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可能会有所帮助。