如何取消(禁止)Autoexec宏的自动运行?

2024-06-22 11:43:50阅读量:35 字体:

使用Autoexec宏来自动操作一个或多个ACCESS数据库,特别是如果开发者试图获Access对象模型(Access Object Model),胜过使用Jet引擎(能通过DAO和ADO来获取的)。不管怎样,Access不提供任何内置的方法来有条件避开这个Autoexec宏。如果数据库包括了这个宏,一打开就会运行。当未设置数据库的AllowBypassKey属性时,可以在启动数据库时按住Shift键来避开运行这个宏。

如果没有设置AllowBypassKey属性,那么可以通过编程方式模拟启动数据库时按住Shift键,这样可以自动避开数据库启动的自动代码。通过引用隐藏的ACCESS数据库实例来避开数据库的自动宏,你可以使用下面的函数fGetRefNoAutoexec。

’********* Code Start ***********
’ This code was originally written by Dev Ashish.
’ It is not to be altered or distributed,
’ except as part of an application.
’ You are free to use it in any application,
’ provided the copyright notice is left unchanged.

’ Code Courtesy of
’ Dev Ashish


Private Declare Function SetKeyboardState _
Lib "user32" _
(lppbKeyState As Any) _
As Long

Private Declare Function GetKeyboardState _
Lib "user32" (pbKeyState As Any) _
As Long

Private Declare Function GetWindowThreadProcessId _
Lib "user32" _
(ByVal hWnd As Long, _
lpdwProcessId As Long) _
As Long

Private Declare Function AttachThreadInput _
Lib "user32" _
(ByVal idAttach As Long, _
ByVal idAttachTo As Long, _
ByVal fAttach As Long) _
As Long

Private Declare Function SetForegroundWindow _
Lib "user32" _
(ByVal hWnd As Long) _
As Long

Private Declare Function SetFocusAPI _
Lib "user32" Alias "SetFocus" _
(ByVal hWnd As Long) _
As Long

Private Const VK_SHIFT = &H10
Private Const VK_LSHIFT = &HA0
Private Const VK_RSHIFT = &HA1

Function fGetRefNoAutoexec( _
ByVal strMDBPath As String) _
As Access.Application
On Error GoTo ErrHandler
Dim objAcc As Access.Application
Dim TIdSrc As Long, TIdDest As Long
Dim abytCodesSrc(0 To 255) As Byte
Dim abytCodesDest(0 To 255) As Byte

If (Len(Dir$(strMDBPath, vbNormal)) = 0) Then
Err.Raise 53
End If

Set objAcc = New Access.Application
With objAcc
.Visible = True

’ attach to process
TIdSrc = GetWindowThreadProcessId( _
Application.hWndAccessApp, ByVal 0)
TIdDest = GetWindowThreadProcessId( _
.hWndAccessApp, ByVal 0)

If CBool(AttachThreadInput(TIdSrc, TIdDest, True)) Then
Call SetForegroundWindow(.hWndAccessApp)
Call SetFocusAPI(.hWndAccessApp)

’ 设置Shift状态
Call GetKeyboardState(abytCodesSrc(0))
Call GetKeyboardState(abytCodesDest(0))
abytCodesDest(VK_SHIFT) = 128
Call SetKeyboardState(abytCodesDest(0))

’ 打开一个带有Autoexec宏的mdb
Call .OpenCurrentDatabase(strMDBPath, False)

’ 恢复键盘状态
Call SetKeyboardState(abytCodesSrc(0))
End If
’ release
Call AttachThreadInput(TIdSrc, TIdDest, False)
Call SetForegroundWindow(Application.hWndAccessApp)
Call SetFocusAPI(Application.hWndAccessApp)

End With
Set fGetRefNoAutoexec = objAcc
Set objAcc = Nothing

Exit Function
ErrHandler:
If (TIdDest) Then Call AttachThreadInput(TIdSrc, TIdDest, False)
Call SetForegroundWindow(Application.hWndAccessApp)
With Err
.Raise .Number, .Source, .Description, .HelpFile, .HelpContext
End With
End Function
’********* Code End ***********

以上就是如何取消(禁止)Autoexec宏的自动运行?的全部内容,望能这篇如何取消(禁止)Autoexec宏的自动运行?可以帮助您解决问题,能够解决大家的实际问题是谜爱阁生活网一直努力的方向和目标。

推荐阅读

  • qq相册怎么转移到另一个qq

    qq相册怎么转移到另一个qq

    qq相册要转移到另一个qq,可以借助转载功能进行转移,使用QQ进入另一个QQ的相册即可进行转载。具体操作方法如下: qq相册怎么转移到另一个qq 1、打开手机QQ软件,点击联系人”,再点击...

    阅读: 690

  • 花呗账单日怎么修改

    花呗账单日怎么修改

    花呗的账单日可以通过修改还款时间来修改,修改花呗的还款时间后,出账单的日子也会改变,通过设置修改花呗的账单日的具体操作步骤如下: 花呗账单日怎么修改 1、打开支付宝app,先点击下方的我的&rdquo...

    阅读: 751

  • 抖音怎么0.5倍速播放

    抖音怎么0.5倍速播放

    抖音视频播放有四种倍速选择,要设置0.5倍播放,在视频播放中即可直接设置。具体操作方法如下: 抖音怎么0.5倍速播放 1、打开手机抖音app,进入视频播放,长按视频,进入播放设置页面。 2、点击倍速...

    阅读: 767

  • 删除微信表情包

    删除微信表情包

    很多人的微信添加了很多表情包,如果要将微信内添加的表情包删除,进入微信的表情功能页面即可进行删除。具体操作方法如下: 删除微信表情包 1、打开手机微信app,点击我”,再点击表情&rdqu...

    阅读: 769

  • 家人地图如何开启永久位置

    家人地图如何开启永久位置

    家人地图是高德地图推出的家人定位查询功能,要开启家人地图永久位置分享,可以直接在家人地图设置中开启。具体操作方法如下: 家人地图如何开启永久位置 1、打开手机高德地图app,点击我的”。 ...

    阅读: 817

  • 快手号怎么修改不了,只有复制

    快手号怎么修改不了,只有复制

    快手号只有复制,修改不了,是因为近期已经修改过快手号了,从修改时开始需要等待90天后才能再次修改。修改快手号的具体操作方法如下: 快手号怎么修改不了,只有复制 1、打开手机快手app,点击左上角三条横...

    阅读: 702