powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
25 сообщений из 26, страница 1 из 2
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39015785
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите :
Как после создания документа ворд из FORMS ( OLE2.CREATE_OBJ('Word.Application') ) можно узнать ИД созданного Процесса ? (в самой форме)
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016044
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoR,

Для чего?

а вообще св-ва получают через get_obj_property:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
...
word_app OLE2.OBJ_TYPE;
o_type OLE2.obj_type;
...
word_app := OLE2.CREATE_OBJ('Word.Application');
o_type := OLE2.get_obj_property(word_app,'Documents');
o_type := OLE2.get_obj_property(word_app,'ActiveDocument');
...
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016260
Forms тут совсем не при чем. Вопрос чисто по MS Word.

Но вопрос интересный...

Если есть открытый документ - у него есть окно - у объекта Window можно получить hWnd ( свойство https://msdn.microsoft.com/en-us/library/office/jj231484.aspx ). В Windows API перейти от hWnd к HPROCESS точно должно быть возможно.

Зачем Вам это нужно? Мне, обычно, HPROCESS нужен только для того, что бы дождаться завершения выполнения приложения.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016268
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы.

Насчет "зачем" - после закрытия документа из формы ( OLE2.INVOKE(doc, 'Close', args); ) иногда документ не закрывается ( по разным причинам, иногда не понятным ), так вот когда это происходит хочу остановить этот процесс с помощью taskkill . Нужен именно PID . Word открывается всегда под заранее неизвестным пользователем (или с правами какого-то неизвестного пользователя), тут 17355242 описал что заставляет WORD так действовать.
Хотел найти свой процесс по " названию окна ", но так как Word и форма находятся под разными пользователем, tasklist выдает " название окна " = "N/A" .


mRdUKE ,
в свойствах документа OLE2.get_obj_property(..) не знаю как узнать ID процесса. Есть варианты?


Leonid Kudryavtsev 123987 ,
подскажите как из FORMS получить hWnd или HPROCESS и потом прийти к PID ?
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016289
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoR,

После Close + OLE2.RELEASE_OBJ(...) по каждому типу в обратном порядке объявления и OLE2.INVOKE(word_app,'Quit'); присутствует?
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016851
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Подтвержаю. Наиболее часто ( 99% ) проблема исключительно в некоректно написаном коде. Отсутствие вызовов RELEASE_OBJ для каких-то объектов.

Соответственно объекты отмечены как занятые, приложение ( Word, Excel ) завершится не может.

2. Вроде и так понятно написал. Если есть объект MS Word Window, то у него можно получить HWND.

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.window.hwnd.aspx

Через HWND мы можем получить ID потока и процесса, который создал данное окно.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633522(v=vs.85).aspx

GetWindowThreadProcessId function

Retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window.
....

НО, если у Вас действительно чахорда с юзерами и правами, то ничего гарантировать нельзя. Я даже не понимаю, как такое отлаживать.
... тут 17355242 описал ...
IMHO
Кривость какую то сотворили и продолжаете творить
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016942
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде tasklist процессы других пользователей тоже показывает. Т.ч. тоже проблем особых быть не должно (только не понятно, как "свой" Word искать).
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016970
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я могу судить, то код закрытия коректен, хотябы потому что проблемы возникают в 10% всех создаваемых документах.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
...

    wdDoNotSaveChanges constant number := 0;

    happlication ole2.obj_type;
    hdocuments   ole2.obj_type;
    hdocument    ole2.obj_type;
    args         ole2.list_type;
    
...

    args := ole2.create_arglist;
    ole2.add_arg(args, wdDoNotSaveChanges);
    ole2.invoke(hdocument, 'Close', args);
    ole2.destroy_arglist(args);

    ole2.invoke(happlication, 'Quit');

    ole2.release_obj(hdocument);
    ole2.release_obj(hdocuments);
    ole2.release_obj(happlication);

...



Leonid Kudryavtsev ,
спасибо за вашу наводку, но " Window.Hwnd property " имеет синтаксис для С# и VB , а " GetWindowThreadProcessId function " для C++ .
Как практически можно это использовать в FORMS 6 ?

Leonid KudryavtsevIMHO
Кривость какую то сотворили и продолжаете творить
Если бы клиент согласился выполнять задачу из под вошедшего пользователя, то никаких вообще проблем ни воросов не возникло бы, а так нужно считаться с его требованиями.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39016976
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevВроде tasklist процессы других пользователей тоже показывает. Т.ч. тоже проблем особых быть не должно (только не понятно, как "свой" Word искать).
Если бы это было так, то тему можно было бы закрывать, т.к. если документы создаю я, то и имя этим документам тоже генерирую я, по имени окна можно было бы найти нужный процесс. А так TaskList показывает названия документов открытых только у текущего пользователя. к сожалению.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017030
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoRНасколько я могу судить, то код закрытия коректен, хотябы потому что проблемы возникают в 10% всех создаваемых документах.

Дело не только в коде закрытия. Где-то, какой-то объект забывают освободить через RELEASE_OBJ. Какой - ищется только глазками по коду. ВСЕ объекты полученные от OLE нужно освобождать.
Al*GatoRспасибо за вашу наводку, но " Window.Hwnd property " имеет синтаксис для С# и VB , а " GetWindowThreadProcessId function " для C++ .
Как практически можно это использовать в FORMS 6 ?

Тут я не знаю, что Вам ответить:
1. OLE2.GET_OBJ_PROPERTY. В чем проблема? Я так понимаю, у Вас уже написано немало кода с OLE2 т.ч. проблемы быть не должно.
2. ORA_FFI package

Al*GatoR...а так нужно считаться с его требованиями.

Ничего не могу сказать, не знаю Вашу ситуацию. Но сама по себе конфигурация и проблемы крайне странные.

Есть подозрение, что проблема не с кодом, а с постановкой задачи (ну или с архитектурой) )))
Al*GatoR...А так TaskList показывает названия документов открытых только у текущего пользователя. к сожалению.

