使用PowerShell打开Access数据库,模拟shift键作为服务

时间:2013-06-06 21:35:55

标签: windows powershell service

所以我问了this问题并得到了答案。因此,当我以用户身份运行时,我的脚本有效...

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);}
"@   

cd "C:\db_location\"

$ms_access = New-Object -ComObject "Access.Application"
[tricks]::keybd_event(0xA0, 0x45, 0, 0);
$ms_access.OpenCurrentDatabase("C:\db_location\db_app.accdb", $false)
[tricks]::keybd_event(0xA0, 0x45, 0x2, 0); 

$ms_access.Run("do_work")
$ms_access.Quit() | Out-Null

否设置运行此PowerShell的服务失败。它永远不会达到$ms_access.Run("do_work")位,这意味着开放没有完成。打开无法完成的唯一原因是因为模拟的shift键不起作用。

当此脚本作为服务运行时,如何让keybd_event生效?

1 个答案:

答案 0 :(得分:0)

普通的Windows服务没有键盘或鼠标。无法为非现有键盘生成键盘事件。您可以尝试将服务配置为here之类的互动,或者找到另一种方法来打开您的访问数据库,例如here