On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 381
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 15.12.15 11:41. Заголовок: GetExitCodeProcess


Не пользовал ли кто ф-ю GetExitCodeProcess для определения завершения процесса (напр. загрузки Word) ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 13 [только новые]


администратор




Пост N: 5407
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.15 13:30. Заголовок: fil Поиск на форуме..


fil
Поиск на форуме по GetExitCodeProcess дает результаты , возможно они помогут.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 382
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 15.12.15 13:43. Заголовок: Не, не помогут, я см..


Не, не помогут, я смотрел. После ShellExecute через WMI нахожу дескриптор последнего запущенного процесса (Word) и хочу в цикле отследить момент завершения его полной загрузки. Да вот не могу понять чего возвращает GetExitCodeProcess и какой смысл в ее втором параметре ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5408
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.15 14:03. Заголовок: Гуглил ? http://netc..

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 718
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.12.15 14:23. Заголовок: fil пишет: чего воз..


fil пишет:

 цитата:
чего возвращает GetExitCodeProcess


Возвращает состояние завершения процесса ( а не завершения загрузки )
http://www.vsokovikov.narod.ru/New_MSDN_API/Process_thread/fn_getexitcodeprocess.htm

Не уверен но можно попробовать выловить окончание загрузки через тот же WMI используя __instancecreationevent
Можно выловить событие - начало загрузки нужного процесса, как только это событие исчезло - значит процесс загружен

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 383
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 15.12.15 15:25. Заголовок: Haz Возвращает сос..


Haz


 цитата:
Возвращает состояние завершения процесса ( а не завершения загрузки )



где-то я вычитал, что состояние загрузки, ну нет так нет

Я, собственно, это все затеял чтобы получать с окна Word'a хендл сообщения о Защищенном просмотре и на нем програмно кликать, а вот поймать никак не могу.
Можно ли, зная дескриптор процесса, сделать список его дочерних окон ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 721
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.12.15 16:57. Заголовок: fil пишет: Можно ли..


fil пишет:

 цитата:
Можно ли, зная дескриптор процесса, сделать список его дочерних окон ?


можно , примерно так ( первое что пришло в голову )
 
aWin := EnumWindows()
nLen := len( aWin )
for n := 1 to nLen
if GetWindowThreadProcessID(aWin[n]) == hProcess
тут те самые окна
end
end


 
//GetWindowThreadProcessId (hWnd, @nThread, @nProcessID)
HB_FUNC ( GETWINDOWTHREADPROCESSID )
{
HWND hWnd = (HWND) hb_parnl (1);
DWORD nThread, nProcessID;

nThread = GetWindowThreadProcessId (hWnd, &nProcessID);

if ( HB_ISBYREF(2) )
hb_storni (nThread, 2);
if ( HB_ISBYREF(3) )
hb_storni (nProcessID, 3);
hb_retnl( nProcessID );
}



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 722
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.12.15 17:19. Заголовок: Haz пишет: а вот п..


Haz пишет:

 цитата:
а вот поймать никак не могу.


Попробуй поймать через GetWindowText() если у окна есть титла или в примерах было EnumChild()
которая получает подчиненные окна ( GET поля , LABEL , кнопки и пр. элементы на форме ) и можно текст найти в и них


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 384
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 16.12.15 00:28. Заголовок: EnumChildWindows() и..


EnumChildWindows() и GetWindowText() это первое, что приходит в голову. Эт я уже все пробовал. Мистика


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 723
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.12.15 10:54. Заголовок: fil пишет: Эт я уже..


fil пишет:

 цитата:
Эт я уже все пробовал. Мистика


а в чем проблема то , вроде эти работают нормально EnumChildWindows() и GetWindowText()
Если я правильно понял , тебе поймать окно с сообщением надо ?
Скрин кинь, я у себя в такой режим Excel загнать не смог

PS Вроде писал что через OLE нормально работает , почему бы не использовать OLE для открытия ?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 385
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 16.12.15 11:42. Заголовок: Я же писал выше, что..


Я же писал выше, что в офиссе 2010 стоят всягие галочки на тему защищенного просмотра файлов из инета. У меня docx-файлы живут на сервере и обращаюсь к ним через IP. Т.е. при открытии такого файла через Shellexecute он(файл) воспринимается как инетовский и в Word'e, под заголовком, вылезает такя противная желтая строка "Защищенные просмотр..."
Вот это окно я и хотел поймать

Попробовал так:
hhh:=FindWindow("OpusApp" , nil ) - ловится класс глобального окна Word'a
FindWindowEx( hhh, 0, "NetUIHWND" , nil ) - а вот класс этой желтой строки на Word'e не
ловится

FindWindow("NetUIHWND" , nil ) - так тоже не ловится

Т.е. получается это сообщение(окно) не принадлежит Word, но и не является отдельным приложением

Можно, и к OLE вернуться просто через Shellexecute компактнее


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 724
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.12.15 12:03. Заголовок: fil пишет: FindWind..


fil пишет:

 цитата:
FindWindowEx( hhh, 0, "NetUIHWND" , nil ) - а вот класс этой желтой строки на Word'e не
ловится
FindWindow("NetUIHWND" , nil ) - так тоже не ловится
Т.е. получается это сообщение(окно) не принадлежит Word, но и не является отдельным приложением


Может не то ловишь, возможно нужно ловить "Static" элемент Child окна с сообщением .
Попробуй посмотреть через Microsoft Spy++ что это за окно, кому принадлежит и пр. ( с этого и нужно начать )

Скорее всего ловить нужно так
1 по hWin главного окна получить все массив Child заполненный данными о классе через ENUMCHILDWINDOWS
2 в массиве Child найти нужный ClassName и Caption -> получить hWinChild
Далее на этом hWinChild нужно программно кликнуть





Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 386
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 16.12.15 12:47. Заголовок: Ужо поиграюсь, но по..


Ужо поиграюсь, но потом, сейчас вернулся к OLE

А можно ли поймать момент окончания загрузки (видимо это когда в память перестает писать) приложения пущенного через Shellexecute ? В инете слов про это много, но ничего конкретного

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 725
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.12.15 13:20. Заголовок: fil пишет: В инете..


fil пишет:

 цитата:
В инете слов про это много, но ничего конкретного


Да, там в основном предлагают ловить по прекращению увеличения памяти выделяемой процессу , или по падению загрузки ЦП на процесс.
Другого и нормального способа я не видел
PS у служб есть состояния Running, Stopped, Pending. У процессов к сожалению нет

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 35
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет