Как из VB определить запущен или нет Word?

Узнай цену своей работы

Формулировка задачи:

Как из VB определить запущен или нет Word?

Решение задачи: «Как из VB определить запущен или нет Word?»

textual
Листинг программы
Public Declare Function apiGetDesktopWindow Lib 'user32' Alias 'GetDesktopWindow' () As Long
Public Declare Function apiGetWindow Lib 'user32' Alias 'GetWindow' (ByVal Hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function apiGetWindowLong Lib 'user32' Alias 'GetWindowLongA' (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function apiGetWindowText Lib 'user32' Alias 'GetWindowTextA' (ByVal Hwnd As Long, ByVal lpString As String, ByVal aint As Long) As Long
Public Const mcGWCHILD = 5
Public Const mcGWHWNDNEXT = 2
Public Const mcGWLSTYLE = (-16)
Public Const mcWSVISIBLE = &H10000000
Public Const mconMAXLEN = 255
'
Public Function fEnumWindows(ByRef winArr() As String)
    Dim lngx As Long, lngLen As Long
    Dim lngStyle As Long, strCaption As String
    Dim n As Integer
'    
    ReDim winArr(1 To 1000)
    n = 0
'    
    lngx = apiGetDesktopWindow()
    'Return the first child to Desktop
    lngx = apiGetWindow(lngx, mcGWCHILD)
'    
    Do While Not lngx = 0
        strCaption = fGetCaption(lngx)
        If Len(strCaption) > 0 Then
            lngStyle = apiGetWindowLong(lngx, mcGWLSTYLE)
            'enum visible windows only
            If lngStyle And mcWSVISIBLE Then
                n = n + 1
                winArr(n) = fGetCaption(lngx)
            End If
        End If
        lngx = apiGetWindow(lngx, mcGWHWNDNEXT)
    Loop
'    
    If n > 0 Then ReDim Preserve winArr(1 To n)
    fEnumWindows = n
'    
End Function
'
Public Function fGetCaption(Hwnd As Long)
    Dim strBuffer As String
    Dim intCount As Integer
'    
    strBuffer = String$(mconMAXLEN - 1, 0)
    intCount = apiGetWindowText(Hwnd, strBuffer, mconMAXLEN)
    If intCount > 0 Then
        fGetCaption = Left$(strBuffer, intCount)
    End If
End Function
'
Sub Main()
    Dim i As Integer, appTitle As String
    Dim winArray() As String
'    
    appTitle = InputBox('Введите заголовок приложения', 'Запущено ли приложение?', _
                        'Microsoft Word')
'    
    ' Перечисление заголовков окон запущенных и видимых приложений (если надо):
    For i = 1 To fEnumWindows(winArray)
        Debug.Print winArray(i)
    Next i
'    
    ' Определение, запущено ли приложение:
    If IsAppRunning(appTitle) Then
        MsgBox 'Приложение ' + appTitle + ' запущено!', vbInformation, 'Информация'
    Else
        MsgBox 'Приложение ' + appTitle + ' не запущено.', vbInformation, 'Информация'
    End If
'    
End Sub
'
Public Function IsAppRunning(ByVal appWindowCaption As String) As Boolean
    Dim i As Integer
    Dim winArray() As String
'    
    IsAppRunning = False
    For i = 1 To fEnumWindows(winArray)
        If InStr(1, winArray(i), appWindowCaption) > 0 Then
            IsAppRunning = True
        End If
    Next i
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы