跳过Autoexec宏(自动执行宏)
来源:百度文库 编辑:神马文学网 时间:2024/04/27 21:55:28
如果没有设置AllowBypassKey属性,那么通过编程方式在启动数据库时按住Shift键来自动避开数据库启动的自动代码。通过引用隐藏的ACCESS数据库实例来避开数据库的自动宏,你可以使用下面的函数fGetRefNoAutoexec。 常常,使用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 LongPrivate Declare Function GetKeyboardState _
Lib "user32" (pbKeyState As Any) _
As LongPrivate Declare Function GetWindowThreadProcessId _
Lib "user32" _
(ByVal hWnd As Long, _
lpdwProcessId As Long) _
As LongPrivate Declare Function AttachThreadInput _
Lib "user32" _
(ByVal idAttach As Long, _
ByVal idAttachTo As Long, _
ByVal fAttach As Long) _
As LongPrivate Declare Function SetForegroundWindow _
Lib "user32" _
(ByVal hWnd As Long) _
As LongPrivate Declare Function SetFocusAPI _
Lib "user32" Alias "SetFocus" _
(ByVal hWnd As Long) _
As LongPrivate Const VK_SHIFT = &H10
Private Const VK_LSHIFT = &HA0
Private Const VK_RSHIFT = &HA1Function 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 ByteIf (Len(Dir$(strMDBPath, vbNormal)) = 0) Then
Err.Raise 53
End IfSet 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 = NothingExit 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 ***********
文章出处:http://www.diybl.com/course/7_databases/access/ac_h/2007614/51361.html
' 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 LongPrivate Declare Function GetKeyboardState _
Lib "user32" (pbKeyState As Any) _
As LongPrivate Declare Function GetWindowThreadProcessId _
Lib "user32" _
(ByVal hWnd As Long, _
lpdwProcessId As Long) _
As LongPrivate Declare Function AttachThreadInput _
Lib "user32" _
(ByVal idAttach As Long, _
ByVal idAttachTo As Long, _
ByVal fAttach As Long) _
As LongPrivate Declare Function SetForegroundWindow _
Lib "user32" _
(ByVal hWnd As Long) _
As LongPrivate Declare Function SetFocusAPI _
Lib "user32" Alias "SetFocus" _
(ByVal hWnd As Long) _
As LongPrivate Const VK_SHIFT = &H10
Private Const VK_LSHIFT = &HA0
Private Const VK_RSHIFT = &HA1Function 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 ByteIf (Len(Dir$(strMDBPath, vbNormal)) = 0) Then
Err.Raise 53
End IfSet 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 = NothingExit 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 ***********
文章出处:http://www.diybl.com/course/7_databases/access/ac_h/2007614/51361.html
跳过Autoexec宏(自动执行宏)
AUTOEXEC.BAT
操作系统常见问题光盘自动执行功能失效
如何做AUTOEXEC.BAT文件
跳过龙门又如何
学会跳过与忽略
跳过龙门又如何?
印媒:中国撑杆跳过喜马拉雅
微软发布FixIt工具 修复“快捷方式自动执行”高危0day漏洞
执行~
word文档无法打开、禁止自动宏的运行
在Word中跳过首页计算页码
config.sys和autoexec.bat各参数详解
word文档打不开(禁止自动宏的运行及创建新的Normal 模板)
[技巧]ICP备案(可跳过手机邮箱验证)
中国人 你如何跳过文革这一页?-最爱卫斯理-西陆网
跳过XP的用户名和密码直接进入系统
让Windows 7重现XP经典:跳过帐户设定
自动自发
自动自发
自动书写
自动协商
自动排版
自动自发