PDA

View Full Version : چطور بفهمونیم که سیستم در حال Shutdown هستش ؟؟



vahab_vb
جمعه 04 اسفند 1385, 21:13 عصر
وقتی میخوایم سیستم رو Restart یا Shutdown کنیم. به محض انجام اینکار، نرم افزارهائیکه باز هستند. بصورت خودکار بوسیله سیستم عامل ویندوز بسته میشوند.
حالا ما چطور میتونیم این فرمان ویندوز رو به برناممون بفهمونیم. که یعنی وقتی درخواست خاموش شدن کامپیوتر صادر میشه. برنامه ما ، منابع خاصی رو قبل از اون ببنده.

نپرسید چرا. مشخصه. بعضی مواقع هست که نرم افزارهای ما در ظاهر دیده نمیشند و بصورت پنهان هستند. و از طرفی از منابعی هم استفاده میکنن. مثل مثلا winsock.dll وقتی به این منابع وصل باشن. اونوقت بیشتر مواقع بخاطر همین یک برنامه، دیگه کلید Restart کار نمیکنه. یعنی هرچی روش کلیک میکنیم. فایده ای نداره. و به محض End Process کردن برناممون دیگه Restart کار میکنه.

آیا راهی، کامپوننتی، چیزی دارید ؟
ممنون

saeed_rezaei
شنبه 05 اسفند 1385, 10:20 صبح
می تونی یه اسکریپت بنویسی که قبل از خاموش شدن سیستم منابع رو بگیره و یا به برنامت خبر بده که منابعش رو بگیره.

Bahram0110
شنبه 05 اسفند 1385, 10:33 صبح
من چنین برنامه ای رو برای دلفی دارم (سورس) که وقتی سیستم بخواد شات داون بشه به کاربر اطلاع می ده و از کاربر برای خاموش شدن اجازه می گیره
ولی برای وی بی پیدا نکردم
اگه خواستی سورس دلفی رو بزارم

vahab_vb
شنبه 05 اسفند 1385, 10:55 صبح
نه من منظورم اینا نبود. دوباره سوال رو بخونید.
من منظور یک دستور نیست. من منظورم یک Property هستش. یعنی چیزی که چیزی رو برگردونه. نه کاری رو انجام بده !!!!!
ولی ممنونم از لطفتون

vahab_vb
شنبه 05 اسفند 1385, 10:55 صبح
می تونی یه اسکریپت بنویسی که قبل از خاموش شدن سیستم منابع رو بگیره و یا به برنامت خبر بده که منابعش رو بگیره.

چطوری ؟ میشه بگید لطفا.
ممنون

Nabi
شنبه 05 اسفند 1385, 12:17 عصر
سلام ،

هدفت رو واضح نگفتی !

1. هدفت اینه برنامت به صورت خودکار برنامه های در حال اجرا رو تشخیص بده و تک تک رو ببنده و اصولی شات دون کنه ؟
اگر منظورت همین بوده ، این جوابت:
http://www.iranvig.com/816.html
http://www.iranvig.com/2970.html
http://www.iranvig.com/2205.html

2. هدفت تشخیص برنامه های در حال اجراست و تصمیم گیری اینکه باهاشون چیکار کنی ؟
اگر منظورت همین بوده ، این جوابت:
http://www.iranvig.com/559.html

سورس های بیشتری خواستی تو www.iranvig.com جستجو کن.

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

saeed_rezaei
شنبه 05 اسفند 1385, 12:23 عصر
start > run > gpedit.msc > computer configaration >windows setting > script>shutdown
اینجا می تونی یه اسکرییپت، فایل، یا بچ فایل رو اد کنی که هر وقتی سیستم خاموش می شه اجرا شه.
البته به پارامترهای فایل shutdown هم یه نگاهی بندازی چندنکته جالب توش می بینی که واسه فایلهای دسته ای توصیه می شه. منظورم اینه که اگه یه فایل دسته ای رو تو مسیری که بهت دادم گذاشتی حتما جهت اجرای بهتر سیستم باید دستور shutdown رو با پارامترهای لازم به انتهای فایلت اضافه کنی شاید چیزی شبیه این shutdown -s -t 0.
پارامترها رو اینجوری به دست بیار.
run ..
cmd
shutdown /?

vahab_vb
شنبه 05 اسفند 1385, 12:52 عصر
بله، درسته ولی من میخوام این برنامه رو بصورت نصبی در اختیار همه قرار بدم. اونوقت چطوری، روی رجیستریشون تغییرات بدم که توی سیستم عاملهای مختلف Conflict نکنه ؟

