PDA

View Full Version : سوال: چطور در صورت اجرای برنامه فایل اکسپلورر در ویندوز یک عمل خاص تعریف کنیم؟



Javadprogrammer10
چهارشنبه 15 فروردین 1397, 17:21 عصر
با سلام
من یه برنامه نوشتم و میخوام هنگامی که برنامم در حال اجراست اگر برنامه فایل اکسپلورر توسط کاربر اجرا شد یک عمل خاص انجام بگیره.
با دستور if میخوام بنویسم اما در قسمت شرط گیر کردم.

به طور مثال:



if (فایل اکسپلورر اجرا شد)
}
MessageBox.Show("لطفا برنامه فایل اکسپلورر را ببندید");
{

danialafshari
پنج شنبه 16 فروردین 1397, 05:53 صبح
با سلام
اگر سرچ کنید زودتر به نتیجه میرسید
برای کار با Process ها کلاس System.Diagnostics.Process را مطالعه کنید

foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("notepad"))
{
p.CloseMainWindow();
}

https://social.msdn.microsoft.com/Forums/vstudio/en-US/50ecbcf2-d2d3-4f21-9775-5b8be1bd4346/how-to-terminate-a-process-in-c?forum=csharpgeneral
نام پروسس را از TaskManager استخراج کنید
موفق باشید

Javadprogrammer10
پنج شنبه 16 فروردین 1397, 14:45 عصر
خیلی ممنون مهندس
ولی اینطوری هم تیجه نگرفتم





foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName.ToLower() == "explorer")
MessageBox.Show("Please Close The File Explorer", "Warning");
}


دستوراتی هم که شما نوشتید برای برنامه نوت پد کار میکنه اما برای فایل اکسپلورر پنجره Shutdown Windows باز میشه

danialafshari
جمعه 17 فروردین 1397, 04:06 صبح
با سلام
آهان می خوایید Explorer.exe رو ببندید
چون این از پروسس های مورد نیاز ویندوز هست بهتره با دستورات داس ببندینش


taskkill /f /im explorer.exe

که اگر در فایل bat قرارش بدید explorer رو میبنده
حالا توسط سی شارپ :

System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("taskkill.exe", " /f /im explorer.exe");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();

موفق باشید

Javadprogrammer10
جمعه 17 فروردین 1397, 16:44 عصر
سلام
ببخشید متوجه نشدممنظورتون اینه این دستور رو در یک فایل bat قرار بدم بعد فراخوانیش کنم؟

danialafshari
جمعه 17 فروردین 1397, 18:56 عصر
سلام
ببخشید متوجه نشدممنظورتون اینه این دستور رو در یک فایل bat قرار بدم بعد فراخوانیش کنم؟

با سلام
کد هر دو رو قرار دادم، کد داس رو قرار دادم برای اطلاعات عمومی خودتان.
همون کد سی شارپ رو اجرا کنید

private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("taskkill.exe", " /f /im explorer.exe");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
}

موفق باشید

رامین مرادی
شنبه 18 فروردین 1397, 09:16 صبح
با سلام
کد هر دو رو قرار دادم، کد داس رو قرار دادم برای اطلاعات عمومی خودتان.
همون کد سی شارپ رو اجرا کنید

private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("taskkill.exe", " /f /im explorer.exe");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
}

موفق باشید

خب وقتی شما explorer.exe رو ببندید پروسس اصلی مدیریت پنجره های ویندوز بسته میشه. و کاربر هیچ کاری نمیتونه بکنه مگر اینکه تسک منیجر رو با ctrl+alt+del فعال کنه و اونجا new task رو بزنه و دوباره explorer.exe رو اجراش کنه.

با توجه به چیزایی که گفتم اینکار میتونه کاربر رو اذیت کنه . (البته نمیدونم هدفتون از اینکار چیه:لبخندساده:)

Javadprogrammer10
شنبه 18 فروردین 1397, 15:53 عصر
خیلی ممنون از راهنمایی تون

Javadprogrammer10
شنبه 18 فروردین 1397, 15:54 عصر
خب وقتی شما explorer.exe رو ببندید پروسس اصلی مدیریت پنجره های ویندوز بسته میشه. و کاربر هیچ کاری نمیتونه بکنه مگر اینکه تسک منیجر رو با ctrl+alt+del فعال کنه و اونجا new task رو بزنه و دوباره explorer.exe رو اجراش کنه.

