Автор
|
Тема: Отследить процесс, породивший окно...
|
Molibden |
опубликован 28-05-2001 13:03 MSK
Доброго всем времени суток,Подскажите, плз, как отследить активность процесса из своей проги. Скажем, активизировалось нужное окно, например, по названию. Определили ID процесса, его породившего, при помощи GetWindowProcessID. А дальше? Какими функциями просматривать process list, чтобы засечь, когда процесс будет завершён? Спасибо
|
vladil
|
опубликован 29-05-2001 20:07 MSK
Try sample SPY in msdn |
Molibden
|
опубликован 31-05-2001 00:16 MSK
2vladil: thanx, но это не совсем то. Более подходящий фрагмент кода нашёл в исходниках BO2Ktypedef struct __threadinfo { DWORD dwThreadID; struct __threadinfo *next; } THREADINFO; typedef struct __procinfo { DWORD dwProcID; THREADINFO *pThread; char svApp[MAX_PATH+1]; struct __procinfo *next; } PROCESSINFO; PROCESSINFO *CreateProcListSnapshot(char *svName) { HANDLE hSnap; PROCESSINFO *pProcCur; THREADINFO *pThreadCur; PROCESSINFO phd; PROCESSENTRY32 pe; THREADENTRY32 te; if(svName!=NULL) { if(svName[0]=='\0') svName=NULL; } if(g_bIsWinNT
|
Molibden
|
опубликован 31-05-2001 00:43 MSK
Sorry 2All, не учёл ограничений на размер msg. Не вижу всего запостенного кода :( |
Demo_S
|
опубликован 31-05-2001 17:17 MSK
2Molibden Тут вроде нет ограничения на размер месаги, просто символ "две вертикальные черты" форум обрабатывает как конец месаги....А вообще, приведенного куска я думаю достаточно, тчобы взять сурсы Bo2k, найти это место и разобратся. |
Wander
|
опубликован 01-06-2001 06:08 MSK
#include <tlhelp32.h> PROCESSENTRY32 PC32; HWND hnd; hnd=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if ((int)hnd==-1) return; PC32.dwSize=sizeof(PC32); int i=Process32First(hnd,&PC32); while (i) { // Ваш код // PID процесса берётся из PC32.th32ProcessID; // Имя файла через ExtractFileName(PC32.szExeFile); ListBox1->Items->Add ((AnsiString)PC32.szExeFile); i=Process32Next(hnd,&PC32); }; CloseHandle(hnd);так получаешь лист процессов, что бы дождатся завершения процесса, вот так кажется: while(true) { i=WaitForSingleObjectEx(PC32.th32ProcessID,INFINITE,FALSE); if((i==0) |