Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot, Rio (+5 невидимых)

 eXeL@B —› Программирование —› ожидание завершения процесса
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 26 июля 2009 23:15
· Личное сообщение · #1

Может кто программку накидать, чтобы к процессу по имени аттачилась и ждала пока он завершится
после завершения отправить комп в спящий режим (WinXP)

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 26 июля 2009 23:30
· Личное сообщение · #2

Прогу накидывать лень, но функа WaitForSingleObject должна помочь.



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 27 июля 2009 00:10 · Поправил: Valemox
· Личное сообщение · #3

Azur1d пишет:
но функа WaitForSingleObject должна помочь

+1 Точна, с параметром INFINITE - будет ожидать завершения.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 27 июля 2009 01:06
· Личное сообщение · #4

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 27 июля 2009 01:15
· Личное сообщение · #5

Isaev пишет:
какие апишки ещё для всего этого будут необходимы?

В части поиска вот примерчик на делфе. Не помню где нашел.
Code:
  1. function KillProcessByExeName(ExeFileName: string): integer;
  2. const PROCESS_TERMINATE=$0001;
  3. var ContinueLoop    : BOOL;
  4.     FSnapshotHandle : THandle;
  5.     FProcessEntry32 : TProcessEntry32;
  6.     hProcess        : Cardinal;
  7. begin
  8.   result := 0;
  9.   FSnapshotHandle        := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  10.   FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  11.   ContinueLoop           := Process32First(FSnapshotHandle, FProcessEntry32);
  12.   ExeFileName            := UpperCase(ExeFileName);
  13.   while integer(ContinueLoop) <> 0 do
  14.   begin
  15.     if ( (UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = ExeFileName) or
  16.          (UpperCase(FProcessEntry32.szExeFile) = ExeFileName)
  17.        ) then
  18.     begin
  19.       hProcess := OpenProcess(PROCESS_TERMINATE, False, FProcessEntry32.th32ProcessID);
  20.       Result   := Integer(TerminateProcess(hProcess, 0));
  21.     end;
  22.     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  23.   end;
  24.   CloseHandle(FSnapshotHandle);
  25. end;





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 27 июля 2009 02:04
· Личное сообщение · #6

В спящий режим сам можешь доделать

