PDA

View Full Version : سوال: جلوگیری از shutdown، restart، و logoff درحین اجرای برنامه



maminb
سه شنبه 29 بهمن 1387, 18:33 عصر
آیا راهی وجود داره که بوسیله اون جلوی shutdown و restart و logoff رو در حین اجرای برنامه گرفت؟ آیا باید از shutdown -a استفاده کرد یا راه دیگری دارد. ممنون می‏شم هر چه زودتر راهنماییم کنید.

maminb
چهارشنبه 30 بهمن 1387, 15:19 عصر
میشه راهنماییم کنین؟

anooshiran
چهارشنبه 30 بهمن 1387, 20:00 عصر
سلام دوست عزيز
وقتي user روي shotdown يا Restart يا loggoff كليك مي كند ويندوز يك پيام WM_QUERYENDSESSION براي بسته شدن به تمام پنجره هاي باز مي فرستد. اگر هر كدام از اين پنجره ها پيام false به OS پس بفزستند به طور اتومات پروسه shutdown كنسل خواهد شد
آنجه شما نياز داريد يك روتين است كه پيام هاي ويندوز را دريافت كند.
sub زير وظيفه اش دريافت پيام هاي ويندوز است كه وقتي پيام بسته شدن مي گيرد آن را False بر مي گرداند




' پيامي كه ويندوز بعد از فشردن كليد شات دان يا ريستارت براي تمامي فرم هاي باز يا برنامه هاي رزيدنت مي فرستد
Private Const WM_QUERYENDSESSION As System.Int32 = &H11
' پيام كنسل كردن شات دان يا ريستارت
Private Const WM_CANCELMODE As System.Int32 = &H1F
'از شات دان يا ريستارت شدن جلوگيري مي كند
Protected Overrides Sub WndProc(ByRef exp As Message)
If exp.Msg = WM_QUERYENDSESSION Then
'پيام ها را باطل مي كند
Dim activeMessage As New Message
activeMessage.Msg = WM_CANCELMODE
MyBase.WndProc(activeMessage)
Else
' پيام نرمال سازي مي فرستد
MyBase.WndProc(exp)
End If
End Sub



در هر صورت اميدوارم كه اين كد مشكلت را حل كند . فقط در نظر داشته باش كه برنامه اي رزيدنتي كه استفاده كرده اي نيز از حافظه خارج خواهتد شد و بايد مجددا آن ها را به حافظه برگرداني

maminb
چهارشنبه 30 بهمن 1387, 20:59 عصر
در هر صورت اميدوارم كه اين كد مشكلت را حل كند . فقط در نظر داشته باش كه برنامه اي رزيدنتي كه استفاده كرده اي نيز از حافظه خارج خواهتد شد و بايد مجددا آن ها را به حافظه برگرداني


ممنون. میشه در مورد قسمت آخر (بازگرداندن مجدد) و نحوه انجامش توضیح بدید؟ و درصورت امکان کدش را بذارید؟

anooshiran
چهارشنبه 30 بهمن 1387, 21:09 عصر
دوست عزيز سلام
من نمي دانم شما چه برنامه ايي را در حافظه رزيدنت كرده ايد. به هر صورت همه آنها نيز يرنامه هايي هستند كه در StartUp سيستم معرفي ميشن.
ميتوني به Startup سيستمت نگاه كني.
مثلا امكان دارد شما YahooMessanger را رزيدنت كرده باشيد
خوب دوباره فراخوانيش كن