Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Проверка активности приложения


Автор: Rassules 7.9.2007, 15:21
Доброго времени суток!

Как проверить открыто ли приложение? Конкретнее, нужно проверять открыто ли приложение (Word/ Excel), чтобы отслеживать его "непрограммное" закрытие (проще говоря, чтобы пользователь его мог закрывать стандартным образом)) )
Пробовал через Task Manager... не получилось) 

Автор: W4FhLF 7.9.2007, 15:24
Я так и не понял, что надо. Ещё раз, внятнее. 

Автор: Rassules 7.9.2007, 15:31
Отбросим все лишнее))
Нужно программно узнать, открыто ли приложение.
Т.е., грубо говоря, щелкнул на кнопке, а там MsgBox, допустим, с сообщением "приложение такое-то открыто/закрыто"

Тему, конечно, неправильно назвал

Автор: W4FhLF 7.9.2007, 16:18
Что известно об этом приложении? Имя процесса, заголовок окна?

Автор: Rassules 7.9.2007, 16:27
Мм... Имя процесса это что? Это не то, которое в диспетчере задач?

Запускаю процесс такой строчкой:
        
Код

Dim appWord As Word.Application
    Dim appOffice As Object
    Dim docWord As Word.Document
        appWord = New Word.Application
        docWord = appWord.Documents.Add
        appWord.Visible = True



Автор: Akina 7.9.2007, 17:17
FindWindowEx

Автор: W4FhLF 7.9.2007, 17:32
Код

Private Declare Function Process32First Lib "kernel32.dll" ( _
   ByVal hSnapshot As Long, _
   ByRef lppe As PROCESSENTRY32) As Long

Private Declare Function Process32Next Lib "kernel32.dll" ( _
   ByVal hSnapshot As Long, _
   ByRef lppe As PROCESSENTRY32) As Long

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" ( _
   ByVal dwFlags As Long, _
   ByVal th32ProcessID As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hPass As Long) As Long

Private Const TH32CS_SNAPPROCESS As Long = &H2
Private Const MAX_PATH As Long = 260&

Private Type PROCESSENTRY32
  dwSize As Long
  cntUsage As Long
  th32ProcessID As Long
  th32DefaultHeapID As Long
  th32ModuleID As Long
  cntThreads As Long
  th32ParentProcessID As Long
  pcPriClassBase As Long
  dwFlags As Long
  szExeFile As String * MAX_PATH
End Type


Private Function IsProcessLoaded(ProcessName As String) As Boolean
    Dim hSnapshot As Long, uProcess As PROCESSENTRY32
    
    IsProcessLoaded = False
    
    hSnapshot = CreateToolhelp32Snapshot(&H2, 0)
    If hSnapshot = &HFFFF Then Exit Function
    
    uProcess.dwSize = Len(uProcess)
    Call Process32First(hSnapshot, uProcess)
    
    Do
        If LCase(Left$(uProcess.szExeFile, Len(ProcessName))) = LCase(ProcessName) Then
            IsProcessLoaded = True
            Exit Do
        End If
    Loop While (Process32Next(hSnapshot, uProcess))
    
    Call CloseHandle(hSnapshot)
End Function

Private Sub Form_Load()
    If IsProcessLoaded("winword.exe") Then
        MsgBox "Process loaded"
    Else
        MsgBox "Process not found"
    End If
End Sub


Автор: Дмит 8.9.2007, 21:10
Можно попробовать так:

Private objWord as Word.Application
Set objWord=GetObject (, "Word.Application")

Если ошибка 429, то Word не открыт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)