Показать сообщение отдельно
Старый 25.04.2005, 23:13     # 1
wolandino
Guest
 
Сообщения: n/a

закрытие процесса

Приветствую,

Ребята, очень нужна ваша помощь, запарился совсем... Пытаюсь написать небольшую программку, типа Диспетчера задач... Никак у меня не получается закрывать процессы....

Позволю себе привести некоторые части кода:

DWORD process_ids[5000];
DWORD num_processes;
int success;

if (
NULL == VDMEnumTaskWOWEx ||
NULL == EnumProcesses ||
NULL == GetModuleFileName ||
NULL == GetModuleBaseName ||
NULL == EnumProcessModules
)
return;

num_processes=0;
success = EnumProcesses(process_ids, sizeof(process_ids), &num_processes);
num_processes/=sizeof(process_ids[0]);

if (!success) {return;}

for (unsigned i=0; i<num_processes; i++)
{
HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, FALSE, process_ids[i]);
HMODULE modules[500];
DWORD num_modules;
char file_name [MAX_PATH];
EnumProcessModules(process, modules, sizeof(modules), &num_modules);
num_modules /= sizeof (modules[0]);
if (GetModuleFileName(process, modules[0], file_name, sizeof(file_name)))
{
CString mstr;
char string1[256];
wsprintf (string1, " %#4x \t%-55s",process_ids[i], file_name);
mstr=string1;
m_ListPS.AddString(mstr);
GetModuleBaseName(process, modules[0], file_name, sizeof(file_name));
}


CloseHandle(process);

hand_ar[i]=process_ids[i];

}

return;
}



Это я получаю инфу о процессах, и вывожу их в clistbox


int j=m_ListPS.GetCurSel();
char str[256];
wsprintf (str,"%#4x \t%",hand_ar[j]);
HANDLE CurProc=OpenProcess(PROCESS_QUERY_INFORMATION,NULL,(unsigned)str);
BOOL ec=GetExitCodeProcess(CurProc,(unsigned long*)STILL_ACTIVE);
TerminateProcess(CurProc,ec);
CloseHandle(CurProc);




Самое интересное в том, что тут wsprintf (str,"%#4x \t%",hand_ar[j]); у меня то правильные идентификаторы передаются, но "неправильные" Smile

В общем, замучился, я с ними уже... В чем моя ошибка при удалении процессов?