设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2201|回复: 2
打印 上一主题 下一主题

[Access本身] 如何监测 Excel 或者 Word 是否在后台运行?谁知道怎么用啊?

[复制链接]
跳转到指定楼层
1#
发表于 2004-1-4 23:05:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个我看不懂,谁知道怎么用啊?


如何检测 Excel 或者 Word 是否在后台运行?

可以使用 API 函数 fIsAppRunning 来检测一个应用程序是否正在运行。这个函数是通过查询程序名来检测。

可以用以下函数来激活后台运行的某个应用程序

fIsAppRunning("Word",True)

如果你只是要知道 Word 运行与否,您可以用上述函数,去掉参数 True 即可。示例如下:

fIsAppRunning("word")


'***************** 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 Const SW_HIDE = 0
Private Const SW_SHOWNORMAL = 1
Private Const SW_NORMAL = 1
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_MAXIMIZE = 3
Private Const SW_SHOWNOACTIVATE = 4
Private Const SW_SHOW = 5
Private Const SW_MINIMIZE = 6
Private Const SW_SHOWMINNOACTIVE = 7
Private Const SW_SHOWNA = 8
Private Const SW_RESTORE = 9
Private Const SW_SHOWDEFAULT = 10
Private Const SW_MAX = 10

Private Declare Function apiFindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal strClass As String, _
    ByVal lpWindow As String) As Long

Private Declare Function apiSendMessage Lib "user32" Alias _
    "SendMessageA" (ByVal Hwnd As Long, ByVal Msg As Long, ByVal _
    wParam As Long, lParam As Long) As Long
   
Private Declare Function apiSetForegroundWindow Lib "user32" Alias _
    "SetForegroundWindow" (ByVal Hwnd As Long) As Long
   
Private Declare Function apiShowWindow Lib "user32" Alias _
    "ShowWindow" (ByVal Hwnd As Long, ByVal nCmdShow As Long) As Long
   
Private Declare Function apiIsIconic Lib "user32" Alias _
    "IsIconic" (ByVal Hwnd As Long) As Long
   
Function fIsAppRunning(ByVal strAppName As String, _
        Optional fActivate As Boolean) As Boolean
    Dim lngH As Long, strClassName As String
    Dim lngX As Long, lngTmp As Long
    Const WM_USER = 1024
    On Local Error GoTo fIsAppRunning_Err
    fIsAppRunning = False
    Select Case LCase$(strAppName)
        Case "excel"
            strClassName = "XLMain"
        Case "word"
            strClassName = "OpusApp"
        Case "access"
            strClassName = "OMain"
        Case "powerpoint95"
            strClassName = "P7FrameClass"
        Case "powerpoint97"
            strClassName = "P97FrameClass"
        Case "notepad"
            strClassName = "NOTEPAD"
        Case "paintbrush"
            strClassName = "pbParent"
        Case "wordpad"
            strClassName = "WordPadClass"
            '如果你还知道其他的应用程序名,还可以自己添加
        Case Else
            strClassName = vbNullString
    End Select
   
    If strClassName = "" Then
        lngH = apiFindWindow(vbNullString, strAppName)
    Else
        lngH = apiFindWindow(strClassName, vbNullString)
    End If
    If lngH <> 0 Then
        apiSendMessage lngH, WM_USER + 18, 0, 0
        lngX = apiIsIconic(lngH)
        If lngX <> 0 Then
            lngTmp = apiShowWindow(lngH, SW_SHOWNORMAL)
        End If
        If fActivate Then
            lngTmp = apiSetForegroundWindow(lngH)
        End If
        fIsAppRunning = True
    End If
fIsAppRunning_Exit:
    Exit Function
fIsAppRunning_Err:
    fIsAppRunning = False
    Resume fIsAppRunning_Exit
End Function
'******************** Code End ****************



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2004-1-5 01:15:00 | 只看该作者
加了个提示框,例子在此:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2004-1-5 18:07:00 | 只看该作者
如果检测到程序在后台运行,是否可以直接调用API关掉运行的程序呢?如果可以,怎样调用?好象后台运行的EXCEL检测不到,我在内存中驻留一个EXCEL,就没有任何提示,也不提示运行,也不提示不运行.

看样子,这个程序并不能检测到在内存中驻留的EXCEL或WORD.

[此贴子已经被作者于2004-1-5 10:14:33编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-10 02:01 , Processed in 0.105413 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表