Code:
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4. include c:\masm32\include\windows.inc
  5. includelib c:\masm32\lib\user32.lib
  6. includelib c:\masm32\lib\comctl32.lib
  7.    include c:\masm32\include\user32.inc
  8.    include c:\masm32\include\kernel32.inc
  9.    includelib c:\masm32\lib\kernel32.lib
  10.    include c:\masm32\include\comctl32.inc
  11. includelib c:\masm32\lib\wsock32.lib
  12. include c:\masm32\include\wsock32.inc
  13.    include c:\masm32\include\gdi32.inc
  14.    includelib c:\masm32\lib\gdi32.lib
  15.    include c:\masm32\include\shell32.inc
  16.    includelib c:\masm32\lib\shell32.lib
  17.    includelib c:\masm32\lib\ws2_32.lib
  18.   include c:\masm32\include\advapi32.inc
  19.   includelib c:\masm32\lib\advapi32.lib
  20.   includelib \masm32\lib\winmm.lib
  21.  
  22. include c:\masm32\include\Comctl32.inc
  23. includelib c:\masm32\lib\Comctl32.lib
  24.  
  25. include \masm32\include\masm32rt.inc
  26.  
  27. run_synch_process PROTO :DWORD, :DWORD
  28. ;The timeout parameter must be set to INFINITE or the process ceases to be synchronous once the timeout has lapsed.
  29. RUN_SYNCH_PROCESS STRUCT
  30.         priority dd HIGH_PRIORITY_CLASS       ; priority setting
  31.         timeout  dd INFINITE                  ; timeout interval
  32.         rvcreate dd ?                   ; create process return value
  33.         exitcode dd ?                   ; run process exit code
  34.         rvwait   dd ?                   ; wait return value
  35. RUN_SYNCH_PROCESS ENDS
  36. ;Set the priority and timeout in the structure BEFORE passing it to the procedure.
  37. ;HIGH_PRIORITY_CLASS Specify this class for a process that performs
  38. ;time-critical tasks that must be executed immediately. The threads of the
  39. ;process preempt the threads of normal or idle priority class processes. An
  40. ;example is Windows Task List, which must respond quickly when called by the
  41. ;user, regardless of the load on the operating system. Use extreme care when
  42. ;using the high-priority class, because a high-priority class application can
  43. ;use nearly all available CPU time.
  44. ;IDLE_PRIORITY_CLASS Specify this class for a process whose threads run only
  45. ;when the system is idle. The threads of the process are preempted by the
  46. ;threads of any process running in a higher priority class. An example is a
  47. ;screen saver. The idle-priority class is inherited by child processes.
  48. ;NORMAL_PRIORITY_CLASS Specify this class for a process with no special
  49. ;scheduling needs.
  50. ;REALTIME_PRIORITY_CLASS Specify this class for a process that has the
  51. ;highest possible priority. The threads of the process preempt the threads of
  52. ;all other processes, including operating system processes performing important
  53. ;tasks. For example, a real-time process that executes for more than a very
  54. ;brief interval can cause disk caches not to flush or cause the mouse to be
  55. ;unresponsive.
  56. ;«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
  57. .data?
  58. .data
  59. RUN RUN_SYNCH_PROCESS <>
  60. filename db "hdd2.exe",0
  61. .code
  62. start:
  63. invoke run_synch_process,addr filename,addr RUN
  64. invoke ExitProcess,0
  65. ;align 4
  66.  
  67. run_synch_process proc lpfilename:DWORD,lpstruct:DWORD
  68.  
  69.     LOCAL priority  :DWORD
  70.     LOCAL timeout   :DWORD
  71.     LOCAL rvcreate  :DWORD       ; create process return value
  72.     LOCAL exitcode  :DWORD       ; run process exit code
  73.     LOCAL rvwait    :DWORD       ; wait return value
  74.     LOCAL xc        :DWORD
  75.     LOCAL st_info   :STARTUPINFO
  76.     LOCAL pr_info   :PROCESS_INFORMATION
  77.  
  78.     mov eax, lpstruct
  79.     mov ecx, (RUN_SYNCH_PROCESS PTR [eax]).priority
  80.     mov priority, ecx
  81.     mov ecx, (RUN_SYNCH_PROCESS PTR [eax]).timeout
  82.     mov timeout, ecx
  83.  
  84.   ; ---------------------
  85.   ; zero fill STARTUPINFO
  86.   ; ---------------------
  87.     mov ecx, 17                 ; 68 bytes SIZEOF STARTUPINFO
  88.     lea edx, st_info
  89.     xor eax, eax
  90.   @@:
  91.     mov [edx], eax
  92.     add edx, 4
  93.     sub ecx, 1
  94.     jnz @B
  95.  
  96.     mov st_info.cb, 68          ; set the structure size member
  97.  
  98.     invoke CreateProcess,NULL,lpfilename,NULL,NULL,
  99.                          NULL,NULL,NULL,NULL,
  100.                          ADDR st_info,
  101.                          ADDR pr_info
  102.     mov rvcreate, eax
  103.  
  104.     test eax, eax               ; if CreateProcess fails
  105.     jz quit
  106.  
  107.     invoke SetPriorityClass,pr_info.hProcess,priority
  108.  
  109.     invoke WaitForSingleObjectEx,pr_info.hProcess,timeout,0
  110.     mov rvwait, eax
  111.  
  112.     invoke GetExitCodeProcess,pr_info.hProcess,ADDR exitcode
  113.  
  114.     invoke CloseHandle, pr_info.hThread
  115.     invoke CloseHandle, pr_info.hProcess
  116.  
  117.     
  118.     mov eax, lpstruct
  119.  
  120.     mov ecx, rvcreate
  121.     mov (RUN_SYNCH_PROCESS PTR [eax]).rvcreate, ecx
  122.     mov ecx, exitcode
  123.     mov (RUN_SYNCH_PROCESS PTR [eax]).exitcode, ecx
  124.     mov ecx, rvwait
  125.     mov (RUN_SYNCH_PROCESS PTR [eax]).rvwait, ecx
  126.  
  127.     mov eax, rvwait
  128.     mov ecx, exitcode
  129.  
  130.     ret
  131.  
  132.   quit:
  133.     mov eax, lpstruct
  134.  
  135.     mov (RUN_SYNCH_PROCESS PTR [eax]).rvcreate, 0
  136.     mov (RUN_SYNCH_PROCESS PTR [eax]).exitcode, 0
  137.     mov (RUN_SYNCH_PROCESS PTR [eax]).rvwait, 0
  138.  
  139.     ret
  140.  
  141. run_synch_process endp
  142.  
  143. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
  144.  
  145. end start


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 111.1 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 27 июля 2009 06:08
· Личное сообщение · #7