Ничего не могу сказать У Вас крайне специфическая конфигурация. Т.ч. нужно смотреть и экспериментировать на Вашей конфигурации. Визуально и по доке - вроде пользователь проблемой являться не должен. Как на самом деле в Вашей конфигурации - вряд ли кто сможет сказать, не видя ее.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017107
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoRНасколько я могу судить, то код закрытия коректен, хотябы потому что проблемы возникают в 10% всех создаваемых документах.
Возможно порядок команд играет роль, где-то указывают release_obj до "закрытия", где-то видел после.. дока по командам
Leonid KudryavtsevВроде tasklist процессы других пользователей тоже показывает.судя по мане тоже TASKLIST /v /fi "username eq ..." и судя, по той же мане, даже на remote pc ..

а может написать батник, закрывающий все процессы winword.exe и запускать его после всех команд, или, к примеру - не все процессы, а в статусе NOT RESPONDING или по другим параметрам отсеивать, cputime/memusage, max(pid) :) как-то так ?
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017129
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По всему коду где открывается обьект в конце процедуры ( и в excpetion ) стоят RELEASE_OBJ. Нет ниодной переменной обьекта которая остается не освобаждённой.

вот результат TaskList сразу после создания документа:

Image NamePIDSession NameSession#Mem UsageStatusUser NameCPU TimeWindow TitleWINWORD.EXE28376RDP-Tcp#29453`504 KUnknownSSTSC\U112340:00:03N/AWINWORD.EXE29288RDP-Tcp#262995`616 KUnknownSSTSC\M000050:00:14N/AWINWORD.EXE 14224 RDP-Tcp#6340`004 KUnknownSSTSC\U002240:00:07N/AWINWORD.EXE23072RDP-Tcp#6335`876 KUnknownSSTSC\U002240:00:02N/AWINWORD.EXE11128RDP-Tcp#6334`848 KUnknownSSTSC\U002240:00:01N/A
PID:14224 - мой документ, знаю это лишь потому что отслеживаю результаты TaskList до и после создания документа. Но этот метод имеет погрешность в случаи когда какой-то пользователь откроет новый документ вместе со мной, тогда я неузнаю свой процесс. В этом случаи придется лишь надеется что мой процесс закроется без проблем...
По " CPU Time " тоже что-то не понятно, это точно НЕ время которое процесс существует.
По " Mem Usage " тоже скольско, т.к. размер колеблется по мере наполнения документа данными от 30 до 80 может и больше.

