Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проверить наличие-отсутствие процесса в памяти  
V
    Опции темы
LOPUH
Дата 6.4.2012, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: нет
Всего: 4



  Eсть некая программа, скажем- Pump.exe  Как, зная ее имя, определить  из своего приложения, запущена она или нет. Среда программирования - C++ Builder 2007.  smile  
PM MAIL   Вверх
borisbn
Дата 6.4.2012, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Код

        bool found = false;
        //  Take a snapshot of all processes in the system. 
        HANDLE hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
        if ( INVALID_HANDLE_VALUE == hProcessSnap )
        {
            //QMessageBox::critical( this, tr( "Ошибка" ), tr( "CreateToolhelp32Snapshot вернула INVALID_HANDLE_VALUE" ) );
            //QCoreApplication::quit();
... error ...
            return;
        }
        
        //  Fill in the size of the structure before using it. 
        PROCESSENTRY32 pe32 = {0}; 
        pe32.dwSize = sizeof( PROCESSENTRY32 );
        if ( Process32First( hProcessSnap, &pe32 ) ) 
        { 
            do
            { 
                HANDLE hProcess;
//                QString processName = QString::fromWCharArray( pe32.szExeFile ).toLower();
//                if ( exe.endsWith( processName ) )
                 if ( std::string( "Pump.exe" ) == std::string( pe32.szExeFile ) )
                {
                    found = true;
                    break;
                }
            }
            while ( Process32Next( hProcessSnap, &pe32 ) ); 
        }
        CloseHandle( hProcessSnap ); 
if ( found ) {
... есть такой процесс ...
}
else {
... неа ...
}


Это сообщение отредактировал(а) borisbn - 6.4.2012, 11:35


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
500mhz
Дата 6.4.2012, 12:14 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



Многа букф, достаточно попытаться открыть файл на запись.




--------------------

PM MAIL ICQ   Вверх
LOPUH
Дата 6.4.2012, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: нет
Всего: 4



Спасибо..осталось только с WinAPI разобраться..   а  можно поянить что за класс (структура)  PROCESSENTRY32?
PM MAIL   Вверх
500mhz
Дата 6.4.2012, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



TlHelp32.h  структура описана


--------------------

PM MAIL ICQ   Вверх
LOPUH
Дата 6.4.2012, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: нет
Всего: 4



Цитата(500mhz @ 6.4.2012,  17:14)
Многа букф, достаточно попытаться открыть файл на запись.

  эмм..Как то так?
Код

#include <stdio.h>
FILE *F;
if (( F =  fopen ("Pump.exe", "w")) == NULL)
//приложение запущено?

 или результатом должно быть исключение?

Это сообщение отредактировал(а) LOPUH - 6.4.2012, 13:02
PM MAIL   Вверх
500mhz
Дата 6.4.2012, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



LOPUH
если файл запущен, то есть есть процесс pump.exe на запись ты его не откроеш. Выдаст ошибку.

Там не 0 вернется а INVALID_HANDLE_VALUE.

Это сообщение отредактировал(а) 500mhz - 6.4.2012, 12:44


--------------------

PM MAIL ICQ   Вверх
borisbn
Дата 6.4.2012, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(500mhz @  6.4.2012,  12:14 Найти цитируемый пост)
Многа букф, достаточно попытаться открыть файл на запись.

а если расположение файла неизвестно ?
500mhz, вот не помню... а если процесс не запущен, то
Цитата(LOPUH @  6.4.2012,  12:39 Найти цитируемый пост)
if (( F ==  fopen ("Pump.exe", "w")) == NULL)

не убъёт ли файл ? т.е. не обнулит ли ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
500mhz
Дата 6.4.2012, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



Цитата

а если расположение файла неизвестно ?

ну это уже второй вопрос ))) кстате там есть апишка что типа getmodulename вроде, по id имя выдает, можно тупо перебрать все id и сравнить имя.

Цитата

не убъёт ли файл ? т.е. не обнулит ли ? 

я не знаю как там fopen,"w" интерпретируется в createfile, но если createfile вызывается с OPEN_EXISTING , то файл не обнуляется/создается,а просто будет попытка открытия его.


--------------------

PM MAIL ICQ   Вверх
LOPUH
Дата 6.4.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: нет
Всего: 4



Цитата(borisbn @ 6.4.2012,  17:46)
(( F =  fopen ("Pump.exe", "w")) == NULL)

не убъёт ли файл ? т.е. не обнулит ли ?[/QUOTE]
Спасибо, верное замечание тут наверно должен быть модификатор не "w", а "a", то есть попытаться открыть файл для записи в конец..
PM MAIL   Вверх
borisbn
Дата 6.4.2012, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(LOPUH @  6.4.2012,  13:06 Найти цитируемый пост)
 тут наверно должен быть модификатор не "w", а "a"

тогда уж лучше через CreateFile, как 500mhz сказал

Цитата(500mhz @  6.4.2012,  12:54 Найти цитируемый пост)
 есть апишка что типа getmodulename вроде, по id имя выдает, можно тупо перебрать все id и сравнить имя.

а это - не
Цитата(500mhz @  6.4.2012,  12:14 Найти цитируемый пост)
Многа букф

 smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
500mhz
Дата 6.4.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



borisbn
Твой способ с  if ( std::string( "Pump.exe" ) == std::string( pe32.szExeFile ) )  некошерен )))
А вдруг хитрый ехешник в PEB имя свое поменял? И стал pamella.jpeg


--------------------

PM MAIL ICQ   Вверх
bems
Дата 6.4.2012, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



А вдруг файл открыт эксклюзивно, но не запущен?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
500mhz
Дата 6.4.2012, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



bems, 
ну ехе обычно или запущен или нет ) а просто так его никто не открывает.


--------------------

PM MAIL ICQ   Вверх
bems
Дата 6.4.2012, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Простейший пример - две программы использующие твой способ, запущенные одновременно. Но если ты не видишь ничего плохого в коде который почти работает, то что мне, больше всех надо чтоли smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.