با توجه به چیزایی که گفتم اینکار میتونه کاربر رو اذیت کنه . (البته نمیدونم هدفتون از اینکار چیه:لبخندساده:)

در واقع میخوام یه برنامه بنویسیم که برای فایل اکسپلورر رمز عبور تعیین کنم

Javadprogrammer10
شنبه 18 فروردین 1397, 16:01 عصر
برنامه ای که نوشتم با روشن شدن رایانه به صورت مخفی شروع به فعالیت میکنه و اگر فایل اکسپلورر اجرا شد برای وررود به فایل اکسپلورر رمز عبور میخواد و تنها جایی که گیر کردم دستوری هست که بررسی کنه فایل اکسپلورر اجرا شده یانه در واقع اگه به اولین سوالم دقت کنید متوجه منظور بنده میشید

Javadprogrammer10
شنبه 18 فروردین 1397, 16:03 عصر
با سلام
من یه برنامه نوشتم و میخوام هنگامی که برنامم در حال اجراست اگر برنامه فایل اکسپلورر توسط کاربر اجرا شد یک عمل خاص انجام بگیره.
با دستور if میخوام بنویسم اما در قسمت شرط گیر کردم.

به طور مثال:



if (فایل اکسپلورر اجرا شد)
}
MessageBox.Show("لطفا برنامه فایل اکسپلورر را ببندید");
{





مشکل بنده دستور بستن نیست
مشکل شرط بررسی در حال اجرا بودن فایل اکسپلورر هست

danialafshari
شنبه 18 فروردین 1397, 23:20 عصر
مشکل بنده دستور بستن نیست
مشکل شرط بررسی در حال اجرا بودن فایل اکسپلورر هست
خب برادر من کافی بود از پست اولم استفاده میکردید

با سلام
اگر سرچ کنید زودتر به نتیجه میرسید
برای کار با Process ها کلاس System.Diagnostics.Process را مطالعه کنید

foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("notepad"))
{
p.CloseMainWindow();
}

https://social.msdn.microsoft.com/Forums/vstudio/en-US/50ecbcf2-d2d3-4f21-9775-5b8be1bd4346/how-to-terminate-a-process-in-c?forum=csharpgeneral
نام پروسس را از TaskManager استخراج کنید
موفق باشید
به صورت متد نوشتمش:

public bool IsExplorer()
{
bool result = false;
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("explorer"))
{
result = true;
}
return result;
}

استفاده:

private void button1_Click(object sender, EventArgs e)
{
var a = IsExplorer();
MessageBox.Show(a.ToString());
}

موفق باشید

Javadprogrammer10
شنبه 18 فروردین 1397, 23:43 عصر
خب برادر من کافی بود از پست اولم استفاده میکردید

به صورت متد نوشتمش:

public bool IsExplorer()
{
bool result = false;
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("explorer"))
{
result = true;
}
return result;
}

استفاده:

private void button1_Click(object sender, EventArgs e)
{
var a = IsExplorer();
MessageBox.Show(a.ToString());
}

موفق باشید

ببخشید این دستوری که نوشتید همش پیغامش true هست

رامین مرادی
یک شنبه 19 فروردین 1397, 09:11 صبح
ببخشید این دستوری که نوشتید همش پیغامش true هست


خب بایدم true باشه. به اون نوشته من توجه نکردید explorer یکی از پروسس های اصلی ویندوزه . دسکتاپ شما .فایل منیجر شما. هر پنجره ای که ظاهر میشه توسط این پروسس مدیریت میشه. همیشه این پروسس از زمان لاگین در حال اجراس. اگه ببندیدش کل دسکتاپتون بسته میشه و فقط یه عکس پس زمینه براتون میمونه.

من متوجه م شما منظورتون چیه. دوستمون کدی که گفتن برای کار شما مناسب نیست . شما باید دنبال بستن فایل منیجر باشید نه اکسپلورر اصلی. کد زیر رو تست کنید و نتیجه رو همینجا بگید.



