ايران ويج

نسخه‌ی کامل: تشخیص خاموش شدن/رست شدن/لاگ اف شدن ویندوز در وی بی6
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
اگه برنامه ای ساختیم که بدون اینکه کاربر ببینتش دائما در سیستم درحال کار کردن باشه، وقتی کاربر سیستم رو ریست یا لاگ آف یا شات داون میکنه، برنامه ی ما چطور این حالت ها رو تشخیص بده؟
مثلا برناممون تشخیص بده که سیستم داره خاموش میشه، و یه کارایی قبل از خاموش شدن سیستم انجام بده
حالا من کاری به تشخیص دادنش ندارم ولی در روند خارج شدن از سیستم عامل تمام برنامه ها بسته میشوند.... پس جای خوبی برای انجام کارهاتون پیدا نکردید. چون ممکنه اولین برنامه ای که بسته شد برنامه شما باشه.

در ضمن فکر نمیکنم api یی یا کدی برای این تشخیص وجود داشته باشه. باید خودتون از روی عوامل ویندوز این رو بدست بیارید. مثلا لیست پروسه های باز رو بگیرید، و وضعیت یک پروسه رو چک کنید (یک پروسه که همیشه باز هست) اگر اون بسته شد یعنی سیستم درحال خاموش شدن هست البته بعید میدونم که برنامه شما بعد از اون بسته بشه!
شما کلا 3 تا راه داری:

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

2- می تونی تو قسمت Unload form هر کاری که موقع بسته شدن لازم داری رو بنویسی

3- اصلا بگو می خوای دقیقا چه کاری انجام بدی تا شاید راه بهتری بهت پیشنهاد کنیم.
اتفاقا برعکس
این برنامه ی منه که اجازه نمیده سیستم خاموش/لاگ آف/ریست بشه
***
ببینید
من برنامه ای نوشتم که دائم در سیستم کاربر در system tray فعاله،

حالا،
وقتی کاربر میخواد سیستمش رو خاموش/لاگ آف/ریست بکنه، سیستم، خاموش/لاگ اف/ریست نمیشه؛ چون برنامه ی من درحال اجراست و فعاله.
درواقع برنامه ی درحال فعالیت من اجازه ی خاموش/لاگ آف/ریست شدن رو به کاربر نمبده و براش مزاحمت ایجاد میکنه
حالا من میخوام از این حالت جلوگیری کنم و برای کاربر مزاحمت ایجاد نکنم
و وقتی کاربر خواست سیستم رو خاموش/لاگ آف/ریست بکنه
برنامه ی من تشخیص بده و خارج بشه و اجازه بده که سیستم خاموش/لاگ آف/ریست بشه

لطفا سورس بگید.
سلام.
نیازی به تشخیص و اجازه دادن نیست. برنامه خودش بسته میشه.
مگر این که شما تو Unload جلوش رو گرفته باشی. یا اگه برنامت تو loop هم باشه شاید همین مشکل پیش بیاد.
مشکل من همین جاست دیگه
نمیدونم چرا برنامم اجازه نمیده که ویندوز خاموش/لاگ اف/ریست بشه
این نکته رو هم بگم
برنامم با پایگاه داده کارمیکنه و زمان اتصال به اینترنت رو هم چک میکنه
خب وقتی ویندوز میخواهد خاموش بشه یه پیغام WM_QUERYENDSESSION به همه برنامه های در حال اجرا ارسال میکنه و بعد از تایید همه برنامه ها برای خاموش شدن یک پیغام WM_ENDSESSION به همه برنامه ها ارسال میشه شما با مانیتور کردن این پیغامها درون برنامتون میتونین این رفتار رو تشخیص بدین

این یه نمونه کد البته به دلفی هست احتمالا کمکتون میکنه

کد:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure WMQueryEndSession
           (var Msg : TWMQueryEndSession) ;
           message WM_QueryEndSession;
~~~~~~~~~~~~~~~~~~~~~~~~~

procedure TForm1.WMQueryEndSession
      (var Msg : TWMQueryEndSession) ;
begin
if MessageDlg('Close Windows ?',
               mtConfirmation,
               [mbYes,mbNo], 0) = mrNo then
   Msg.Result := 0
else
   Msg.Result := 1 ;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~

Procedure WMEndSession
           (var Msg : TWMEndSession) ;
           message WM_ENDSESSION;
~~~~~~~~~~~~~~~~~~~~~~~~~

procedure TForm1.WMEndSession
           (var Msg : TWMEndSession) ;
begin
if Msg.EndSession = TRUE then
   ShowMessage('Windows is shutting down ' + #10#13
               + 'at ' + FormatDateTime('c', Now)) ;
   inherited;
end;
سلام.
نمونه کد به ویبی رو قبلا قرار داده بودم.

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

مجبورم کد پیدا کنم که کنترل بکنه

الان موندم معطل
ای خدا ششی کنم حالا؟!
نقل قول: الان موندم معطل
ای خدا ششی کنم حالا؟!
من نماینده خدا نیستم ولی احتمالا اگه سورس برنامه ات رو بزاری اینجا مشکلت برطرف شه!Wink
باشه ولی میشه بگی چطور میتونم به طور خصوصی ارسال کنم؟
صفحه‌ها: 1 2