PDA

نسخه کامل مشاهده نسخه کامل : خارج شدن از وضعیت Hibernate



zerosector
08-02-2008, 23:37
سلام
چگونه وقتی ویندوز از وضعیت Hibernate خارج شد یک دستوری را اجرا کنم ؟

توضيح بيشتر:
فرض کنید برنامه در حال اجرا باشد و سیستم را با استفاده از قابلیت Hibernate خاموش کنید بار دیگر که ویندوز بالا می آید،برنامه ای که در حال کار با آن بوده اید پیش روی شما خواهد بود،در این لحظه من می خوام یک دستوری را اجرا کنم

با تشكر

mehdibarghi
09-02-2008, 00:09
سلام ؛
برای این کار شاید بتوان با در آوردن زمان روشن بودن سیستم با استفاده از API این کار را انجام داد . البته این کار را دقیق دقیق نمیتوان انجام داد ... چون که مثلاً اگه طرف برنامه رو همون ابتدای کار باز کرد ممکن است به مشکل بر بخورید (البته می توان آنرا نیز رفع کرد ) ولی در کل قابل اجرا است . می توانید از الگوریتمی که در زیر نوشته ام استفاده کنید :

1- یک متغیر از نوع bol تعریف می کنیم و مقدار اولیه آنرا برابر false قرار می دهیم
2- در یک تایمر مثلا 120 ثانیه ای مقدار آن متغیر را برابر true قرار می دهد و تایمر را غیر فعال می کند .
3- در یک تایمر دائماً زمان روشن بودن سیستم را چک می کنیم
3- اگر زمان روشن بودن سیستم کمتر از 100 ثانیه بود و در عین حال مقدار متغیر true بود یعنی کامپیوتر hybernet بوده و کد مورد نظر رو اجرا می کنیم

توضیح :
برای توضیح روش بالا ابتدا باید بدانیم که hybernet چه کار می کند ...
در hybenet به زبان ساده بگم که تمام اطلاعات توی رم رو در یک فایل ذخیره می کنه و بعد از راه اندازی مجدد ویندوز اون رو باز یابی میکنه ... پس وقتی بعد از بالا آمدن ویندوز برنامه مونو می بینیم برنامه در حقیقت دوباره اجرا نمیشه ... بلکه ما دوباره اونو میبینیم ... پس تمام تایمر ها و سایر کنترلهای در برنامه به همون حالت قبلی هستن ولی در طرف دیگر قضیه زمان روشن بودن سیستم یکی از پارامترهایی است که در بایوس می باشد پس این مورد تغییر می کند و ما هم با استفاده از این روش این کار را انجام می دهیم ..
برای این کار ما دو شرط داریم : یکی اینکه اولاً برنامه بیشتر از زمام مورد نظر اجرا شده باشد و دوماً اینکه برنامه در ابتدای راه اندازی اجرا شده باشد و این دو شرط زمانی باهم برقرارند که ویندوز را hybernet کرده باشیم ... پس به این صورت عمل می کند ... در اولین بار اجرا ی برنامه یک تایمر که هر 120 ثانیه یک بار است عمل می کند و بعد از 120 ثانیه مقدار یک متغیر را true می کند و برنامه به کار خود ادامه می دهد ...
اگر بعد از 120 ثانیه از اجرای برنامه ویندوز را hybernet کنیم با بالا آمدن دوباره ویندوز در برنامه یک تایمر دیگر هم هست که چک می کند که اگر زمان بالا آمدن ویندوز کمتر از 100 ثانیه بود و در عین حال متغیر true بود کد مورد نظر ما در مورد hybernet عمل کند ... همانطور که می دانید این امر ( متغیره true باشه و زمان بالا آمدن ویندوز کمتر از 120 ثانیه باشه) عملاً ممکن نیست مگر آنکه ویندوز hybernet شده باشد ...

لازم به ذکر است که بگم یک مشکل این روش داره و اون اینه که مثلاً اگه شما برنامه رو اجرا کنید و در کمتر از 120 ثانیه (پس از اجرا) ویندوزو hybernet کنید کار نمی کند ...
شاید APi خاصی مربوط به این مورد باشد که من بلد نیستم

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

majid_kntu
09-02-2008, 09:57
روش خوبيه!اينو امتحان كن:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته من از ثانيه و روز استفاده كردم بايد دقيقه،ساعت،ماه،سال هم بهش اضافه بشه.
مثلا اگه كاربر امروز ساعت 8:30 ويندوز رو Hibernate كنه و فردا ساعت 8:30 اونو Resume كنه برنامه متوجه نميشه.

zerosector
09-02-2008, 15:50
با تشكر از توجه شما دوستان و ممنون كه راهنمايي كرديد

MrJamshidy
09-02-2008, 23:29
روش خوبيه!اينو امتحان كن:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته من از ثانيه و روز استفاده كردم بايد دقيقه،ساعت،ماه،سال هم بهش اضافه بشه.
مثلا اگه كاربر امروز ساعت 8:30 ويندوز رو Hibernate كنه و فردا ساعت 8:30 اونو Resume كنه برنامه متوجه نميشه.

جالب بود دوست عزیز

در کل موفق باشید