من C #، فتح التطبيق التعسفي
-
07-07-2019 - |
سؤال
والسؤال ذات صلة [ستاكوفيرفلوو] هنا .
وأنا أحاول أن تفعل ما ورد أعلاه، ولكن أود أن أغتنم هذه العملية خطوة أخرى إلى الأمام. أريد أن أفتح ملف التعسفي باستخدام المحرر الافتراضي لنوع الملف. من تلك النقطة، أريد أن تسمح للمستخدم بلدي للتفاعل مع الملف كما يفعلون عادة، أو مواصلة العمل في طلبي. التمديد هو ما يحدث بعد انتهاء المستخدم التحرير. هل هناك طريقة يمكنني التقاط قريب (ومثالي حفظ) الحدث من تطبيق خارجي واستخدام ذلك بمثابة نقطة انطلاق لتفعل شيئا آخر؟ لأغراض بلدي، سوف تتبع إغلاق التطبيق الخارجي القيام به.
وأستطيع أن أفعل ذلك في حالة معينة. على سبيل المثال، لا أستطيع فتح مثيل Word من طلبي وتتبع الأحداث التي تثير طلبي. ومع ذلك، أريد أن اجتثاث زوجين طلبي من Word.I تريد أن تسمح للمستخدمين بلدي لاستخدام أي محرر الوثيقة التي يختارونها، ثم إدارة تخزين ملف يتم تحريرها بتحفظ وراء الكواليس.
المحلول
ويمكنك القيام بذلك بطريقة مشابهة على السؤال المشار إليه، ولكن بناء الجملة يختلف قليلا:
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo =
new System.Diagnostics.ProcessStartInfo("C:\...\...\myfile.html");
process.Start();
process.WaitForExit(); // this line is the key difference
وسوف الدعوة WaitForExit () منع حتى يتم إغلاق التطبيق الآخر. يمكنك استخدام هذا الرمز في موضوع مستقل بحيث يمكن للمستخدم الاحتفاظ باستخدام التطبيق الخاص بك في هذه الأثناء.
نصائح أخرى
واستخدم FileSystemWatcher
الطبقة لمشاهدة ل تغييرات على الملف.
تعديل : في يمكنك أيضا التعامل في الحدث Exited
من Process
الاعتراض على معرفة عند الخروج من البرنامج. ومع ذلك، لاحظ أن هذا لن اقول لكم المستخدم إغلاق الملف الخاص بك ولكن لا خروج من العملية. (والذي هو المرجح خصوصا في Word).
لاستماع للتغيير الملف، يمكنك استخدام FileSystemWatcher والاستماع لتغيير تاريخ آخر تعديل.
ويمكنك أيضا مراقبة عملية الاختيار وثم ملف عند ختام العملية.
ولقد وجدت هذا غيض من المفيد على الانترنت للتو. ويبدو أن ما كنت أبحث عنه. هذه المقالة (وصلة مكسورة) أ > لديه المزيد من التفاصيل ومفيدة، نصائح لنقطة على C # البرمجة.
string filename = "instruction.txt";
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@filename);
System.Diagnostics.Process rfp = new System.Diagnostics.Process();
rfp = System.Diagnostics.Process.Start(psi);
rfp.WaitForExit(2000);
if (rfp.HasExited)
{
System.IO.File.Delete(filename);
}
//execute other code after the program has closed
MessageBox.ShowDialog("The program is done.");