Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: FAQ - C++ Builder (VCL/CLX) ::  System - Aktive Prozesse auslesen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
hm
Unregistrierter




Beitrag hm Unregistrierter 15:41:00 11.06.2003   Titel:   System - Aktive Prozesse auslesen            Zitieren

Hallo,

wie kann ich überprüfen, ob ein Programm aktiv ist? Ich möchte ein kleines Tool schreiben, das mir anzeigt ob ein Programm aktiv ist und wenn es nicht aktiv ist, soll es nochmal gestartet werden, das soll dann in einem Zeitintervall überprüft werden...

Hat vieleicht jemand einen Tipp, wie ich das mit dem Borland Builder 5 realisieren kann?

thx im Voraus ...


Zuletzt bearbeitet von AndreasW am 20:46:55 24.02.2004, insgesamt 1-mal bearbeitet
Werbeunterbrechung
nav
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.11.2002
Beiträge: 8
Beitrag nav Mitglied 15:52:00 11.06.2003   Titel:              Zitieren

Die Windows-API FindWindow kann man benutzen um zu prüfen ob eine
Application läuft.

HWND FoundWindow = FindWindow(NULL, prgrammname);
if( FoundWindow == NULL )
{
... programm starten.
}


Der Parameter "programmname" ist der Name der laufenden Task, so wie
sie angezeigt wird, wenn man mit ALT-TAB zwischen Programmen herschaltet.
Diesen kann man mit
Application->Title = WindowName;
vorgeben.

Gruss
Juergen
AndreasW
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.06.2001
Beiträge: 3231
Beitrag AndreasW Mitglied 23:59:00 11.06.2003   Titel:              Zitieren

naja, bedenkt bitte, dass nicht jede Anwendung ein Fenster hat.
Um solche Programme berücksichtigen zu können muss man die laufende Programme aus dem Taskmanager auslesen:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//---------------------------------------------------------------------------
void TForm1::GetProcessNames(TStrings* AList,DWORD ID)
{
if(AList)
{
    char szProcessName[MAX_PATH] = "unknown";
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE,ID);
    if(hProcess)
       {
        HMODULE hMod;
        DWORD cbNeeded;
        if (EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) )
            GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName) );
       }
    AList->Add(String(szProcessName));
    CloseHandle(hProcess);
}
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
RichEdit1->Lines->Clear();
DWORD Processes[1024],size,count;
if (EnumProcesses(Processes,sizeof(Processes),&size))
    for (int i=0;i<int(size/sizeof(DWORD));i++)
        GetProcessNames(RichEdit1->Lines,Processes[i]);
}
//---------------------------------------------------------------------------


So kann man übrigens auch den Speicherbedaft und CPU Nutzung auslesen...

_________________
Andreas (Mod im VCL-Forum) (Mod im C#-Forum)
Das BCB- Tutorial
TripH
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 628
Beitrag TripH Mitglied 00:00:00 12.06.2003   Titel:              Zitieren

Ich kann leider grade nicht nachschauen, aber geht das denn nicht nur bei sichtbaren Fenstern? Soweit ich weiss kann man damit Programme in der Taskleiste nicht finden.

Edit: Ja herrlich, kaum poste ich was bestätigt AndreasW mich.

[ Dieser Beitrag wurde am 12.06.2003 um 00:02 Uhr von TripH editiert. ]
AndreasW
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.06.2001
Beiträge: 3231
Beitrag AndreasW Mitglied 00:03:00 12.06.2003   Titel:              Zitieren

jo *G* ;)

_________________
Andreas (Mod im VCL-Forum) (Mod im C#-Forum)
Das BCB- Tutorial
AndreasW
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.06.2001
Beiträge: 3231
Beitrag AndreasW Mitglied 15:26:46 06.10.2003   Titel:              Zitieren

um auf diese Mail zu antworten:
ein mailer schrieb:

ich habe deinen Beitrag im C++ Forum gelesen "Überprüfen ob Programm aktiv" und versucht diese Sache nachzuvollziehen. Jedoch bekomme ich immer die folgenden Fehlermeldungen:

Aufruf der undefinierten Funktion 'EnumProcessModules'

Aufruf der undefinierten Funktion 'GetModuleBaseName'

Aufruf der undefinierten Funktion 'EnumProcesses'





man muss natürlich die richtige Header einbinden ;)

C++:
#include "Psapi.h"

_________________
Andreas (Mod im VCL-Forum) (Mod im C#-Forum)
Das BCB- Tutorial
c++.de :: FAQ - C++ Builder (VCL/CLX) ::  System - Aktive Prozesse auslesen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.