funkcja process exists

dział ogólny

funkcja process exists

Nowy postprzez gregor81 » poniedziałek, 12 lipca 2010, 11:45

Witam, czy istnieje gotowa funkcja która sprawdzi czy dany proces o znanej nazwie jest uruchomiony i zwraca wartość true albo false.

Używam C++ Builder 2007

Jeśli nie ma takiej funcji, to jak sie zabrać za jej stworzenie
Avatar użytkownika
gregor81
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): poniedziałek, 12 lipca 2010, 11:40
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows XPFirefox

Re: funkcja process exists

Nowy postprzez polymorphism » poniedziałek, 12 lipca 2010, 13:02

Zapewne nie ma takiej funkcji. A jeśli chcesz samodzielne pisać tę funkcję, to funkcje CreateToolhelp32Snapshot, Process32First i Process32Next powinny się przydać 8-)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: funkcja process exists

Nowy postprzez Cyfrowy Baron » poniedziałek, 12 lipca 2010, 15:49

Jak wspomniał polymorphism takiej gotowej funkcji nie ma, ale w serwisie Cyfrowy Baron znajdziesz funkcje które można do tego celu zaadoptować. Najłatwiej da się zaadoptować funkcja podana w dziale: porady -> API -> Zamykanie procesów.

Sprawdzanie czy istnieje proces po nazwie pliku procesu:

Kod: Zaznacz cały
#include <tlhelp32.h>

bool __fastcall IsProcess(String ProcesName)
{
 HWND Snap;
 PROCESSENTRY32 proces;

 Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 proces.dwSize = sizeof(PROCESSENTRY32);

 if(Process32First(Snap, &proces))
 {
  do
  
{
   if(proces.szExeFile[0] != '[')
   {
    if(SameText((String)proces.szExeFile, ProcesName))
    {
     return true;
    }
   }
  }
  while(Process32Next(Snap , &proces));
 }
 CloseHandle(Snap);
 return false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 String ProcessName = "totalcmd.exe";
 bool test = IsProcess(ProcessName);

 if(test) ShowMessage("Odnaleziono proces: " + ProcessName);
 else ShowMessage("Nie odnaleziono procesu: " + ProcessName);
}
//---------------------------------------------------------------------------
 


To oczywiście po nazwie pliku procesu, po nazwie okna lub po nazwie klasy okna jest jeszcze łatwiej:

Kod: Zaznacz cały

 bool test 
= false;

 HWND hWnd = FindWindow(NULL, "Total Commander Ultima Prime 4.8 - Cyfrowy Baron"); // po nazwie okna
 // lubHWND hWnd = FindWindow("TTOTAL_CMD", NULL); // po nazwie klasy okna
 if(hWnd) test = true;

 if(test) ShowMessage("Odnaleziono proces.");
 else ShowMessage("Nie odnaleziono procesu.");
 


No ale w tym drugim przypadku trzeba znać dokładną nazwę okna lub nazwę klasy głównego okna programu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: funkcja process exists

Nowy postprzez gregor81 » wtorek, 13 lipca 2010, 10:30

wielkie dzięki
Avatar użytkownika
gregor81
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): poniedziałek, 12 lipca 2010, 11:40
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 8 gości