Для спящего и ждущего режима можно воспользоваться SetSystemPowerState, тока сначала нужно разрешить использование спящего режима в управлении электропитанием

-----
The truth is out of there...





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 27 июля 2009 14:47
· Личное сообщение · #8

Isaev на вот , накатал по быстрому , 90 кб звук большой но это для веса. ХЗ работает или нет , не тестил. Есть для безопасности 10 секундная пауза , можно отменить перезагрузку или стэндбай, если не успел то происходит выполнение. Также можно по таймеру поставить задачу или другие функции.

3121_27.07.2009_CRACKLAB.rU.tgz - Kibernator.exe

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 27 июля 2009 15:27
· Личное сообщение · #9

Kibernator Mak!
работает, теперь даже стимул отбил самому писать
сделай к процессам текущим аттач уж до кучи

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 111.1 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 27 июля 2009 22:18
· Личное сообщение · #10

В смысле чтобы ждала пока несколько определенных процессов завершатся? Тогда WaitForMultipleObjects и передавай указатель на массив с pID'ами процессов, ну и длину не забудь указать

-----
The truth is out of there...




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 27 июля 2009 22:21
· Личное сообщение · #11

Lumen
> Тогда WaitForMultipleObjects и передавай указатель на массив с pID'ами процессов
С идентификатором ничего нельзя сделать, манипуляции выполняются с хэндлами. Нужно открыть процессы и ждать на массиве описателей.




Ранг: 111.1 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 28 июля 2009 01:02
· Личное сообщение · #12

Упс... точно, попутался. разумеется все манипуляции с хэндлами полученными от OpenProcess либо CreateProcess из структуры PROCESS_INFORMATION

-----
The truth is out of there...





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 28 июля 2009 11:31 · Поправил: mak
· Личное сообщение · #13

Уже перешли к мульти событиям, вроде это не имеллось ввиду , но тоже пригодится. Можно на ночь расчеты ставить , но что если программа сторонняя , она закончит работу и не завершится. Много прог которые не имеют таймера. Как регулировать такие проги

Clerk Когда ты мне расскажешь о более глубоком устройстве кернел ? Оч надо.

Isaev Пологаю ты в отпуске Так вот я тоже))) напишу как комп привезут , аттач можно по раззному сделать. Как лучше не знаю.

ЗЫ. sniper раз пошол вопрос о просветленнии то нужно знать . что без мастера полной реализации не достичь , все уже сто раз прочитано, думай что пишешь. А модераторов прошу удалить пост , товарища sniper. Пусть сначала общаться научится.

SLV пишет:
sniper прав, хуесосить знания не вариант если хочешь сделать чтото полезное. Надо изучать самому. Интересно кто из модеров удалил адекватный пост.

Ты читал ? За такие адекватные посты в реале бьют сразу в лицо. Читай зомбу лучше по поводу вирусных драк, и самоизучении. Много найдешь по поводу своего поста. А твой пост нужно тоже улалить.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 28 июля 2009 15:04
· Личное сообщение · #14

и вот эту 5 раз
www.infanata.org/computers/prog/1146109620-ispolzovanie-microsoft-windows-driver-mode.html



Ранг: 69.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 28 июля 2009 20:11
· Личное сообщение · #15

Ratinsh,
дык на www.infanata.org надо регистрироваться, чтобы ссылку увидеть.
Тогда уж лучше progbook.ru/c/450-ispolzovanie-microsoft-windows-driver-model.html. Там на нескольких зеркалах и сама книга, и исходники.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 июля 2009 23:35 · Поправил: Isaev
· Личное сообщение · #16

mak пишет:
пологаю ты в отпуске

в общем да ... да мне не к спеху
Lumen пишет:
В смысле чтобы ждала пока несколько определенных процессов завершатся?

не, несколько это перебор, т.к. изначально вроде бы не надо, да и не ыло практической надобности,
но интересно... надо попробовать
Ratinsh - гений по литературе! Всегда вовремя и очень в тему. спасибо

PS: SLV - ni rasu ne prav! Tebe baby chtoli ne dajut, chto ty takoj scuko sloj?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 29 июля 2009 00:19
· Личное сообщение · #17

sniper прав, хуесосить знания не вариант если хочешь сделать чтото полезное. Надо изучать самому. Интересно кто из модеров удалил адекватный пост.

-----
Shalom ebanats!



 eXeL@B —› Программирование —› ожидание завершения процесса
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати