نمایش نتایج 1 تا 3 از 3

نام تاپیک: اجرای برنامه هنگام خاموش شدن

  1. #1
    کاربر تازه وارد آواتار MBeigy
    تاریخ عضویت
    فروردین 1382
    پست
    79

    اجرای برنامه هنگام خاموش شدن

    سلام خدمت همگی
    کسی از دوستان میتونه بگه که چطور میشه یه برنامه رو درست مثل استارت آپ، ولی موقع خاموش شدن دستگاه اجرا کرد؟

  2. #2
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    در ویندوز چنین امکانی وجود ندارد، اما میتوان اینکار را با یک حقه انجام داد.
    به اینصورت که یک برنامه بصورت رزیدنت در حافظه باشد (در حال اجرا باشد، اما عکس‌العمل خاصی تا زمان موردنظر انجام ندهد). برای انجام اینکار ابتدا برای جلوگیری از اعمال ناخواسته مانند بسته شدن برنامه توسط کاریر بهتر است فرم اصلی برنامه را مخفی کنید. برای انجام اینکار در پروسیجر OnCreate فرم اصلی از این دستور استفاده کنید:
    Application.ShowMainForm:=False;

    در صورتی که بخواهید آنرا از لیست Task List نیز حذف کنید میتوانید از رویه زیر استفاده کنید:
    //Add this code in interface section of your unit.
    const
    RSPSIMPLESERVICE = 1;
    RSPUNREGISTERSERVICE = 0;

    function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord;
    stdcall; external 'KERNEL32.DLL';

    // In implementation section, where you need to HIDE from TASK LIST (Ctrl-Alt-Del LIST)
    // call following command:
    RegisterServiceProcess(GetCurrentProcessID, RSPSIMPLESERVICE);

    // And call this to re-appear in the TASK LIST
    RegisterServiceProcess (GetCurrentProcessID, RSPUNREGISTERSERVICE);


    حالا برسیم به اصل ماجرا:
    در روال OnCloseQuery فرم اصلی، کد موردنظری که میخواهید هنگام خروج از ویندوز اجرا شود را بنویسید.
    هنگام بسته شدن یک فرم این پروسیجر بصورت اجباری اجرا میشود. وقتی ویندوز میخواهد Shutdown کند یک Message به تمام Process های در حال اجرا میفرستد و به آنها دستور میدهد به اجرای خود خاتمه دهند. برنامه شما نیز هنگام دریافت آن Message و بستن فرم مربوطه این پروسیجر آن فرم را اجرا میکند. نکته جالب اینستکه تا زمانی که شما اجازه بسته شدن را برای این فرم صادر نکنید ویندوز Shutdown نخواهد شد. چه جوری؟
    اینجوری که پروسیجر OnCloseQuery یک پارامتر بنام CanClose دارد. اگر شما مقدار False به این پارامتر بدهید فرم شما از بسته شدن توسط ویندوز امتناع خواهد کرد مگر اینکه بصورت اجباری توسط تابع KillProcess ویندوز بسته شود. در هر صورت چنین کدی منظور شما را تامین خواهد کرد:
    CanClose:=False;
    // do some stuff here
    If some_condition then CanClose:=True;

    (در صورت نیاز کد فوق را در پروسیجر OnCloseQuey فرم اصلی وارد کنید.)

    همین!

    خوش باشید.

  3. #3
    کاربر تازه وارد آواتار MBeigy
    تاریخ عضویت
    فروردین 1382
    پست
    79
    سلام دلفی اسیستنت عزیز
    دقیقا گرفتم که چیکار باید بکنم. ممنون. :P

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •