powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Требуется определить из Access запущен ли Word в системе
19 сообщений из 19, страница 1 из 1
Требуется определить из Access запущен ли Word в системе
    #32781399
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Требуется определить из Access запущен ли Word в системе? Можно с использованием Win API. Хрестоматийный пример DetectExcel, переделанный под Word (замена XLMAIN на OpusApp и т.д.) просьба не предлагать- вызов API FindWindow("OpusApp", 0) запускает Word (даже если Word не был запущен)и поэтому не годится. Прошу показать альтернативную проверку запущен ли Word в системе, если кто знает или может. Спасибо Влад.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781404
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в лоб ежели XP - tasklist через shell + разбор полёта
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781405
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как определить - дома ли жена? Придти домой и попробовать её убить, если не получиться - значит жены дома нет.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781417
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Уточняю, требуется совместимость со всеми Win, видимо без API не обойтись. Какова альтернатива FindWindow (требуется алгоритм работы с Running Object Table (ROT))?
PS: Excel с Word видимо ничего общего не имеет, так как судя по XLMAIN и OpusApp а также некоторым другим взаимоисключающим стилям, эти приложения написаны различными группами. Таким образом, то что для Excel Ok, на Word не распространяется.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781418
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
help Функция GetObject

Если pathname является пустой строкой (""), GetObject возвращает новый экземпляр объекта указанного типа. Если аргумент pathname опущен, GetObject возвращает текущий активный объект указанного типа. Если ни одного объекта указанного типа не существует, возникает ошибка.

т.е.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dim a
on error resume next
set a = getobject(,"word.application")
if err.number<> 0  then
  msgbox "Word не запущен"
else
  msgbox "Word запущен"
endif
on error goto  0 
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781422
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GetObject не катит, ты ее сам попробуй и увидишь, что err.number всегда больше 0, так как GetObject запускает Word даже если тот не был запущен!
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781423
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, err.number = 0 всегда после вызова GetObject(,"Word.Application")
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781424
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал - у меня не запускает.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781425
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал. У меня не всегда =0.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781426
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, а у вас все MS OfficeЫ лицензионные? Поверьте, разница есть, и очень большая, особенно когда работаешь с OLE. По этой причине я имею Office2000Pro и Office2003Pro лицензионные. Есть ли идеи про API?
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781427
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vladlentПрошу прощения, err.number = 0 всегда после вызова GetObject(,"Word.Application")
А если проверить
if a is nothing
?
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781429
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladlentГоспода, а у вас все MS OfficeЫ лицензионные? Поверьте, разница есть, и очень большая, особенно когда работаешь с OLE. По этой причине я имею Office2000Pro и Office2003Pro лицензионные. Есть ли идеи про API?
А что, у вас хелп отличается от приведенной цитаты? Она же из 2000/2002/2003:
HelpIf pathname is a zero-length string (""), GetObject returns a new object instance of the specified type. If the pathname argument is omitted, GetObject returns a currently active object of the specified type. If no object of the specified type exists, an error occurs.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781430
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
It is always not Nothing because Word gets started every time you run GetObject(,"Word.Application") statement in your program. Any other ideas (please let me know the quickest way with Win API, if anybody has experience of course)?
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781431
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, в процессе тестирования были созданы и болтаются в списке задач "недобитые" Word'ы. Поэтому ошибка и не возникает. 2003 у меня лицензионный. И работает.
ЗЫ. В правилах есть просьба об использовании русского языка.
ЗЗЫ. Если есть ограничение по winapi, имеет смысл перенести топик в visual basic.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781432
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, ситуация с Word очень странная, так как FindWindow и GetObject работают совсем не так как нужно. Но на двух различных машинах ведут себя одинаково (в смысле не так как написано в Help), отсюда и мое обращение за помощью в форум, хотя я думаю, что альтернативу и сам найду, просто хотел побыстрее.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781435
vladlent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Процесс тестирования был ОЧЧЕНЬ!!! длинным (на мой взгляд для такого пустяка по сравнению со всем приложением) и все тонкости вроде Word instances в системе отсутствовали. Спасибо в любом случае за затраченное время на общение по этой теме, посмотрим что можно сделать, если будет время то напишу как вышел из ситуации. Удачи! Влад.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32781446
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vladlentIt is always not Nothing because Word gets started every time you run GetObject(,"Word.Application") statement in your program. Any other ideas (please let me know the quickest way with Win API, if anybody has experience of course)?
סליחה. כנראה לא קראתי טוב את מה שכתבת קודם
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32782062
Lenivec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Function IsWordLoad() As Boolean
On Error Resume Next
Dim WordApp As Object

    Set WordApp = GetObject(, "Word.Application")
    If Err.Number <>  0  Then
        Err.Clear
        IsWordLoad = False
    Else
        IsWordLoad = True
        Set WordApp = Nothing
    End If

