Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать имя файла WORD из процеса / 12 сообщений из 12, страница 1 из 1
25.10.2019, 10:56
    #39881400
Dino_zavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
Здравствуйте!
Можно ли узнать какой файл Word открыт процесом WINWORD.EXE &
...
Рейтинг: 0 / 0
25.10.2019, 11:19
    #39881416
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
Диспетчер процессов об этом ничего не знает. Но Ворд пишет имя файла в заголовке окна, так что теоретически можно написать небольшую программульку, которая будет это показывать
...
Рейтинг: 0 / 0
25.10.2019, 11:31
    #39881428
Dino_zavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
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
25.10.2019, 11:45
    #39881438
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
Поищи либо в этой ветке, либо в ветке msoffice - был топик на тему поиска всех процессов ворда (или экселя, неважно)
...
Рейтинг: 0 / 0
25.10.2019, 12:00
    #39881449
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
через winapi как выше предлагали самый простой и топорный способ, наверное
...
Рейтинг: 0 / 0
25.10.2019, 14:01
    #39881583
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
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
25.10.2019, 14:29
    #39881602
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
Код: 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
25.10.2019, 18:54
    #39881739
Dino_zavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
EoltНу так ты получил ссылку только на один экземпляр объекта Word
А как получить ссылку на объект конкретного процесса ?
...
Рейтинг: 0 / 0
25.10.2019, 19:08
    #39881742
Dino_zavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
Ну задача такая.
В своей програме я создаю New Word Application - открываю файл Word. Запихиваю его через SetParent в окно своей проги. После нажатия "Сохранить" (на моей проге) с файлом производится ряд действий.
Если все нормально (корректно открыл, корректно закрыл) вопросов нет.
Но если прога (моя) "упадет" (мало ли что) то в процессах останется висеть процесс который будет блокировать вордовский файл.
Поэтому я хочу перед запуском проги проверить - нет ли "висящих" процесов Winword.exe которые оставила упавшая прога и если есть - убить процесс
...
Рейтинг: 0 / 0
26.10.2019, 10:18
    #39881849
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
Dino_zavr,

Попробуй анализировать CommandLine у процесса. Если там будет путь к нужному файлу, то будешь убивать этот процесс
...
Рейтинг: 0 / 0
27.10.2019, 11:55
    #39882046
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
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
27.10.2019, 15:45
    #39882078
Dino_zavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать имя файла WORD из процеса
Stupid_BOT,
AccessibleObjectFromWindow очень нужная мне функция, спасибо
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать имя файла WORD из процеса / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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