2013-05-08 2 views
2

다음 2 줄의 코드를 실행하여 액세스 데이터베이스를 열어야합니다. 문제는이 데이터베이스가 PowerShell 스크립트가 닫힐 때까지 실행되지 않도록 차단하는 자동로드 모델 양식이 있다는 것입니다.PowerShell에서 어떻게 시프트 키를 누른 상태로 시뮬레이션 할 수 있습니까?

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

Shift 키를 누르면 데이터베이스를 열 때 대화 상자가 표시되지 않습니다. 나는 이것을 테스트했고 작동합니다. 이제 PowerShell 스크립트를 실행하는 동안 Shift 키를 누를 필요가 없으므로 Shift 키를 누른 상태로 시뮬레이트하는 PowerShell의 방법이 있습니까? SendKey가 아니라 OpenCurrentDatabase 동안을 길게 누르십시오.

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

는 파워 쉘-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 어셈블리 LShiftKey

I에 대한 값으로 0xA0을 사용하지 않으려면 정말 네이티브 powershell 방법을 모르지만, P는/호출이 작동해야하지만 당신이 그것을 사용하려는 것처럼 그것을 테스트 할 수 없습니다.

관련 문제