Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2014, 17:46   #1
ahpun
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 21
По умолчанию еще раз о процессах

Разьясните крестьянину,сам не пойму.Использую такой код для гашения процесса.Но не могу выделить самый первый процесс.
Код:
 HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
               PROCESSENTRY32 proc;
               proc.dwSize=sizeof(proc);
      if (Process32First(hSnap, &proc))
      {
          strProcess = proc.szExeFile;
          
                 // --1-из этой строки извлекается имя первого процесса.

          if (!wcscmp(strProcess,name))

          {                 strProcess // --2-отсюда-ничего--

              TerminateProcess(hSnap, 0); 
                  }

          while (Process32Next(hSnap, &proc))
          {      
               strProcess = proc.szExeFile;
                 
               if (!wcscmp(strProcess,name))

               {                    strProcess //--3-из этой строки извлекаются все процессы кроме первого

                   HANDLE ProcessHandle = NULL;
                   ProcessHandle = OpenProcess(0, FALSE, proc.th32ProcessID);

                   if (ProcessHandle != NULL)
                   {
                        TerminateProcess(ProcessHandle, 0);
                        CloseHandle(ProcessHandle);
                        
                   }  
		          }  
		          }
		          } CloseToolhelp32Snapshot(hSnap);
Как будто функция сравнения строк wcscmp намеренно не видит первый.Имя первого процесса NK.exe,если это имеет какое то значение.
ahpun вне форума Ответить с цитированием
Старый 02.09.2014, 18:55   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Почему-то мне кажется, что strProcess присваивается дважды - первый раз для первого процесса а потом для каждого следующего.
waleri вне форума Ответить с цитированием
Старый 02.09.2014, 19:17   #3
ahpun
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 21
По умолчанию

strProcess можно совсем убрать,имя процесса брать прямо из "proc.szExeFile".Это ничего не меняет.Пробовал разные варианты кода,результат- одинаковый. Функция сравнения не видит этого имени.Попутно вопрос:функция Process32Next,должна извлекать имя первого процесса? Или это делает только Process32First ?
ahpun вне форума Ответить с цитированием
Старый 02.09.2014, 21:01   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Process32First извлекает имя первого процесса.
На вашем месте я бы печатал name и szExeName на каждой итерации.
waleri вне форума Ответить с цитированием
Старый 03.09.2014, 01:32   #5
ahpun
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 21
По умолчанию

Продолжение изысканий.Попробовал наХР компилятор devcpp посмотреть как работают эти же функции.Увидел почти то же самое:В общем списке самый первый процесс "system".Но выделить его при помощи аналогичной функции strcmp- фигвам.NK.exe как бы аналог system.Нужен какой то другой подход.Конечно нет смысла убивать такие процессы,чисто дело прнинципа))Спасибо за советы,я кажется уже все перепробовал.
ahpun вне форума Ответить с цитированием
Старый 03.09.2014, 08:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Увидел почти то же самое
Отладкой проход делал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2014, 09:33   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от ahpun Посмотреть сообщение
Нужен какой то другой подход.
Нужен другой подход к чему? Сформулирайте цель.
waleri вне форума Ответить с цитированием
Старый 03.09.2014, 13:12   #8
ahpun
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 21
По умолчанию

Отладку делал.Вот код для devcpp.Если вместо explorer.exe вписать system(а это процесс first) условие if не выполняется.По крайней мере у меня так.
Код:
using namespace std;
#include <windows.h>
#include <conio.h>
#include <tlhelp32.h>
#include <iostream.h>
    int main(int argc, char* argv[])
    {
                HANDLE hSnap;
                hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
                if (hSnap == NULL)
                {
                    return 0;
                }
                PROCESSENTRY32 proc;            
              
                if (Process32First(hSnap, &proc))
                {
                    do{   // cout<<proc.szExeFile<<endl;
                         if (!strcmp(proc.szExeFile,"explorer.exe"))                 
                        cout<<proc.szExeFile<<endl;
                    }while (Process32Next(hSnap, &proc));
                }
              
      getch();
        return 0;
Вот пришла простая мысль: а зачем там функция сравнения,если там всего один процесс.Попробовал использовать функцию Process32First в конце кода еще раз без строки сравнения и в общем это работает,программа пытается убить первый процесс.Возможно ломлюсь в открытую дверь))и все намного проще))
ahpun вне форума Ответить с цитированием
Старый 03.09.2014, 13:26   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

У вас неинициализирована PROCESSENTRY32 структура.
waleri вне форума Ответить с цитированием
Старый 03.09.2014, 14:14   #10
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Пример: http://msdn.microsoft.com/ru-ru/libr...(v=vs.85).aspx

Первый процесс это SYSTEM и он не NK.EXE. Не понимаю зачем его грохать если это не nk,exe?

Открытие процесса: HANDLE ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS,FALS E, proc.th32ProcessID);
Нужно установить полные права доступа.
Закрытие процесса: TerminateProcess(ProcessHandle, 0);
Вроде вы правильно делаете.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось challengerr; 03.09.2014 в 14:17.
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще раз о списках tae1980 Microsoft Office Excel 12 02.09.2013 11:44
еще раз файлы в С серг Общие вопросы C/C++ 27 19.02.2010 12:36
Еще раз о списках tae1980 Microsoft Office Excel 2 23.05.2009 16:51