سؤال

ولدي مثيلات متعددة من نفس التطبيق على التوالي. المستخدم يطلب النقر فوق "إنهاء" على كل مثيل لإغلاقها.

وأود أن إضافة خيار "إنهاء جميع حالات"، التي سترفع بعض طفل من "الحدث" الذي يبلغ عن حالات التطبيق الذي يجب أن يغلق. ولست بحاجة لنقل أي بيانات مع هذا الحدث.

ما هي أفضل (ويفضل أن يكون أبسط) وسيلة للقيام بذلك في ويندوز باستخدام C # /. NET؟

هل كانت مفيدة؟

المحلول

وأرسل WM_CLOSE good'ol لجميع الحالات ...

Process[] processes = Process.GetProcesses();
string thisProcess = Process.GetCurrentProcess().MainModule.FileName;
string thisProcessName = Process.GetCurrentProcess().ProcessName;
foreach (Process process in processes)
{
   // Compare process name, this will weed out most processes
   if (thisProcessName.CompareTo(process.ProcessName) != 0) continue;
   // Check the file name of the processes main module
   if (thisProcess.CompareTo(process.MainModule.FileName) != 0) continue;
   if (Process.GetCurrentProcess().Id == process.Id) 
   {
     // We don't want to commit suicide
     continue;
   }
   // Tell the other instance to die
   Win32.SendMessage(process.MainWindowHandle, Win32.WM_CLOSE, 0, 0);
}

نصائح أخرى

والطبقة System.Diagnostics.Process لديها العديد من الأساليب التي يمكنك استخدامها.

وProcess.GetProcessesByName سوف تمكنك من تعداد جميع الحالات:

http://msdn.microsoft.com /en-us/library/system.diagnostics.process.getprocessesbyname.aspx

وبعد ذلك Process.CloseMainWindow أو Process.Close سوف أغلقها:

http://msdn.microsoft.com /en-us/library/system.diagnostics.process.closemainwindow.aspx http://msdn.microsoft.com/en- لنا / مكتبة / system.diagnostics.process.close.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top