在powershell中,如何模拟按住shift键?

时间:2013-05-08 18:10:37

标签: powershell powershell-v2.0

我需要运行以下2行代码来打开访问数据库。问题是这个数据库有一个自动加载的模型表单,阻止其余的powershell脚本运行直到它关闭。

$ms_access = New-Object -ComObject "Access.Application"
$ms_access.OpenCurrentDatabase("C:\db.accdb", $false)

如果按下shift键,我可以在打开数据库时避开对话框。我已经测试了这个并且它有效。现在我想在运行我的PowerShell脚本时不必按住shift键,那么在PowerShell中有一种方法可以模拟按下的shift键吗?不只是一个SendKey,而是在OpenCurrentDatabase

的持续时间内按住

喜欢什么?

$ms_access = New-Object -ComObject "Access.Application"
Set-Shift-Down
$ms_access.OpenCurrentDatabase("C:\db.accdb", $false)
Set-Shift-Up

这是针对Powershell-v2

1 个答案:

答案 0 :(得分:3)

我使用p/invoke

Add-Type @"
using System;                                                                     
using System.Runtime.InteropServices;
public class Tricks {
[DllImport("user32.dll")]                                                            
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);}
"@   

[system.reflection.assembly]::Loadwithpartialname("system.windows.forms")

#left shift key pressed
[tricks]::keybd_event([System.Windows.Forms.Keys]::LShiftKey, 0x45, 0, 0);
... do stuff here
#left shift key released
[tricks]::keybd_event([System.Windows.Forms.Keys]::LShiftKey, 0x45, 0x2, 0);    

如果您不希望加载windows.forms汇编使用0xA0作为LShiftKey

的值

我真的不知道本地的powershell方式,p / invoke应该可以工作但是我不能像你想要的那样测试它。