2

アクセス データベースを開くには、次の 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 用です

4

1 に答える 1

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は機能するはずですが、使用したいようにテストすることはできません。

于 2013-05-08T19:04:52.020 に答える