powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / WORD: кто меня вызвал?
11 сообщений из 11, страница 1 из 1
WORD: кто меня вызвал?
    #34697983
Фотография Slav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из различных приложений вызывается WORD (возможно, создается его объект).
Как мне в WORD'е узнать - какое приложение его вызвало? Насколько я понимаю, вставить это надо в AutoOpen. А вот что вставить-то?
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34697993
Фотография Slav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл - WORD 2000.

Спасибо.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34698022
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В явном виде не знаю. Я бы использовал CustomDocumentProperties в приложении, а в ворде проверял бы его.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34698043
Фотография Slav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeВ явном виде не знаю. Я бы использовал CustomDocumentProperties в приложении, а в ворде проверял бы его.

big-duke,

забыл добавить - приложения не мои, исходники не доступны.
Поэтому и задача, собственно, возникла. Мне надо организовать постобработку результатов - а приложение позволяет только экспорт в ВОРД.
Вот и хочу - если нормально вызвали, то ничего делать не надо. Если это из конкретного приложения - запускаю свою постобработку.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34698089
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так если уже есть экспортированы данные, то проверьте их наличие в документе и обрабатывайте.
А так ... ммм... не уверен, но все же - можно попробовать через API найти окно, процесс и попытаться опредлить - кто запустил этот процесс.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34698129
Фотография Slav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeТак если уже есть экспортированы данные, то проверьте их наличие в документе и обрабатывайте.
big-duke,

попробую еще раз сформулировать задачу.
Первый случай - ВОРД вызван приложением, после которого я должен запустить свои действия.
Второй случай - открывается файл, допустим из Проводника двойным кликом, в котором ничего делать не надо.
Третий случай - ВОРД вызывается другим приложением, которое просто экспортирует данные. Без всякой последующей обработки с моей стороны.
Как мне эти три случая различить - из ВОРДА, именно из него?

Понятно, можно заставить юзера запомнить данные, а потом вызвать макру моей обработки. Но хотелось бы исключить эту операцию - и возможные непонятки (перепутал файлы и т.д.) Т.е. если пришел в ВОРД из конкретного приложения - то сразу получи результат обработки, без дополнительных телодвижений.

big-dukeА так ... ммм... не уверен, но все же - можно попробовать через API найти окно, процесс и попытаться опредлить - кто запустил этот процесс.
Это на крайний случай... :)
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34700330
Hjlklk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно поиграться со свойством UserControl у Application.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34714026
Фотография Slav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HjlklkМожно поиграться со свойством UserControl у Application.
Hjlklk,

спасибо.
Это позволило отличить программный запуск от "ручного". Т.е. половина задачи решена.
Не теряю надежды решить и вторую половину - различить кто именно инициировал программный запуск.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34723955
Фотография Slav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для случая создания объекта WORD из разных приложений задачу решил.
Если кому-то нужен код - могу выложить.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34724190
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно выкладывай.
...
Рейтинг: 0 / 0
WORD: кто меня вызвал?
    #34731604
Фотография Slav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все оказалось очень просто.
Идея базируется на том, что когда приложение создает новый вордовский объект (экспорт данных, в частности) - его (приложения) окно активно. Надо взять название активного окна - и проверить, есть ли там имя той программы, которая интересует.
Сделать это надо в самом начале - т.е. в AutoNew.

Код для VB MS 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.
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" _
(ByVal hwnd As Long) As Long

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Declare Function GetForegroundWindow Lib "user32" () As Long

Dim FromMyProg As Boolean

Sub MyGetActiveWindow()
  Const GW_HWNDNEXT =  2 
  
  Dim hwnd As Long
  Dim MyStr As String
  
    hwnd = FindWindow(vbNullString, vbNullString)
    Do While hwnd <>  0 
        ' проверяем тока родительские окна
        If GetParent(hwnd) =  0  Then
            MyStr = String(GetWindowTextLength(hwnd) +  1 , Chr$( 0 ))
            GetWindowText hwnd, MyStr, Len(MyStr)
            If InStr(MyStr, "ИмяПрогиКотораяИнтересует") >  0  Then
                ' а вот и окно нашей проги - проверяем, оно активно в данный момент
                If (GetForegroundWindow = hwnd) Then FromMyProg = True
            End If
        End If
        ' пока окна не кончатся
        hwnd = GetWindow(hwnd, GW_HWNDNEXT)
    Loop
End Sub

Sub AutoNew()
    FromMyProg = False
    Call MyGetActiveWindow
End Sub

Sub AutoOpen()
' нафсякей - если открываем уже существующий файл в той же сессии, что и создан объект
    FromMyProg = False
End Sub

После этого флаг FromMyProg используем там где надо - если он установлен, то значит документ создан из приложения, которое нас интересует.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / WORD: кто меня вызвал?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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