Leonid KudryavtsevТут я не знаю, что Вам ответить:
1. OLE2.GET_OBJ_PROPERTY. В чем проблема? Я так понимаю, у Вас уже написано немало кода с OLE2 т.ч. проблемы быть не должно.Много искал на просторах всемирной поутины как называется тот параметр для OLE2.GET_OBJ_PROPERTY, который даст мне ожидаемый результат но никак, да и сам перепробовал этих параметров на угад от самых логичных до самых нелепых, но врезультате ничего не нашел, поэтому и пришел на форум.

Leonid Kudryavtsev2. ORA_FFI packageПокопаюсь с этим еще денёк. Вот было бы радости, получив готовый код :)
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017133
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoRпоутины как называется тот параметр для OLE2.GET_OBJ_PROPERTY, который даст мне ожидаемый результат но никак, да и сам перепробовал этих параметров на угад от самых логичных до самых нелепых, но врезультате ничего не нашел

Такое чувство, что Вы OLE2 первый раз в жизни видите. Параметр ясно дело тот, который описан в доке - HWND.
Al*GatoRПокопаюсь с этим еще денёк. Вот было бы радости, получив готовый код :)
Что бы получился готовый код, нужно AFAIK:
1. Видеть код, который у Вас сейчас
2. Написать код
3. Отладить его. С учетом Вашей специфики, без доступа к Вашему окружению (DEV/TEST) малореально. Ну или затрачивать дохрина сил, на воспроизведения всего того, что Вы "наворотили" )))

Как-то так.

Вообще, собственно искомый вопрос - все решается. Что уже хорошо )))
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017146
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevAl*GatoRпоутины как называется тот параметр для OLE2.GET_OBJ_PROPERTY, который даст мне ожидаемый результат но никак, да и сам перепробовал этих параметров на угад от самых логичных до самых нелепых, но врезультате ничего не нашел

Такое чувство, что Вы OLE2 первый раз в жизни видите. Параметр ясно дело тот, который описан в доке - HWND.
Свойство числовое, т.ч. понятное дело OLE2.GET_NUM_PROPERTY от объекта Window (его должно быть возможно из объекта Document или Application получить).
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017168
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev ,
ценю ваше участие в поиске решения задачи.

результаты следующей комманды приводит к ошибке:
Код: plsql
1.
2.
3.
4.
5.
6.
...
l_num_res   number;
hwindow     ole2.obj_type
...
l_num_res := ole2.get_num_property(hwindow, 'Hwnd');
...


Так же перепробовал и для happlication и hdocument , так же для всех трёх объектов искал и get_ obj _property и get_ char _property, в результате - ошибка .

Кроме того, еще попробовал получить и объект и число и строку свойства ' ActivePrinter ', в результате получил 3 разных значения но не упало на ошибке.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017292
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoR,

А PowerShell юзать не пробовали?

