Autor Beitrag
philipp-schoene
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 04.04.12 11:57 
Ich möchte prüfen ob ein Programm noch läuft. Falls nicht möchte ich das (mit einem if) auswerten. Ich weiß aber nicht, wie ich an die laufen Programme komme und wie ich das dann ach einem bestimmten Programm absuche. Ich würde mich über Hilfe freuen. Falls noch Fragen sind (Ich weiß nicht, was ihr für Infos braucht) fragt bitte nach.


Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Mi 04.04.2012 um 14:14
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 04.04.12 12:09 
Die Process Klasse wird dir da weiterhelfen. Wenn du weißt wie das gesuchte Programm heißt dann benutz die GetProcessByName Methode. Ansonsten wenn du andere Kriterien hast die dein Programm identifizieren sieh dir die anderen GetProcess/GetProcessByXXX Überladungen an.
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 04.04.12 12:17 
Danke für deine schnelle Antwort. Ich habe mit die Hilfe auf MSDS angesehen. Ich werde also ein Array zurückbekommen: Ich bin in Array noch nicht so fit. Wie kann ich dann dieses Array auswerten?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 04.04.12 12:37 
Da du scheinbar nur Wissen willst ob der Prozess (oder Prozesse) läuft brauchst du nur die Anzahl der Objecte im Array auswerten. Arrays hab dafür eine Length Property.
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 05.04.12 15:50 
Vielen Dank!
Das funktioniert so, wie ich es bis hierher wollte.
Ich möchte nun eine Combobox mit den möglichen Prozessen füllen und anschliesend in die Aktion von Oben integrieren. Ich habe schon probiert. Aber ich bin mir zu Unsicher mit der Process-Methode und mit Arrays auch. Bisher habe ich (bitte nicht lachen) folgenden Code im Form-Load:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
Process[] Prozesse = Process.GetProcesses();
string[] Namen as Array;
foreach (string s[] in Prozesse)
{
    cmbProzesse.Items.Add(s['ProcessName']);
}
cmbProzesse.Items.Add(Prozesse[]['ProcessName']);
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 05.04.12 16:09 
Ui. Da hast du schon eine Menge durcheinander geworfen.

Zitat:
ausblenden C#-Quelltext
1:
string[] Namen as Array;					


Das ist Syntax irgendwo zwischen C# und VB. Durch die [] hast du schon ausgedrückt das du ein Array möchtest. Du mußt es nicht mehr dranschreiben also lass das 'as Array' weg.

Zitat:
ausblenden C#-Quelltext
1:
foreach (string s[] in Prozesse)					


Prozesse ist ein Array von Prozess Objekten. Da können keine Strings draus werden und erst recht keine string Arrays. Wenn du über Prozesse iterierst kommen da also Process Objekte raus und nicht strings. Also

ausblenden C#-Quelltext
1:
foreach (Process s in Prozesse)					


Zitat:
ausblenden C#-Quelltext
1:
cmbProzesse.Items.Add(s['ProcessName']);					


'' gibt es nur bei Charactern. String Literale werden in c# mit "" begrenzt. Und Processname ist einfach eine Property die du direkt abfragen kannst. Also

ausblenden C#-Quelltext
1:
cmbProzesse.Items.Add(s.ProcessName);					


Zitat:
ausblenden C#-Quelltext
1:
cmbProzesse.Items.Add(Prozesse[]['ProcessName']);					


Und das :?: Keine Ahnung was du damit erreichen wolltest ist unnötig laß es einfach weg.

Bleibt von deinem Code einfach übrig

ausblenden C#-Quelltext
1:
2:
3:
Process[] Prozesse = Process.GetProcesses();
foreach (Process s in Prozesse)
    cmbProzesse.Items.Add(s.ProcessName);
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 05.04.12 16:57 
Danke nochmal für deine Hilfe. Nun wollte ich das ausgewählte Element in mein
ausblenden C#-Quelltext
1:
Process.GetProcessesByName("calc");					

einfügen. Also testweise

ausblenden C#-Quelltext
1:
lblTest.Text = cmbProzesse.SelectedText.ToString();					

geschrieben. Leider bekomme ich nichts (die Auswahl der Combobox) in mein Label rein. Habe ich die falsche Eigenschaft gewählt? Dachte das wäre jetzt leicht, aber schon wieder Probleme...

Zweite Frage: Kann man alle doppelten Einträge im Array irgendwie rauswerfen? Vielleicht kann man auch eine Blacklist anlegen, was auch nicht in das Dropdown soll?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 05.04.12 17:01 
Zitat:
Habe ich die falsche Eigenschaft gewählt?


Ja. SelectedText wäre der markierte Text im Texteditor-Teil der Combobox. Wenn du den Text oder Teile des Text nicht markiert hast kommt logischerweise bei SelectedText nix. Nimm zum Beispiel einfach die Text Property anstatt SelectedText. ToString kannst du dir sparen das sind eh schon strings.
philipp-schoene Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 05.04.12 17:55 
Ich muss mich wieder bedanken. Funktioniert, wie gewollt.

Zitat:
Zweite Frage: Kann man alle doppelten Einträge im Array irgendwie rauswerfen? Vielleicht kann man auch eine Blacklist anlegen, was auch nicht in das Dropdown soll?


Da wären wir wieder bei den Arrayfunktionen... Kannst du mir da vielleicht noch weiterhelfen? Ergänzen kann ich (Da habe ich bei einem anderen Projekt aufgehört, weil ich nicht weiter kam) Wie kann ich 2 oder mehr Array zu einem zusammenfügen? Also aus Array1[0...12] und Array2[0...6] wird ArrayGesamt[0...19] Die Indizes dürfen neu vergeben werden, ich brauche nur die Werte in einem Array
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 06.04.12 09:14 
Hallo Philipp,

s. Array.Copy. Dazu mußt du aber ein neues Array erstellen mit der Größe von Array1+Array2, da Arrays nach der Erzeugung nicht mehr vergrößert werden können. Alternativ daher nimm besser eine List<T>:
ausblenden C#-Quelltext
1:
2:
3:
List<int> list = new List<int>();
list.AddRange(array1);
list.AddRange(array2);

da diese sich intern bei Bedarf selber vergrößert (Eigenschaft Count).

Bitte erstelle demnächst aber für jede Frage ein eigenes Thema!