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

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

big-duke,

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

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

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

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

спасибо.
Это позволило отличить программный запуск от "ручного". Т.е. половина задачи решена.
Не теряю надежды решить и вторую половину - различить кто именно инициировал программный запуск.
...
Рейтинг: 0 / 0
13.08.2007, 14:58:23
    #34723955
Slav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WORD: кто меня вызвал?
Для случая создания объекта WORD из разных приложений задачу решил.
Если кому-то нужен код - могу выложить.
...
Рейтинг: 0 / 0
13.08.2007, 15:57:38
    #34724190
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WORD: кто меня вызвал?
конечно выкладывай.
...
Рейтинг: 0 / 0
16.08.2007, 11:13:02
    #34731604
Slav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WORD: кто меня вызвал?
Все оказалось очень просто.
Идея базируется на том, что когда приложение создает новый вордовский объект (экспорт данных, в частности) - его (приложения) окно активно. Надо взять название активного окна - и проверить, есть ли там имя той программы, которая интересует.
Сделать это надо в самом начале - т.е. в 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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / WORD: кто меня вызвал? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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