End Function
Работает в коммерческом приложении без проблем вот уже на протяжении лет 6, и ни на одной из машин ни у одного из клиентов проблем не возникало.
...
Рейтинг: 0 / 0
Требуется определить из Access запущен ли Word в системе
    #32782323
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
Const TH32CS_SNAPHEAPLIST As Long =  1            ' включить список куч в снапшот
Const TH32CS_SNAPPROCESS As Long =  2             ' включить списко процессов
Const TH32CS_SNAPTHREAD  As Long =  4             ' включить список тредов
Const TH32CS_SNAPMODULE  As Long =  8             ' включить список модулей
Const TH32CS_SNAPALL  As Long =  1  Or  2  Or  4  Or  8  ' в снапшот будет включено все
Const TH32CS_INHERIT As Long = &H80000000       ' снапшот может наследоваться

Type PROCESSENTRY32
    size            As Long    ' размер структур - нужно установить до вызова
    usage           As Long    ' ссылок на процесс - живет, пока не равно нулю
    processid       As Long    ' PID
    defaultHeapID   As Long    ' ID кучи процесса по умолчанию
    moduleID        As Long    ' MID :))
    threads         As Long    ' количество запущенных процессом тредов
    parentProcessID As Long    ' PID процесса, создавшего наш процесс
    priClassBase    As Long    ' базовый приоритет тредов
    flags           As Long    ' зарезервировано
    exeFile         As String *  255  ' лучшее напоследок - полный путь к процессам!
End Type
  
Declare Function CreateToolhelp32Snapshot Lib "Kernel32.dll" (ByVal dwFlag As Long, ByVal processid As Long) As Long
Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Boolean
Declare Function Process32First Lib "Kernel32.dll" (ByVal hSnapShot As Long, ByRef Procentry32 As PROCESSENTRY32) As Boolean
Declare Function Process32Next Lib "Kernel32.dll" (ByVal hSnapShot As Long, ByRef Procentry32 As PROCESSENTRY32) As Boolean


Function FindProcess(strProcess As String) As Boolean
   
   Dim flag As Boolean, hSnap As Long
   Dim Procentry As PROCESSENTRY32
   
   hSnap = CreateToolhelp32Snapshot( 2 ,  0 )
   flag = False
   Procentry.size =  291 
   
   If Process32First(hSnap, Procentry) Then
      If InStr(UCase(Procentry.exeFile), UCase(strProcess)) <>  0  Then flag = True
      While (Not flag) And (Process32Next(hSnap, Procentry))
        If InStr(UCase(Procentry.exeFile), UCase(strProcess)) <>  0  Then
            flag = True
        End If
      Wend
   End If
   CloseHandle hSnap
   FindProcess = flag
End Function

Private Sub IsProcess()
  If FindProcess("WINWORD.EXE") Then MsgBox "Найден" Else MsgBox "Не найден"
End Sub
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Требуется определить из Access запущен ли Word в системе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]