میگم خوبه از winsock معمولی، همون شیء خود کامپوننتها استفاده کنم. که اینقدر دردسر نداشته باشه.

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

vahab_vb
شنبه 05 اسفند 1385, 12:54 عصر
لطف کردید آقا نبی ایشالا جبران میکنم. ولی نفهمیدید منظورم چی بود. یا حق

SeniorDevs
شنبه 05 اسفند 1385, 13:20 عصر
سلام،

دوست عزیز معین کردن زمان Shutdown شدن ویندوز در زبان VB6 بسیار ساده و در عین حال حرفه ای است. در زبان VB6 ما دارای Event ی به نام QueryUnload هستیم که یک آرگومان به نام UnloadMode دارد و به شکل زیر می شود از آن استفاده کرد:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

'// Destroy All "Objects" And Empty All "Variables" From The RAM Memory.

Select Case UnloadMode

Case 0 '// User Has Selected 'Close' Command From The Control Menu Box On The Form.
Case 1 '// The 'Unload' Statement is Invoked From Our Code.
Exit Sub
Case 2 '// Windows Session is Ending.
Case 3 '// MS Windows Task Manager is Closing The Program.
Case 4 '// MDI Parent is Closing.
Case 5 '// The Form is Closing Because Its Owner is Closing.
End Select

End Sub

vahab_vb
شنبه 05 اسفند 1385, 14:39 عصر
جناب SeniorDevs اطلاعاتی که شما دادید واقعا کامل بود. و حتی تا حالا به ذهن من هم نرسیده بود که این Event یک همچین کارهائی هم میتونه انجام بده.
خیلی لطف کردید که این اطلاعات با ارزش رو در اختیار من گذاشتید. ولی من اینکار رو کردم. یعنی روی حالت عادی که کدهای شما کار میکنه. ولی در حالتیکه winsock بوسیله یک برنامه دیگه در حافظه باز هستش. دیگه این Event کار نمیکنه.
نمیدونم چرا ؟ یعنی اصلا کامپایلر توش نمیره، چه برسه به اینکه آرگومانهای توش رو اجرا کنه.
و در کل ممنون از لطفتون

SeniorDevs
شنبه 05 اسفند 1385, 16:08 عصر
دوست عزیز وقتی که شما برنامه ای را با هر زبان برنامه نویسی بنویسید در هنگام لود شدن ابتدا یک میله (Thread) به CPU متصل می گردد و سپس یک time ی بر حسب میلی ثانیه به Thread اجرایی برنامه اختصاص داده می شود و CPU فقط مثلا به اندازه 2ms برنامه شما را انجام می دهد و سپس به سراغ برنامه دیگری می رود و به همین ترتیب تا اخر.

و اما مشکل شما کجاست؟

هنگامی که شما از آن Class Winsock یک نمونه ایجاد می کنید و سپس دستور اتصال به اینترنت و دانلود یا آپلود را به آن می دهید چون این Object روی Thread اجرایی برنامه شما فعال است بنا براین برنامه شما دیگر به Event های دیگر پاسخ نمی دهد.

نحوه حل این مشکل فقط و فقط استفاده از تکنولوژی Multi-Threading می باشد که این امر به سطح اطلاعات بسیار بسیار بالایی نیاز دارد که بعید می دانم که شما در مدت زمان کمتر از 6 ماه بتوانید انرا بیاموزید.

اصلا هر برنامه ایی که شما می بینید با اینترنت ارتباط موثر و کارا دارد مانند برنامه هایی که وب سایت دانلود می کنند حداقل از 16 Thread همزمان استفاده می کنند تا بتوانند کار های موازی انجام دهند.

مثلا شما در هر بازی که تهیه کنید می بینید همزمان شما دستور حمله می دهید و همزمان موسیقی متناسب با آن دستور پخش می شود و همزمان برنامه میزان پیشرفت بازی شما را اندازه گیری می کند و همزمان برنامه مرحله بازی را Render میکند و همزمان دستورات متفاوتی به DirectX ارسال می کند و ... حال آیا اگر برنامه می خواست تمام این کارها را به ترتیب انجام دهد که نمیشد اصلا بازی کرد چون ابتدا صدا پخش می شد و بعد کاراکتر حرکت می کرد و غیره. بنابراین باید کار های موازی با استفاده از Multi-Threading انجام داد.