Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Требуется определить из Access запущен ли Word в системе / 19 сообщений из 19, страница 1 из 1
14.11.2004, 19:32:08
    #32781399
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Требуется определить из Access запущен ли Word в системе? Можно с использованием Win API. Хрестоматийный пример DetectExcel, переделанный под Word (замена XLMAIN на OpusApp и т.д.) просьба не предлагать- вызов API FindWindow("OpusApp", 0) запускает Word (даже если Word не был запущен)и поэтому не годится. Прошу показать альтернативную проверку запущен ли Word в системе, если кто знает или может. Спасибо Влад.
...
Рейтинг: 0 / 0
14.11.2004, 19:42:56
    #32781404
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
в лоб ежели XP - tasklist через shell + разбор полёта
...
Рейтинг: 0 / 0
14.11.2004, 19:48:11
    #32781405
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Как определить - дома ли жена? Придти домой и попробовать её убить, если не получиться - значит жены дома нет.
...
Рейтинг: 0 / 0
14.11.2004, 20:10:07
    #32781417
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Спасибо. Уточняю, требуется совместимость со всеми Win, видимо без API не обойтись. Какова альтернатива FindWindow (требуется алгоритм работы с Running Object Table (ROT))?
PS: Excel с Word видимо ничего общего не имеет, так как судя по XLMAIN и OpusApp а также некоторым другим взаимоисключающим стилям, эти приложения написаны различными группами. Таким образом, то что для Excel Ok, на Word не распространяется.
...
Рейтинг: 0 / 0
14.11.2004, 20:10:25
    #32781418
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
:)
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
14.11.2004, 20:14:56
    #32781422
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
GetObject не катит, ты ее сам попробуй и увидишь, что err.number всегда больше 0, так как GetObject запускает Word даже если тот не был запущен!
...
Рейтинг: 0 / 0
14.11.2004, 20:18:25
    #32781423
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Прошу прощения, err.number = 0 всегда после вызова GetObject(,"Word.Application")
...
Рейтинг: 0 / 0
14.11.2004, 20:18:47
    #32781424
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Попробовал - у меня не запускает.
...
Рейтинг: 0 / 0
14.11.2004, 20:19:32
    #32781425
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Попробовал. У меня не всегда =0.
...
Рейтинг: 0 / 0
14.11.2004, 20:22:53
    #32781426
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Господа, а у вас все MS OfficeЫ лицензионные? Поверьте, разница есть, и очень большая, особенно когда работаешь с OLE. По этой причине я имею Office2000Pro и Office2003Pro лицензионные. Есть ли идеи про API?
...
Рейтинг: 0 / 0
14.11.2004, 20:26:55
    #32781427
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
vladlentПрошу прощения, err.number = 0 всегда после вызова GetObject(,"Word.Application")
А если проверить
if a is nothing
?
...
Рейтинг: 0 / 0
14.11.2004, 20:29:11
    #32781429
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
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
14.11.2004, 20:30:37
    #32781430
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
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
14.11.2004, 20:35:00
    #32781431
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Возможно, в процессе тестирования были созданы и болтаются в списке задач "недобитые" Word'ы. Поэтому ошибка и не возникает. 2003 у меня лицензионный. И работает.
ЗЫ. В правилах есть просьба об использовании русского языка.
ЗЗЫ. Если есть ограничение по winapi, имеет смысл перенести топик в visual basic.
...
Рейтинг: 0 / 0
14.11.2004, 20:35:04
    #32781432
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Вообще, ситуация с Word очень странная, так как FindWindow и GetObject работают совсем не так как нужно. Но на двух различных машинах ведут себя одинаково (в смысле не так как написано в Help), отсюда и мое обращение за помощью в форум, хотя я думаю, что альтернативу и сам найду, просто хотел побыстрее.
...
Рейтинг: 0 / 0
14.11.2004, 20:39:59
    #32781435
vladlent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Процесс тестирования был ОЧЧЕНЬ!!! длинным (на мой взгляд для такого пустяка по сравнению со всем приложением) и все тонкости вроде Word instances в системе отсутствовали. Спасибо в любом случае за затраченное время на общение по этой теме, посмотрим что можно сделать, если будет время то напишу как вышел из ситуации. Удачи! Влад.
...
Рейтинг: 0 / 0
14.11.2004, 21:16:32
    #32781446
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
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
15.11.2004, 12:43:46
    #32782062
Lenivec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Код: 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
15.11.2004, 14:18:20
    #32782323
baike2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется определить из Access запущен ли Word в системе
Код: 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Требуется определить из Access запущен ли Word в системе / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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