powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать имя файла WORD из процеса
12 сообщений из 12, страница 1 из 1
Узнать имя файла WORD из процеса
    #39881400
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Можно ли узнать какой файл Word открыт процесом WINWORD.EXE &
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881416
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диспетчер процессов об этом ничего не знает. Но Ворд пишет имя файла в заголовке окна, так что теоретически можно написать небольшую программульку, которая будет это показывать
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881428
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, вот так находит, но только первого процеса, а как найти остальные?
Код: vbnet
1.
2.
3.
4.
5.
6.
   
 Set WordApp = GetObject(, "Word.Application")

    For Each wDoc In WordApp.Documents
        List1.AddItem wDoc.Name
    Next wDoc
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881438
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи либо в этой ветке, либо в ветке msoffice - был топик на тему поиска всех процессов ворда (или экселя, неважно)
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881449
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через winapi как выше предлагали самый простой и топорный способ, наверное
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881583
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dino_zavrShocker.Pro, вот так находит, но только первого процеса, а как найти остальные?
Код: vbnet
1.
2.
3.
4.
5.
6.
   
 Set WordApp = GetObject(, "Word.Application")

    For Each wDoc In WordApp.Documents
        List1.AddItem wDoc.Name
    Next wDoc



Ну так ты получил ссылку только на один экземпляр объекта Word
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881602
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    Dim callProcess As Variant
    Set callProcess = objWMIService.ExecQuery("Select * from Win32_Process")

    Dim processName As String
    processName = "MOBILedit!.exe"

    Dim Процесс As String
    Dim ПроцессCount As Integer

    For Each objProcess In callProcess
        Процесс = objProcess.Name
        ПроцессCount = ПроцессCount + 1

        If UCase(objProcess.Name) = UCase(processName) Then
            isProcessRun = True
            Exit For
        End If
    Next
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881739
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EoltНу так ты получил ссылку только на один экземпляр объекта Word
А как получить ссылку на объект конкретного процесса ?
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881742
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну задача такая.
В своей програме я создаю New Word Application - открываю файл Word. Запихиваю его через SetParent в окно своей проги. После нажатия "Сохранить" (на моей проге) с файлом производится ряд действий.
Если все нормально (корректно открыл, корректно закрыл) вопросов нет.
Но если прога (моя) "упадет" (мало ли что) то в процессах останется висеть процесс который будет блокировать вордовский файл.
Поэтому я хочу перед запуском проги проверить - нет ли "висящих" процесов Winword.exe которые оставила упавшая прога и если есть - убить процесс
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39881849
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dino_zavr,

Попробуй анализировать CommandLine у процесса. Если там будет путь к нужному файлу, то будешь убивать этот процесс
...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39882046
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dino_zavr,
можно получить объекты окон, в которых открыты документы.
Код: vbnet
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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
' Source point
' https://social.msdn.microsoft.com/Forums/vstudio/en-US/a10c6bcd-4745-4e07-a02e-3d98f5b6e941/display-all-open-excel-workbooks-in-a-listbox-multiple-processes
'

Option Explicit

Const OBJID_NATIVEOM = &HFFFFFFF0

Const E_NOINTERFACE = &H80004002
Const E_INVALIDARG = &H80070057
Const DISP_E_MEMBERNOTFOUND = &H80020003
Const E_NOTIMPL = &H80004001
Const E_OUTOFMEMORY = &H8007000E
Const E_FAIL = &H80004005
Const S_OK = &H0&
Const S_FALSE = &H1&

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function EnumChildWindows Lib "user32" ( _
    ByVal hWndParent As Long, _
    ByVal lpEnumFunc As Long, _
    ByVal lParam As Long) As Long
    
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
    ByVal Hwnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
    
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" ( _
    ByVal Hwnd As Long) As Long

Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" ( _
    ByVal Hwnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long

Private Declare Function AccessibleObjectFromWindow Lib "oleacc" ( _
    ByVal Hwnd As Long, _
    ByVal dwId As Long, _
    ByRef riid As GUID, _
    ByRef ppvObject As Object) As Long

Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

' entry point
Sub Main()
    Call EnumChildWindows(GetDesktopWindow(), AddressOf EnumChildProc, ByVal 0&)
End Sub

Function EnumChildProc(ByVal Hwnd As Long, ByVal lParam As Long) As Long
    Dim txt As String
    Dim obj As Object
    Dim WordApp As Object
    
    Dim IID_IDispatch As GUID
    '["{00020400-0000-0000-C000-000000000046}"]
    With IID_IDispatch
       .Data1 = &H20400
       .Data4(0) = &HC0
       .Data4(7) = &H46
    End With
    
    Dim ClassName As String, Ret As Long
    ClassName = Space(255)
    Ret = GetClassName(Hwnd, ClassName, 255)
    ClassName = Left$(ClassName, Ret)
    
    'https://docs.microsoft.com/en-us/windows/win32/api/oleacc/nf-oleacc-accessibleobjectfromwindow
    If "_WwG" = ClassName Then
        Ret = AccessibleObjectFromWindow(Hwnd, OBJID_NATIVEOM, IID_IDispatch, obj)

        If S_OK = Ret Then
            txt = Space$(GetWindowTextLength(Hwnd) + 1)
            Call GetWindowText(Hwnd, txt, Len(txt))
            txt = Left$(txt, Len(txt) - 1)

            Debug.Print Hwnd, ClassName, txt
            ' obj is Window
            Set WordApp = obj.Application
            Debug.Print obj.Document.Content
            
            Set WordApp = Nothing
            Set obj = Nothing
        End If
    End If

    'continue enumeration
    EnumChildProc = 1
End Function

...
Рейтинг: 0 / 0
Узнать имя файла WORD из процеса
    #39882078
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stupid_BOT,
AccessibleObjectFromWindow очень нужная мне функция, спасибо
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать имя файла WORD из процеса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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