Process me = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcesses())
{
if (p.Id != me.Id)
p.CloseMainWindow();
}





در ضمن این کد ها رو بهتره تو ماشین مجازی تست کنید .

danialafshari
یک شنبه 19 فروردین 1397, 11:56 صبح
با سلام
من دیگه واقعاً نمیدونم منظور شما چیه!
خب مگر نگفتید



مشکل بنده دستور بستن نیست
مشکل شرط بررسی در حال اجرا بودن فایل اکسپلورر هست


if (فایل اکسپلورر اجرا شد)}
MessageBox.Show("لطفا برنامه فایل اکسپلورر را ببندید");
{

if (IsExplorer())
{
MessageBox.Show("لطفا برنامه فایل اکسپلورر را ببندید");
}


خب کار متد هم همونه وقتی True برگردونه یعنی Explorer بازه
اگر شما بار اول explorer رو میبندید و میخاین دفعه بعدی که کاربر باز کرد مطلع شوید باید کد رو درون تایمر یا حلقه while درون ترد قرار بدید
که راه بهترش اینه با دستور رجیستری TaskManager رو Disable کنید
کار با رجیستری هم در سایت فراوانه، جستجو کنید
موفق باشید

Javadprogrammer10
یک شنبه 19 فروردین 1397, 20:48 عصر
خب بایدم true باشه. به اون نوشته من توجه نکردید explorer یکی از پروسس های اصلی ویندوزه . دسکتاپ شما .فایل منیجر شما. هر پنجره ای که ظاهر میشه توسط این پروسس مدیریت میشه. همیشه این پروسس از زمان لاگین در حال اجراس. اگه ببندیدش کل دسکتاپتون بسته میشه و فقط یه عکس پس زمینه براتون میمونه.

من متوجه م شما منظورتون چیه. دوستمون کدی که گفتن برای کار شما مناسب نیست . شما باید دنبال بستن فایل منیجر باشید نه اکسپلورر اصلی. کد زیر رو تست کنید و نتیجه رو همینجا بگید.



Process me = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcesses())
{
if (p.Id != me.Id)
p.CloseMainWindow();
}





در ضمن این کد ها رو بهتره تو ماشین مجازی تست کنید .

دوست عزیز بنده عرض کردم من نمیخوام فایل اکسپلورر رو ببندم اگه به اولین سوالم دقت کنید می بینید که بستن فایل اکسپلورر یک مثال بود بنده دستوری رو میخوام که بررسی کنه فایل اکسپلورر در حال اجراست یانه

Javadprogrammer10
یک شنبه 19 فروردین 1397, 20:50 عصر
با سلام
من دیگه واقعاً نمیدونم منظور شما چیه!
خب مگر نگفتید



if (IsExplorer())
{
MessageBox.Show("لطفا برنامه فایل اکسپلورر را ببندید");
}


خب کار متد هم همونه وقتی True برگردونه یعنی Explorer بازه
اگر شما بار اول explorer رو میبندید و میخاین دفعه بعدی که کاربر باز کرد مطلع شوید باید کد رو درون تایمر یا حلقه while درون ترد قرار بدید
که راه بهترش اینه با دستور رجیستری TaskManager رو Disable کنید
کار با رجیستری هم در سایت فراوانه، جستجو کنید
موفق باشید
بله متوجه شدم از true اما در صورتی که فایل اکسپلورر بسته بود باز هم پیغام true بود

خیلی ممنون از راهنماییتون مهندس

danialafshari
دوشنبه 20 فروردین 1397, 01:00 صبح
بله متوجه شدم از true اما در صورتی که فایل اکسپلورر بسته بود باز هم پیغام true بود


خیلی ممنون از راهنماییتون مهندس


من کد رو قبلش تست کردم که اینجا گذاشتم
همونطور که توی عکس میبینید به درستی کار میکنه


147904

پروژه رو ضمیمه کردم

Javadprogrammer10
دوشنبه 20 فروردین 1397, 20:33 عصر
من کد رو قبلش تست کردم که اینجا گذاشتم
همونطور که توی عکس میبینید به درستی کار میکنه


147904

پروژه رو ضمیمه کردم

درسته ولی نمیدونم چرا رو سیستم من همش true هست؟!