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

سعی میکنم بعد ها هم این پست رو آپدیت کنم و از دوستان دیگه هم میخوام تا به زبان های دیگه هم بنویسن :)

تا جایی که بتونم سعی میکنم ساده و مرحله به مرحله توضیح بدم.

عسل متلب :

فرض کنید یه برنامه به زبان سی شارپ ساختین و دوست ندارین برنامه تون به این سادگی ها از کاربری که ازش استفاده میکنه دل بکنه.

بیایید ابتدا بررسی کنیم که چیا باعث میشه تا کاربر از برنامه دل بکنه و بینشون فاصله بیوفته :)

1 - اون دکمه ی قرمز رنگی که علامت ضربدر داره و گوشه ی بالا وایمیسته

2 - آی کن برنامه روی نوار وظیفه ی پایین ویندوز

3 - کلیدهای مسخره ی Alt + F4

4 - برنامه ی مزخرف Task manager

5 - اینو بعدا میگم ;)

خوب حالا بیایید یکی یکی اینارو دور بندازیم


اولی دکمه قرمز رنگ ضربدر یا همون دکمه ی Close باکلاسا

برای این دکمه دوتا کار میتونیم بکنیم

یکی بدون کد نویسی دیگری با کدنویسی

بدون کد نویسی :

بازم دوتا روش داره که میتونید هر کدوم جالب تر بود انتخابش کنید

اول : تو تنظیمات فرم گزینه ی Form Boarder Style  رو بزارین روی None

دوم : تو تنظیمات فرم گزینه ی Control Box  رو بزارین رو حالت False

با این دوتا تنظیمات اون دکمه های گوشه ی بالا از بین میرن

با کد نویسی :

ابتدا کتابخونه زیر رو اضافه کنید

using System.Runtime.InteropServices;

بعد کدهای زیر رو

private const int SC_CLOSE = 0xF060;
private const int MF_GRAYED = 0x1;
[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")]
private static extern int EnableMenuItem(IntPtr hMenu, int wIDEnableItem, int wEnable);

بعد از کد زیر در فرمتون قرار بدین

public Form1()
{
InitializeComponent();
}

حالا برای فرم لود برنامه تون هم کد زیر رو قرار بدین

EnableMenuItem(GetSystemMenu(this.Handle, false), SC_CLOSE, MF_GRAYED);

اگه برنامه تون رو استارت کنید میبینید که دکمه ی Close غیر فعال شده


دومی آی کن برنامه بود میدونید که هر برنامه ای وقتی اجرا میشه آی کنش روی نوار وظیفه ی پایین دسکتاپ دیده میشه و با کلیک راست کردن روی اون میتونیم برنامه رو ببندیم

برای جلوگیریش در تنظیمات فرم تون مقدار Show in Taskbar رو False کنید


در کد نویسی همیشه راهکارهای زیادی وجود داره و بی شک با گذشت زمان راهکار های بهتری هم پیدا میشه

شاید ابتدای شروع آموزش با خودتون گفته باشین خوب ماوس و کیبورد رو غیر فعال میکنیم و ... تمام

آموزش غیر فعال کردن ماوس و کیبورد رو بارها و بارها در پست ها و کامنت های مختلف بحث کردیم و دیگه کمتر کسی از مخاطبای این وب در غیر فعال کردنش باید مشکل داشته باشن

به همین خاطر در این پست نمیخوام درباره غیر فعال کردن ماوس و کیبورد بحث  کنم

برای جلوگیری از بسته شدن برنامه از طریق کلید های Alt + F4 

در تنظیمات فرمتون به صفحه Events برین و عبارت Form Closing رو پیدا کنید و روش دوبار کلیک کنید و تکه کد زیر رو توش بنویسید

e.Cancel = true;

تمام.

دیگه لازم نیست برای Alt یه دستور بدین و برای F های کیبورد یه دستور و ... یا لازم نیست کل کیبورد رو غیر فعال کنید


روش دیگه ی بسته شدن برنامه به کمک برنامه task manager هستش

یکی از دوستان گفته بود چطور Ctrl + Alt + Delete را از روی کیبورد غیر فعال کنیم تا کاربر نتونه وارد تسک منیجر برای غیر فعال کردن برنامه مون بشه؟

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

بهترین راه غیر فعال کردن خود تسک منیجر هسسش

اینجا دوتا کد میگم یکی برای غیر فعال کردن و دیگری برای فعال کردن تسک منیجر

تا بتونید تستش کنید

ابتدا کتابخونه زیر رو اضافه کنید

using Microsoft.Win32;

بهتره دوتا دکمه به برنامه اضافه کنید و یکی رو فعال و دیگری رو غیر فعال اسم گزاری کنید

دوتا کلاس زیر رو به صفحه کدها اضافه کنید

غیر فعال کردن :

public void ToggleTaskManager()
{
RegistryKey objRegistryKey = Registry.CurrentUser.CreateSubKey(
@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
if (objRegistryKey.GetValue("DisableTaskMgr") == null)
objRegistryKey.SetValue("DisableTaskMgr", "1");
else
objRegistryKey.DeleteValue("DisableTaskMgr");
objRegistryKey.Close();
}

فعال کردن :

 public void SetTaskManager(bool enable)
{
RegistryKey objRegistryKey = Registry.CurrentUser.CreateSubKey(
@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
if (enable && objRegistryKey.GetValue("DisableTaskMgr") != null)
objRegistryKey.DeleteValue("DisableTaskMgr");
else
objRegistryKey.SetValue("DisableTaskMgr", "1");
objRegistryKey.Close();
}

حالا روی دکمه فعال دوبار کلیک کنید و کد زیر رو براش تعریف کنید

SetTaskManager(Enabled);

و برای دکمه ی غیر فعال کردن

ToggleTaskManager();

حالا اگه دکمه ی استارت رو برای تست کردن برنامه بزنید بعد از کلیک کردن روی دکمه ی فعال کردن متوجه میشین که برنامه خطا میده و نمیتونه کارش رو انجام بده

شما باید برنامه از طریق Run as administrator اجراش کنید تا بخوبی کار کنه

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

سعی میکنم بازم آپدیت کنم

سر افراز باشید