我需要运行以下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
答案 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应该可以工作但是我不能像你想要的那样测试它。