Laden...

Überprüfen ob Programm läuft

Erstellt von Fab96 vor 18 Jahren Letzter Beitrag vor 18 Jahren 6.464 Views
F
Fab96 Themenstarter:in
66 Beiträge seit 2004
vor 18 Jahren
Überprüfen ob Programm läuft

Hi, hab momentan das problem das ich nciht weiß wie ich testen kann ob ein bestimmtes Programm läuft.

Bis jetzt find ich nur die möglichkeit mir alle Prozesse anzeigen zu lassen, nur das dauert recht lang und für meine ideen wohl deutlich zu langsam

Darum meine frage, wie kann ich am besten/schnellsten testen obeine bestimmte datei grade läuft ?

Ich habe momentan jedenfalls keine idee wie es gehen könnte und in der Doku fand ich auch bis jetzt noch nix.

Also wäre für einen rat sehr dankbar

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Fab96,

wo hast du denn in der Doku geguckt?

Ich denke Process.GetProcessesByName und/oder Process.GetProcessById müssten es tun.

herbivore

4.221 Beiträge seit 2005
vor 18 Jahren

Ich hab Dir mal ein paar Beispiele zusammengewuzzelt...


		[System.Runtime.InteropServices.DllImport("user32.dll")]
		private static extern int SetForegroundWindow(IntPtr pHandle);

		[System.Runtime.InteropServices.DllImport("user32.dll")]
		private static extern bool IsIconic(IntPtr pHandle);

		[System.Runtime.InteropServices.DllImport("user32.dll")]
		private static extern int OpenIcon(IntPtr pHandle);


		private void btnActivateAllCalculators_Click(object sender, System.EventArgs e)
		{
			string strProcName="Calc";
			if (IsProcessRunning(strProcName))
			{
				Process myProcess=Process.GetCurrentProcess();
				Process[] procs = Process.GetProcessesByName(strProcName);
				foreach (Process p in procs)
				{
					if (p.Id!=myProcess.Id)
					{
						if (IsIconic(p.MainWindowHandle))
						{
							OpenIcon(p.MainWindowHandle);
						}
						SetForegroundWindow(p.MainWindowHandle);
					}
				}
			}
			else
			{
				Process p=Process.Start(strProcName);
			}
		}
		public static bool IsMyProcessRunning
		{
			get
			{
				bool isRunning=false;
				Process myProcess=Process.GetCurrentProcess();
				foreach (Process p in Process.GetProcessesByName(myProcess.ProcessName))
				{
					if (p.Id!=myProcess.Id)
					{
						isRunning=true;
						break;
					}
				}
				return isRunning;
			}
		}

		public static bool IsProcessRunning(string pProcessName)
		{
			return Process.GetProcessesByName(pProcessName).Length>0;
		}


Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

F
Fab96 Themenstarter:in
66 Beiträge seit 2004
vor 18 Jahren

ok wunderbar, danke 🙂

das mit dem Process.GetProcessesByName muss ich echt übersehen haben 😠

N
4.644 Beiträge seit 2004
vor 18 Jahren

Original von Fab96
das mit dem Process.GetProcessesByName muss ich echt übersehen haben 😕

Aus dem C# Codebook:

Wenn Sie in einem Ihrer Programme überprüfen müssen, ob eine andere Anwendung bereits
ausgeführt wird (um diese im negativen Fall gegebenenfalls zu starten, wie ich es im Rezept
73 beschreibe), können Sie dazu prinzipiell die Process-Klasse auf eine ähnliche Weise verwenden,
wie ich es bereits im Rezept 66 beschrieben habe. Dazu erzeugen Sie über die Get-
ProcessesByName-Methode ein Array der Prozesse, die den Namen der Anwendung tragen.
Enthält das alle Elemente, können Sie davon ausgehen, dass die Anwendung bereits ausgeführt
wird.
Problematisch ist dabei allerdings, dass die Prozessnamen verschiedener Anwendungen identisch
sein können. Deshalb können Sie nicht mit Sicherheit sagen, dass genau die Anwendung,
die Sie meinen, bereits ausgeführt wird.

F
Fab96 Themenstarter:in
66 Beiträge seit 2004
vor 18 Jahren

ok danke, das mit dem doppelten namen war mir aber soweit schon klar, aber hm, muss das noch irgendwie abfangen so das ich immer auch die daten vom gleichen prozess abrufe.

also etwa wenn man 2 mal mirc aufhat als beispiel und nicht einmal von der ersten instanz die daten sich holt und dann vom 2ten, hmm

hm, aber sollt doch gehen wenn man beim ersten mal per namen aufruft, sich die process id merkt und ab dann mit der aufruft, sollt doch sogar auch schneller sein da er keine strings hat sondern nur int's.

PS: ist das C# Codebook gut? war mir schon öfter am überlegen ob ich es mir kaufe da das java Codebook sehr gut sein soll.