![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Люда |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 24.4.2002 Репутация: нет Всего: нет |
Как программно узнать какие процессы запущены на локальном компьютере, или же запущен данный процесс или нет
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
RTFM неплохо бы иногда. Прямо оттуда.
#include <windows.h> #include <tlhelp32.h> #include <stdio.h> BOOL GetProcessList () { HANDLE hProcessSnap = NULL; BOOL bRet = FALSE; PROCESSENTRY32 pe32 = {0}; // Take a snapshot of all processes in the system. hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return (FALSE); // Fill in the size of the structure before using it. pe32.dwSize = sizeof(PROCESSENTRY32); // Walk the snapshot of the processes, and for each process, // display information. if (Process32First(hProcessSnap, &pe32)) { DWORD dwPriorityClass; BOOL bGotModule = FALSE; MODULEENTRY32 me32 = {0}; do { bGotModule = GetProcessModule(pe32.th32ProcessID, pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32)); if (bGotModule) { HANDLE hProcess; // Get the actual priority class. hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); dwPriorityClass = GetPriorityClass (hProcess); CloseHandle (hProcess); // Print the process's information. printf( "\nPriority Class Base\t%d\n", pe32.pcPriClassBase); printf( "PID\t\t\t%d\n", pe32.th32ProcessID); printf( "Thread Count\t\t%d\n", pe32.cntThreads); printf( "Module Name\t\t%s\n", me32.szModule); printf( "Full Path\t\t%s\n\n", me32.szExePath); } } while (Process32Next(hProcessSnap, &pe32)); bRet = TRUE; } else bRet = FALSE; // could not walk the list of processes // Do not forget to clean up the snapshot object. CloseHandle (hProcessSnap); return (bRet); } |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| Люда |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 24.4.2002 Репутация: нет Всего: нет |
Это точно, а уменя как раз он родимый - NT
|
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
извиняй... на Delphi разберешся или переписать? type UNICODE_STRING=record Length : word; MaximumLength : WORD; Buffer : PWideChar; end; type TSom = record NextEntry : DWORD; ThreadCnt : DWORD; Reserv : array[1..6] of DWORD; CrTime : array[1..6] of DWORD; pName: UNICODE_STRING; prior : DWORD ; pid : DWORD; Inher : DWORD ; HandleCnt : DWORD ; Res:array[1..2] of DWORD; privCnt : DWORD ; Vm:array[1..11] of DWORD; end; var NtQuerySystemInformation: function(v1:DWORD;v2:DWORD;v3:DWORD;v4:DWORD): integer stdcall; procedure TForm1.FormCreate(Sender: TObject); var Hmod, H, Hproc:THANDLE; pe: TPROCESSENTRY32; vi:TOSVersionInfoA; RetX:DWORD; ER: integer; my: ^TSom; S1,S2 : PChar; aaa1:array[1..131072] of DWORD; begin H := LoadLibrary('ntdll.dll'); @NtQuerySystemInformation := GetProcAddress(H,'NtQuerySystemInformation'); asm lea eax,[aaa1]; lea ebx,[RetX] push ebx; push 10000h; push eax; push 5; call NtQuerySystemInformation; mov [ER],eax; end; my := @aaa1[1]; while true do begin if my^.NextEntry = 0 then break; if my^.pName.Buffer <> nil then begin StrCopy(S2,StrUpper(PChar(WideCharToString(my^.pName.Buffer)))); KillPath(S2); if StrComp(S1,S2) = 0 then begin Hproc := OpenProcess(PROCESS_TERMINATE,FALSE,my^.pid); if Hproc <> 0 Then TerminateProcess(Hproc,0) else Error('Error process termination... ' + inttostr(GetLastError())); break; end; end; my := ptr(DWORD(my) + my^.NextEntry); end; end; Кривовато - но на скорую руку сойдет -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Надо конечно под NT 4.0 уже бросать что-то писать
В том же MSDN EnumProcesses -> OpenProcess в цикле. |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
"EnumProcesses -> OpenProcess в цикле"
только при наличии необходимого SDK... допустим я его не имею. -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |