Die beiden auf dieser Seite vorgestellten Beispiele bauen auf die Process-Klasse auf, die Methoden zum Überwachen sowie zum Starten und Beenden von Systemprozessen bereitstellt. Die Klasse gehört zum System.Diagnostics-Namespace. Ein Namespace oder Namensraum ist entfernt vergleichbar mit den Vorwahlen bei Rufnummern, nur dass im Bereich der Programmierung innerhalb eines Namespaces keine Telefonnummern zu finden sind, sondern Klassen mit Eigenschaften und Methoden.
Das erste Beispiel gibt eine Liste mit laufenden Prozessen aus, wobei auf die Methode GetProcesses
zugegriffen wird, um mit Hilfe dieser Methode ein Array zu erstellen. Sind Dokumente in den Anwendungen geöffnet, werden die
Titel der in den jeweiligen Hauptfenstern der Anwendungen geöffneten Dokumente zusammen mit den Beschriftungen der Hauptfenster
ausgegeben.
Im Unterschied zu C++ werden in C++/CLI Objektzeiger nicht mit einem * Sternchen sondern mit einem ^ Zirkumflex
gekennzeichnet.
Code-Listing der C++ Datei local-all.cpp
#using <System.dll> using namespace System; using namespace System::Diagnostics; using namespace System::ComponentModel; int main() { array<Process^>^localAll = Process::GetProcesses(); Console::WriteLine("Gebe Prozesse aus: \r\n\r\n"); if (localAll->Length > 0) { for each (Process^ line in localAll) { // Zeigt laufende Prozesse mit <Name> an Console::WriteLine(line); // Gibt den Titel aus, falls vorhanden if (line->MainWindowTitle->Length > 0) { Console::WriteLine(line->MainWindowTitle); } } } else { Console::WriteLine("Es sind keine Prozessdaten vorhanden!"); } /* Verhindert das sich das Fenster schliesst, bevor die Enter-Taste gedrueckt wurde. */ Console::ReadLine(); return 0; }
Ausgabe: Eine Liste mit laufenden Prozessen
Im zweiten Beispiel wird nur der Prozess angezeigt, welcher der Methode GetProcessesByName als Wert übergeben wurde. Ist ein Dokument im Hauptfenster der Anwendung geöffnet, wird der Titel des Dokumentes als Teil der Beschriftung des Hauptfensters mit ausgegeben. Der vollständige Wert, bestehend aus Titel eines Dokumentes und Beschriftung des Hauptfensters, ist in der Eigenschaft MainWindowTitle enthalten.
Code-Listing der C++ Datei local-by-name.cpp
#using <System.dll> using namespace System; using namespace System::Diagnostics; using namespace System::ComponentModel; int main() { array<Process^>^localByName = Process::GetProcessesByName("firefox"); Console::WriteLine("Gebe Prozesse aus: \r\n\r\n"); if (localByName->Length > 0) { for each (Process^ line in localByName) { // Zeigt den Prozess mit <firefox> an Console::WriteLine(line); // Zeigt den Titel der gerade im Firefox geoeffnenten Webseite an. Console::WriteLine(line->MainWindowTitle); } } else { Console::WriteLine("Es sind keine Prozessdaten vorhanden!"); } /* Verhindert das sich das Fenster schliesst, bevor die Enter-Taste gedrueckt wurde. */ Console::ReadLine(); return 0; }
Ausgabe: Ein laufender Prozess mit dem Titel des
geöffneten Hauptfensters
Im dritten Beispiel wird als Wert für die Methode GetProcessesByName der Prozessname "httpd"
benutzt, der den "Apache HTTP Server" bezeichnet. Gut ersichtlich wird im Screenshot, dass der Apache mit zwei
Instanzen startet. Weiterhin werden die Werte der Eigenschaften ID und HandleCount abgefragt.
Bei der ID handelt es sich um einen eindeutigen Bezeichner für einen Prozess, der nach jedem Start des Apache Servers neu vom
System generiert wird. Die Eigenschaft HandleCount bezieht sich hingegen auf die Anzahl der vom Prozess geöffneten
Handles.
Code-Listing der C++ Datei local-by-name-httpd.cpp
#using <System.dll> using namespace System; using namespace System::Diagnostics; using namespace System::ComponentModel; int main() { int i = 1; array<Process^>^localByName = Process::GetProcessesByName("httpd"); Console::WriteLine("Gebe Prozessdaten vom Apache aus: \r\n\r\n"); if (localByName->Length > 0) { for each (Process^ line in localByName) { // Zaehlt mit wie vielen Instanzen der Apache gestartet wurde Console::WriteLine("Apache Instanz {0}", i++); // Zeigt den Prozess mit <name> an Console::WriteLine(line); // Gibt die eindeutige, vom System generierte ID für den Prozess aus Console::WriteLine("Prozess-ID: {0,8}", line->Id); // Zeigt die Anzahl der vom Prozess geoeffneten Handles an Console::WriteLine("Anzahl Handles: {0,4}\r\n", line->HandleCount); } } else { Console::WriteLine("Es sind keine Prozessdaten vorhanden!"); } /* Verhindert das sich das Fenster von alleine schliesst, bevor die Enter-Taste gedrueckt wurde. */ Console::ReadLine(); return 0; }
Ausgabe: Prozessdaten vom Apache Server
Beachtenswert ist weiterhin die Schreibweise bei Verwendung der Methode WriteLine. Die geklammerte {0} dient als Platzhalter für den eigentlichen Wert einer Variablen und die Ziffer nach dem Komma enthält die Anzahl an Leerstellen vor der Ausgabe, so dass eine gleichmäßige Ausrichtung der Ziffern ermöglicht wird.
Win32-API
Einstieg in C/C++
NET Framework