powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать что процесс находится в состоянии ожидания?
8 сообщений из 8, страница 1 из 1
Как узнать что процесс находится в состоянии ожидания?
    #32412132
dGrichine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из своего приложения запускаю внешнюю задачу.
Внешняя задача, по окончании своей работы, не завершается автоматически, а остается в состоянии ожидания действий пользователя.

Необходимо определить, с использованием функций WinAPI, что процесс находится в состоянии ожидания и, следовательно, его работу можно завершать.

Может кто подскажет как это узнать,
через CPU usage/time или еще какие-нибудь косвенные методы...

Буду рад любому совету.

PS. Знаю, ProcessID, Handle Главного окна приложения
...
Рейтинг: 0 / 0
Как узнать что процесс находится в состоянии ожидания?
    #32412145
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитайте все про WaitForInputIdle(). Не совсем точно, но может подойдет?
...
Рейтинг: 0 / 0
Как узнать что процесс находится в состоянии ожидания?
    #32412342
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое что пришло в голову:
- Процесс должен где-то внешне выложить свой ID;
- Он же должен пустить сред и выложит его ID тоже;
- Когда процесс "встанет в состояние ожидания"(так и не понял, что это там) убить этот сред.
а тепер зачем такие трудности:
- Потом снаружи сделать снимок с номером этого процесса.
- И пробежаться по его средам, если среда с нужным номером нет - процесс стоит.

Завтра может ещё что придумаю :)
...
Рейтинг: 0 / 0
Как узнать что процесс находится в состоянии ожидания?
    #32412523
dGrichine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного поясню...

необходимо из своего приложения произвести печать документа (RTF, DOC)
Для печати используется WordViewer97, вот только он не может печатать документ с использованием командной строки, как это делал WordViewer95 (ключ /p), а WV95 глючит на таблицах с объединением ячеек
Печать данных документов с использованием Ole.Automation не подходит так как Word слишком долго грузится

Создаю процесс с запуском WViewer97 myfile.doc, жду пока он загрузится, затем посылаю ему комбинации нажатия клавиш Ctrl+P Enter с использованием keybd_event(), кстати, послать сообщения о нажатии клавиш с использованием SendMessage() не удалось, WV97 на них не реагирует, какому hWnd слать эти сообщения, так и не понял, как не ковырял Spy

WordViewer печатает и мне надо его закрыть, по окончании печати... в связи с тем что документы бывают разного объема и печать может длиться неопределенное время, делать просто sleep(n) неоптимально.

Необходимо опеределить, что печать документа завершена и можно безболезненно закрыть WordViewer
...
Рейтинг: 0 / 0
Как узнать что процесс находится в состоянии ожидания?
    #32412587
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю подойти с другого конца - смотреть задания на принтере,
если их нет - то и убивать процесс.

Вот примерчик из МСДН
автор BOOL ListJobsForPrinter( LPTSTR szPrinterName )
{

HANDLE hPrinter;
DWORD dwNeeded, dwReturned, i;
JOB_INFO_1 *pJobInfo;

// You need a printer handle, open the printer
if( ! OpenPrinter( szPrinterName, &hPrinter, NULL ) )
return FALSE;

// First you call EnumJobs() to find out how much memory you need
if( ! EnumJobs( hPrinter, 0, 0xFFFFFFFF, 1, NULL, 0, &dwNeeded,
&dwReturned ) )
{
// It should have failed, but if it failed for any reason other
// than "not enough memory", you should bail out
if( GetLastError() != ERROR_INSUFFICIENT_BUFFER )
{
ClosePrinter( hPrinter );
return FALSE;
}
}
// Allocate enough memory for the JOB_INFO_1 structures plus
// the extra data - dwNeeded from the previous call tells you
// the total size needed
if( (pJobInfo = (JOB_INFO_1 *)malloc( dwNeeded )) == NULL )
{
ClosePrinter( hPrinter );
return FALSE;
}
// Call EnumJobs() again and let it fill out our structures
if( ! EnumJobs( hPrinter, 0, 0xFFFFFFFF, 1, (LPBYTE)pJobInfo,
dwNeeded, &dwNeeded, &dwReturned ) )
{
ClosePrinter( hPrinter );
free( pJobInfo );
return FALSE;
}
// You're done with the printer handle, close it
ClosePrinter( hPrinter );

// dwReturned tells how many jobs there are
// Here, you'll simply display the number of jobs found
printf( "%d jobs\n", dwReturned );
// It's easy to loop through the jobs and access each one
for(i=0;i<dwReturned;i++)
{
// pJobInfo is a JOB_INFO_1 struct for that job
// so here you could do whatever you want for each job
printf( "[%d] [%s]\n", pJobInfo.JobId, pJobInfo.pDocument );
}

// Clean up
free( pJobInfo );
return TRUE;
}
...
Рейтинг: 0 / 0
Как узнать что процесс находится в состоянии ожидания?
    #32413019
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добалю от себя.

Список джобов принтера лучше ещё проверять на овнера:
JOB_INFO_1.pUserName
дабы не ждать чужих заданий
и на состояние
JOB_INFO_1.Status == JOB_STATUS_PRINTING
дабы не ждать своё :)

А SendMessage возможно просто игнорируется самим WordViewеr'ом.
...
Рейтинг: 0 / 0
Как узнать что процесс находится в состоянии ожидания?
    #32414325
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на всякий случай WaitForSingleObject
http://forum.codenet.ru/showthread.php?threadid=8601

Но в твоем случае это вряд-ли поможет.

...
Рейтинг: 0 / 0
Как узнать что процесс находится в состоянии ожидания?
    #32416601
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, чтоб вам пусто.
У меня случилась точь такая же задача

Тоже принтер.
Тока не процесс, а поток.
Так я делаю проверку на наличие определённого окна в потоке.
Если окна нет, можно убивать.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать что процесс находится в состоянии ожидания?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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