> get-process winword | select-object * -last 1
__NounName : Process
Name : WINWORD
Handles : 242
VM : 252293120
WS : 31969280
PM : 19517440
NPM : 12680
Path : C:\Program Files\Microsoft Office\Office14\WINWORD.EXE
Company : Microsoft Corporation
CPU : 1,03125
FileVersion : 14.0.4762.1000
ProductVersion : 14.0.4762.1000
Description : Microsoft Word
Product : Microsoft Office 2010
Id : 3680
PriorityClass : Normal
HandleCount : 242
WorkingSet : 31969280
PagedMemorySize : 19517440
PrivateMemorySize : 19517440
VirtualMemorySize : 252293120
TotalProcessorTime : 00:00:01.0312500
BasePriority : 8
ExitCode :
HasExited : False
ExitTime :
Handle : 784
MachineName : .
MainWindowHandle : 1705674
MainWindowTitle : Документ1 - Microsoft Word
MainModule : System.Diagnostics.ProcessModule (WINWORD.EXE)
MaxWorkingSet : 1413120
MinWorkingSet : 204800
Modules : {System.Diagnostics.ProcessModule (WINWORD.EXE), System.Diagnostics.ProcessModule (ntdll.d
ll), System.Diagnostics.ProcessModule (kernel32.dll), System.Diagnostics.ProcessModule (MS
VCR90.dll)...}
NonpagedSystemMemorySize : 12680
NonpagedSystemMemorySize64 : 12680
PagedMemorySize64 : 19517440
PagedSystemMemorySize : 222128
PagedSystemMemorySize64 : 222128
PeakPagedMemorySize : 25866240
PeakPagedMemorySize64 : 25866240
PeakWorkingSet : 38371328
PeakWorkingSet64 : 38371328
PeakVirtualMemorySize : 259362816
PeakVirtualMemorySize64 : 259362816
PriorityBoostEnabled : True
PrivateMemorySize64 : 19517440
PrivilegedProcessorTime : 00:00:00.3593750
ProcessName : WINWORD
ProcessorAffinity : 3
Responding : True
SessionId : 0
StartInfo : System.Diagnostics.ProcessStartInfo
StartTime : 28.07.2015 8:37:22
SynchronizingObject :
Threads : {3076, 2168, 3780, 4044...}
UserProcessorTime : 00:00:00.6718750
VirtualMemorySize64 : 252293120
EnableRaisingEvents : False
StandardInput :
StandardOutput :
StandardError :
WorkingSet64 : 31969280
Site :
Container :
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39017869
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKEА PowerShell юзать не пробовали?
Нет. Спасибо, попробую.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39018096
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже HWND появился только в Word 2013 (((

До этого советуют искать окна через FindWindow

Но что будет при разных именах пользователя, не знаю.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39019954
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKE ,

PowerShell тоже не видит название открытого документа Word у других пользователей, как tasklist так и get-process


Leonid KudryavtsevПохоже HWND появился только в Word 2013 (((

До этого советуют искать окна через FindWindow

Но что будет при разных именах пользователя, не знаю.
По FindWindow тоже падает на ошибке при выполнении комманды:
Код: plsql
1.
result := ole2.get_obj_property(happlication, 'FindWindow'); -- и для hwindow и для hdocument


тоже самое пробовал и get_OBJ_ и get_CHAR_ и get_NUM_ - всё падает на ошибке.

также добавлял два входящих параметра, но всё-равно - ошибка:
Код: plsql
1.
2.
3.
4.
args := ole2.create_arglist;
ole2.add_arg (args, 0); 
ole2.add_arg (args, 0); 
result := ole2.get_obj_property(happlication, 'FindWindow', args); -- и для hwindow и для hdocument
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39021858
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал инет. Проникся проблемой.

1. Собственно Subj до Word 2013 по простому никак не решается. MS уроды, для MS Excel соответствующие свойства добавили еще в 2002, в MS Word добавляют только что (и урезанно) (((

Получить доступ к окнам (GetWindowText Win API function) созданных другим пользователем не дает система безопасности. В Инет уверют, что это никак не обойти.
Всегда можно создать свое приложение "прокладку" запускающееся под другим пользователем и уже оттуда создавать приложение. Для топик-стартера это явно сильно сложно. Ну и для данной задачи, это из пушки по воробьям


2. Зачем у топик стартера такая порнография с пользователями - я понять не могу.

Т.ч., на мой взгляд, правильнее разобраться с порнографией с пользователями. Что бы и Word и приложение работало под одним пользователем.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39021878
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoRПланировщиком заданий запускать форму с помощью bat файла, которая в свою очередь открывает Word по средством ole2, заполняет документ и сохраняет его.
...
Word с помощью
Код: plsql
1.
OLE2.CREATE_OBJ('Word.Application');


открывается под не постоянным пользователем и в результате иногда появляются проблемы с последующей работой. Т.е. в разное время ворд открыт под разными пользователями.

Так же проникся (((

Разобраться явно можно.

Но доки на данную тему достаточно сложны. Сходу никак док MS не нашел, а _современных_ книжек у меня нет. Раньше, одновременно работать под разными пользователями было банально нельзя. Т.ч. такой проблемы и не возникало. Сейчас, действительно, позволяют работать с OLE объектами запущенными под другим пользователм. Каким образом - мне не понятно. Возможно, что-то типа DCOM'а.

Теоретически, на C можно попытаться самому запустить процесс MS Word и потом получить от него IDispatch (через AccessibleObjectFromWindow,WindowFromAccessibleObject ). Т.е. изобразить OLE2.CREATE_OBJ самому. Но это нужно использовать C

И теоретически. По докам не все ясно. Не понятно насколько это прикручивается к OLE2 package (подозреваю, что Handle объекто банальная ссылка/адрес IDispatch). Так же не ясно с какой версии MS Office поддерживает MS Active Accessibility User Interface Services.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39021883
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется. есть третье решение:

Написать макрос в Word'е, который спрашивает свой PID и возвращает его.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39023012
Al*GatoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevРазумеется. есть третье решение:

Написать макрос в Word'е, который спрашивает свой PID и возвращает его.
эта мысль меня тоже посещала, но такое решение будет не достаточным в том случаи когда WORD зависнет не выполнив этот макрос.

Хотя так как альтернатив особо в ближайшее время не предвидится, может быть буду использовать этот вариант как страховочный когда не смогу определить PID который добавился во время создания документа с помощью tasklist.
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39023055
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoR,

м.б. на VBScript решение найдете..

"убить" все процессы winword.exe
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
strComputer = "."
Set objWMIService = GetObject _
    ("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'winword.exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next


покажет PID,CommandLine,CreationDate процесса winword.exe
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Process Where Name = 'winword.exe'")
For Each objProcess in colProcessList 
	MsgBox 	"PID: " & objProcess.ProcessID & VBNewLine & _
			"CommandLine: " & objProcess.CommandLine & VBNewLine & _
			"CreationDate: " & objProcess.CreationDate
Next


т.е., - как вариант фильтровать в запросе по CreationDate , CommandLine - название документа

Win32_Process class

или "убивать" зависшие процессы How to Terminate Unwanted MS Office Processes
...
Рейтинг: 0 / 0
OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
    #39024522
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al*GatoRLeonid KudryavtsevРазумеется. есть третье решение:

Написать макрос в Word'е, который спрашивает свой PID и возвращает его.
эта мысль меня тоже посещала, но такое решение будет не достаточным в том случаи когда WORD зависнет не выполнив этот макрос.

Хотя так как альтернатив особо в ближайшее время не предвидится, может быть буду использовать этот вариант как страховочный когда не смогу определить PID который добавился во время создания документа с помощью tasklist.
Я болдом и веделил, что по раздумею вообще безотказный метод.

1. Создает Word.Application
2. Загружаем туда наш документ с макросом
3. Получаем PID процесса и сохраняем его
4. Закрываем документ (мавр сделал свое дело)
5....990. Работаем как обычно.... Ничего не меняем...
991. Закрываем Word.
992. Ждем 10-15 сек и если не закрылся прибиваем его намертво.

Понятное дело, что при такой реализации, отсутствие resource leak'а при длительной работе никто не обещает.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / OLE2.CREATE_OBJ('Word.Application') как узнать ID ПРОЦЕССА (PID) созданного документа?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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