أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية استخدام Visual C++ إغلاق تطبيق آخر

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية307395
للحصول على إصدار Microsoft Visual Basic .NET من هذه المقالة، راجع 305602.

للحصول على إصدار Microsoft Visual C# .NET من هذه المقالة، راجع 305603.

في هذه المهمة


الموجز
توضح هذه المقالة كيفية إغلاق تطبيق آخر من داخل التطبيق الخاص بك. توضح هذه المقالة أيضًا كيفية إغلاق مثيل معين من تطبيق آخر، مثل "المفكرة" ، إذا كان أكثر من مثيل التطبيق قيد التشغيل.

تقوم بتعريف متغيرات

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

متغير الأول عبارة عن صفيف للاحتفاظ الكائنات عملية إرجاع الأسلوب GetProcessByName. في هذه التعليمات البرمجية "procName" هو متغير سلسلة يستخدم للاحتفاظ اسم العملية:
private:   Process *processes[];   static String *procName = S"Notepad";

للحصول على قائمة مثيلات التطبيق

يتم استدعاء التعليمات البرمجية التالية الخاصة بدالة BuildList كل مرة يتم إنشاء مثيل جديد من المفكرة. يخزن هذا المثال معالجة معلومات في عنصر تحكم ListView. يتم تضمين فقط من أجل التناسق مع المثال الكامل الذي يتبع الرمز لملء عنصر تحكم ListView.

الجزء الأكثر أهمية من هذه التعليمة البرمجية هو استدعاء الأسلوب GetProcessByName الفئة العملية. هذا الأسلوب بإرجاع صفيف مؤشرات كائن العملية التي يمكن أن يكون iterated عن طريق استخدام حلقة For.
ListViewItem *itemAdd ; ListView1->Items->Clear();processes = Process::GetProcessesByName(procName);for (int i = 0; i < processes->Length; i++){   itemAdd = ListView1->Items->Add(processes[i]->MainWindowTitle);   itemAdd->SubItems->Add(processes[i]->Id.ToString());}

إغلاق مثيل معين من تطبيق

عندما يكون لديك مثيلات متعددة من أحد التطبيقات قيد التشغيل, إذا كنت ترغب في إغلاق مثيل واحد يجب أن للتمييز بين هذه العمليات. يستخدم هذا المثال خاصية معرف للتمييز بين العمليات. يتم تخزين معرف والخاصية MainWindowTitle في عنصر تحكم ListView.

تحصل هذه التعليمة البرمجية على العنصر المحدد حالياً في عنصر تحكم ListView يحصل على مرجع إلى العملية بواسطة استخدام الأسلوب GetProcessById فئة معالجة ثم ثم إغلاق تلك العملية بواسطة استدعاء الأسلوب CloseMainWindow. ملاحظة لا يمكن إنشاء القائمة قبل قد تم إنهاء العملية بالكامل لأن أسلوب WaitForExit فئة معالجة يمنع هذا. حاول
try{            ListViewItem *lvi = ListView1->SelectedItems->get_Item(0);   ListViewItem::ListViewSubItem *lvsi = lvi->SubItems->get_Item(1);   int procID = System::Convert::ToInt32(lvsi->Text);   Process *tempProc=Process::GetProcessById(procID);   tempProc->CloseMainWindow();   tempProc->WaitForExit();   BuildList();}catch(...){   MessageBox::Show(S"Select a process in the ListView.");}				

قم بإغلاق كافة مثيلات تطبيق

لإغلاق كافة مثيلات تطبيق معين تقود الصفيف إرجاع الأسلوب GetProcessByName ومن ثم استدعاء الأسلوب CloseMainWindow على كل كائن العملية. حاول
try{   for (int i = 0; i < processes->Length; i++)   {      processes[i]->CloseMainWindow();   }   ListView1->Items->Clear();}catch (System::NullReferenceException *){   MessageBox::Show("No instances of Notepad running.");}				

