2013-05-08 115 views
2

我需要運行以下2行代碼來打開訪問數據庫。問題是這個數據庫有一個自動加載的模型表單,阻止其餘的PowerShell腳本從運行到關閉狀態。在powershell中如何模擬shift鍵被按下?

$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

回答

3

I'ld使用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應該可以工作,但我不能像測試它那樣使用它。