Автор | Сообщение |
|
| |
Пост N: 381
Зарегистрирован: 17.06.10
|
|
Отправлено: 15.12.15 11:41. Заголовок: GetExitCodeProcess
Не пользовал ли кто ф-ю GetExitCodeProcess для определения завершения процесса (напр. загрузки Word) ?
|
|
|
Ответов - 13
[только новые]
|
|
|
| |
Пост N: 5407
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.12.15 13:30. Заголовок: fil Поиск на форуме..
fil Поиск на форуме по GetExitCodeProcess дает результаты , возможно они помогут.
|
|
|
|
| |
Пост N: 382
Зарегистрирован: 17.06.10
|
|
Отправлено: 15.12.15 13:43. Заголовок: Не, не помогут, я см..
Не, не помогут, я смотрел. После ShellExecute через WMI нахожу дескриптор последнего запущенного процесса (Word) и хочу в цикле отследить момент завершения его полной загрузки. Да вот не могу понять чего возвращает GetExitCodeProcess и какой смысл в ее втором параметре ?
|
|
|
|
| |
Пост N: 5408
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.12.15 14:03. Заголовок: Гуглил ? http://netc..
|
|
|
|
| |
Пост 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 Можно выловить событие - начало загрузки нужного процесса, как только это событие исчезло - значит процесс загружен
|
|
|
|
| |
Пост N: 383
Зарегистрирован: 17.06.10
|
|
Отправлено: 15.12.15 15:25. Заголовок: Haz Возвращает сос..
Haz цитата: | Возвращает состояние завершения процесса ( а не завершения загрузки ) |
| где-то я вычитал, что состояние загрузки, ну нет так нет Я, собственно, это все затеял чтобы получать с окна Word'a хендл сообщения о Защищенном просмотре и на нем програмно кликать, а вот поймать никак не могу. Можно ли, зная дескриптор процесса, сделать список его дочерних окон ?
|
|
|
|
| |
Пост 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 ); }
|
|
|
|
| |
Пост N: 722
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.12.15 17:19. Заголовок: Haz пишет: а вот п..
Haz пишет: цитата: | а вот поймать никак не могу. |
| Попробуй поймать через GetWindowText() если у окна есть титла или в примерах было EnumChild() которая получает подчиненные окна ( GET поля , LABEL , кнопки и пр. элементы на форме ) и можно текст найти в и них
|
|
|
|
| |
Пост N: 384
Зарегистрирован: 17.06.10
|
|
Отправлено: 16.12.15 00:28. Заголовок: EnumChildWindows() и..
EnumChildWindows() и GetWindowText() это первое, что приходит в голову. Эт я уже все пробовал. Мистика
|
|
|
|
| |
Пост N: 723
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.12.15 10:54. Заголовок: fil пишет: Эт я уже..
fil пишет: цитата: | Эт я уже все пробовал. Мистика |
| а в чем проблема то , вроде эти работают нормально EnumChildWindows() и GetWindowText() Если я правильно понял , тебе поймать окно с сообщением надо ? Скрин кинь, я у себя в такой режим Excel загнать не смог PS Вроде писал что через OLE нормально работает , почему бы не использовать OLE для открытия ?
|
|
|
|
| |
Пост 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 компактнее
|
|
|
|
| |
Пост 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 нужно программно кликнуть
|
|
|
|
|
| |
Пост N: 386
Зарегистрирован: 17.06.10
|
|
Отправлено: 16.12.15 12:47. Заголовок: Ужо поиграюсь, но по..
Ужо поиграюсь, но потом, сейчас вернулся к OLE А можно ли поймать момент окончания загрузки (видимо это когда в память перестает писать) приложения пущенного через Shellexecute ? В инете слов про это много, но ничего конкретного
|
|
|
|
| |
Пост N: 725
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.12.15 13:20. Заголовок: fil пишет: В инете..
fil пишет: цитата: | В инете слов про это много, но ничего конкретного |
| Да, там в основном предлагают ловить по прекращению увеличения памяти выделяемой процессу , или по падению загрузки ЦП на процесс. Другого и нормального способа я не видел PS у служб есть состояния Running, Stopped, Pending. У процессов к сожалению нет
|
|
|
|