مثال خطوة بخطوة

  1. إنشاء "تطبيق C++ مدارة" جديدة في Microsoft Visual Studio .NET أو Microsoft Visual Studio 2005. للقيام بذلك، اتبع الخطوات التالية:
    1. بدء تشغيل Visual Studio .NET أو Visual Studio 2005.
    2. من القائمة ملف، أشر إلى جديد ثم انقر فوق المشروع.
    3. في مربع الحوار مشروع جديد ، انقر فوق مشاريع Visual C++ ضمن أنواع Project ومن ثم انقر فوق تطبيق C++ مدارة لـ Visual Studio .NET 2002 انقر فوق تطبيق وحدة التحكم (.NET) لـ Visual Studio .NET 2003 أو انقر فوق تطبيق وحدة التحكم CLR لـ Visual Studio 2005 ضمن قوالب.
    4. اكتب اسم ملف في اسم مربع.
  2. في "مستكشف الحلول" فتح ملف .cpp المشروع.
  3. Replace the code in the Code window with the following:
    #include "stdafx.h"#include <windows.h>#ifdef MessageBox#undef MessageBox#endif#using <mscorlib.dll>#using "System.Dll"#using "System.Windows.Forms.Dll"#using "System.Drawing.Dll"using namespace System;using namespace System::Drawing;using namespace System::Collections;using namespace System::ComponentModel;using namespace System::Windows::Forms;using namespace System::Diagnostics;namespace CloseApplication_mc{   public __gc class Form1 : public Form   {   protected:      Button *btnCloseAll;      ColumnHeader *ColumnHeader2;      ColumnHeader *ColumnHeader1;      Button *btnLaunch1;      ListView *ListView1;      Button *btnClose1;   private:      Process *processes[];      static String *procName = S"Notepad";      static String *specialFolder = Environment::GetFolderPath(Environment::SpecialFolder::System);   public:      Form1()      {         InitForm();      }   protected:      void Dispose( bool disposing )      {         Form::Dispose(disposing);      }   private:      void InitForm()      {         btnClose1 = new Button();         ColumnHeader2 = new ColumnHeader();         ColumnHeader1 = new ColumnHeader();         btnCloseAll = new Button();         btnLaunch1 = new Button();         ListView1 = new ListView();         SuspendLayout();         //          // btnClose1         //          btnClose1->Location = Point(160, 176);         btnClose1->Name = S"btnClose1";         btnClose1->Size = System::Drawing::Size(112, 32);         btnClose1->TabIndex = 4;         btnClose1->Text = S"Close Selected Process";         btnClose1->Click += new System::EventHandler(this, btnClose1_Click);         Controls->Add(btnClose1);         //          // btnCloseAll         //          btnCloseAll->Location = Point(160, 216);         btnCloseAll->Name = S"btnCloseAll";         btnCloseAll->Size = System::Drawing::Size(112, 32);         btnCloseAll->TabIndex = 3;         btnCloseAll->Text = S"Close All Processes";         btnCloseAll->Click += new System::EventHandler(this, btnCloseAll_Click);         Controls->Add(btnCloseAll);         //          // btnLaunch1         //          btnLaunch1->Location = Point(32, 176);         btnLaunch1->Name = S"btnLaunch1";         btnLaunch1->Size = System::Drawing::Size(112, 72);         btnLaunch1->TabIndex = 1;         btnLaunch1->Text = S"Start Notepad";         btnLaunch1->Click += new System::EventHandler(this, btnLaunch1_Click);         Controls->Add(btnLaunch1);         //          // ColumnHeader2         //          ColumnHeader2->Text = S"Process ID";         ColumnHeader2->Width = 85;         //          // ColumnHeader1         //          ColumnHeader1->Text = S"Window Title";         ColumnHeader1->Width = 160;         //          // ListView1         //          ListView1->Columns->Add(ColumnHeader1);         ListView1->Columns->Add(ColumnHeader2);         ListView1->Location = Point(22, 8);         ListView1->MultiSelect = false;         ListView1->Name = S"ListView1";         ListView1->Size = System::Drawing::Size(250, 152);         ListView1->TabIndex = 7;         ListView1->View = View::Details;         Controls->Add(ListView1);         //          // Form1         //          AutoScaleBaseSize = System::Drawing::Size(5, 13);         ClientSize = System::Drawing::Size(292, 266);         Name = S"Form1";         Text = S"Process Example";         Closing += new System::ComponentModel::CancelEventHandler(this, closing);         Load += new System::EventHandler(this, Form1_Load);         ResumeLayout(false);      }      void BuildList()      {         ListViewItem *itemAdd ;          ListView1->Items->Clear();         processes = Process::GetProcessesByName(procName);         for (int i = 0; i < processes->Length; i++)         {            itemAdd = ListView1->Items->Add(processes[i]->MainWindowTitle);            itemAdd->SubItems->Add(processes[i]->Id.ToString());         }      }      void btnLaunch1_Click(Object *sender, EventArgs *e)      {         ProcessStartInfo *p = new ProcessStartInfo();         p->FileName = String::Concat(specialFolder, S"\\eula.txt");         p->WindowStyle = ProcessWindowStyle::Minimized ;         Process *proc = Process::Start(p);         proc->WaitForInputIdle();         BuildList();      }      void Form1_Load(Object *sender, EventArgs *e)      {      }      void btnClose1_Click(Object *sender, EventArgs *e)      {         try         {                     ListViewItem *lvi = ListView1->SelectedItems->get_Item(0);            ListViewItem::ListViewSubItem *lvsi = lvi->SubItems->get_Item(1);            int procID = System::Convert::ToInt32(lvsi->Text);            Process *tempProc=Process::GetProcessById(procID);            tempProc->CloseMainWindow();            tempProc->WaitForExit();            BuildList();         }         catch(...)         {            MessageBox::Show(S"Select a process in the ListView before clicking this button.");         }      }      void btnCloseAll_Click(Object *sender, EventArgs *e)      {         if (processes != 0)         {            for (int i = 0; i < processes->Length; i++)            {               processes[i]->CloseMainWindow();            }                   ListView1->Items->Clear();         }      }      void closing(Object *sender, System::ComponentModel::CancelEventArgs *e)      {         btnCloseAll_Click(this,e);      }   };} using namespace CloseApplication_mc;int APIENTRY WinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPTSTR    lpCmdLine,                     int       nCmdShow){   Form1 *FormInstance = new Form1;   Application::Run(FormInstance);   return 0;}					
  4. إنشاء ثم قم بتشغيل التطبيق.
  5. انقر فوق ابدأ المفكرة مرة واحدة أو أكثر.
  6. انقر فوق مثيل المفكرة في المربع ListView ثم انقر فوق عملية إغلاق. يتم إغلاق المثيل المحدد المفكرة التي حددتها. يمكنك أيضاً النقر فوق إغلاق كافة العمليات لإغلاق كافة المثيلات من المفكرة قيد التشغيل.
ملاحظة تستخدم هذه المقالة خاصية معرف فئة معالجة للتمييز بين مثيلات التطبيق. تعتبر الخاصية معرف من أجل هذه المهمة لأن عملية كافة معرفات فريدة. يمكنك استخدام الخاصية WindowHandle للكائن عملية الحصول على نفس النتائج. على الرغم من أنك يمكنك استخدام خصائص أخرى وهي أقل مناسبة لهذه المهمة. إذا لم تكن تعرف معرّف العملية أو إذا كان لديك مقبض الإطار الرئيسي لبرنامج ، يمكنك أيضاً استخدام الخاصية MainWindowTitle للمساعدة في التعرف على المثيل الصحيح. ومع ذلك، لأنه لا يمكن أن تكون الخاصية MainWindowTitle فريد ، لا تضمن يتم الإشارة إلى إطار الصحيح.

مراجع
لمزيد من المعلومات، راجع الصفحة "معالجة فئة" على موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 307395 - آخر مراجعة: 01/04/2006 00:00:17 - المراجعة: 3.0

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition

  • kbmt kbhowtomaster kbhowto KB307395 KbMtar
تعليقات
/html>t/javascript"> Asimov.clickstreamTracker.init(); ;t=">