شما می توانید با ترکیبی از سخت افزار و نرم افزار کامپوترتان را از راه دور خاموش کنید.
در ابتدا سعی کردم از حالت shut down استفاده کنم ،ولی با استفاده از این حالت اگر شما به طور مثال یک برنامه word یا هر برنامه ای دیگر را داشته باشید که ذخیره اش نکرده اید،و بخواهید کامپیوترتان را shut down کنید،با مشکل مواجه می شوید.و سیتم از شما می خواهددر مورد ذخیره کردن یا نکردن برنامه word یا هر برنامه دیگر تصمیم گیری کنید،که تا شما تصمیم گیری نکنید.سیستم shut down نخواهد شد.
برای همین، از حالت hibernateکه اصطلاح انگلیسی آن خواب زمستانی است.استفاده کردم.در این حالت بدون سوال کردن در مورد ذخیره برنامه های موجود سیستم خاموش می شود.حال اگر شما سیستم را دو مرتبه روشن کنید،همان برنامه هایی که هنگام hibernate کردن داشتید را دومرتبه خواهید.دید،علت این است که در حالتی که شما سیستم را Hibernate می کنید اطلاعات موجوداز RAM بر روی HARD کپی می شود.و در هنگام روشن کردن دوباره این اطلاعات از HARD بر روی RAM قرار می گیرد.در این حالت این امکان را دارید.که برنامه هایتان را ذخیره یا حذف کنید.اگر Windows شما XP باشد می توانید.این حالت را در آن براحتی ببینید.
کنترل از راه دور توسط سنسورهای مادون قرمز
تنها چیزی که پس از بستن مدار لینک فوق احتیاج دارید.یک عدد کابل RS232 است.
پس از بستن مدار قسمت فرستنده بر روی یک برد مجزا،قسمت گیرنده را نیز بر روی یک برد مجزا وصل کنید،در این مدار بایست LED را حذف کرده،و به جای آن پین شماره 6 را که DSR می باشد.به جای LED به خروجی پایه 3 آیسی 555 وصل نمایید.پایه 3 را بار دیگر با یک مقاومت 3.3 کیلو به زمین متصل نمایید.زمانیکه شما پالسی را از مدار فرستنده ارسال کنید.قسمت گیرنده این پالس را دریافت کرده.و با دریافت این پالس پین DSR در استاندارد ارسال و دریافت RS232 فعال می شود.با HIGH شدن این پین و با توجه به برنامه ای که به زبان ویژوآل بیسیک نوشته شده است، دریافت این پالس به کامپیوتر اطلاع داده می شود،و کامپیوتر خاموش می شود.
پین 5 کابل RS232 را به زمین تغذیه قسمت گیرنده وصل نمایید.و پین 4 یا DTR را برای مشاهده دریافت پالس توسط قسمت گیرنده به آند یا مثبت LED وصل کنید.سمت کاتد یا منفی LED را به زمین مشترک کابل با قسمت گیرنده متصل نمایید.در این حالت هر زمان که شما پالسی را در قسمت فرستنده ارسال کنید.در قسمت گیرنده علاوه برHIGH شدن پین DSR و Hibernate شدن سیستم،پین DTR نیز HIGH می شود.در واقع با این نوع طراحی شما می توانید.دریافت پالس را با روشن شدن LED نیز مشاهده کنید.
برنامه VB
همانطور که می بینید.، در قسمت general تابع منطقی SetSuspendState معرفی شده است.این تابع جز lib یا کتابخانه powrprof.dll است.که دارای سه مقداردهی boolean یا منطقی است.این سه مقدار به شرح ذیل می باشد. Hibernate،ForceCritical و DisableWakeEvent که تمامی این عبارات boolean هستند.و تنها مقادیر TRUE و FALSE را می گیرند.
البته نحوه معرفی تابع SetSuspendState در زبان های مختلف متفاوت است.و این نوع تعریف مختص VB می باشد.
حال به معرفی عناصر بکار رفته در این تابع می پردازیم.
Hiberanate :با اعلام این عبارت به صورت TRUE کامپیوتر hibernate می شود.در صورتی که این عبارت False باشد.کامپیوتر حالت Suspend یا معلق را دارد.
ForceCritical :در صورت TRUE بودن این عبارت کامپیوتر به سرعت و بی درنگ خاموش می شود.در حالت FALSE بودن اگر کاربرهای دیگری به این سیستم متصل باشند آنها را از Hibernate شدن این سیستم مطلع می کند.
DisableWakeEvent : در صورت TRUE بودن این عبارت کامپیوتر با هر وقفه یا INTERRUPT به حالت Hibernate می رود.این وقفه می تواند.،تکان خوردن موس باشد.
نحوه مقدار دهی این تابع در دستور شرطی IF
پس خط اول برنامه به معرفی این تابع می پردازد.در خط LOAD برنامه،پورت سریال باز می شود،که buadrate یا نرخ ارسال دریافت در آن 80 است.در صورتی که در این پورت وسیله دیگری مثل موس باشد با پیغام خطایی مبنی بر اینکه این پورت آزاد نیست.مواجه خواهید شد.
در قسمت Form_Unload پورت سریالی که باز شده با بستن برنامه توسط کاربر و دستور CLOSECOM بسته خواهد شد.
در قسمت تایمر نیز برنامه همواره آماده است.تا پالس را که شما از دستگاه فرستنده ارسال می کنید را دریافت کند.در واقع اگر شما این پالس را بفرستید.پین DSR مقدار 1 را دریافت می کند.در این هنگام پین DTR نیز HIGH یا یک می شود و LED متصل به آن روشن می شود.استفاده از پین DTR صرفا جهت نشان دادن دریافت پالس در گیرنده و اطمینان شما از دریافت پالس می باشد.در این هنگام تابع SetSuspendState نیز اجرا می شود و سیستم را بی درنگ خاموش می کند.
در دستور شرطی IF بعدی بیان شده که در صورت دریافت نشدن پالس پین DTR بی دلیل HIGH نشود.
Private Declare Function SetSuspendState Lib " powrprof.dll" (ByVal Hibernate As Long, ByVal ForceCritical As Long, ByVal DisableWakeEvent As Long) As Long Private Sub Form_Load() If OPENCOM("COM2:80,N,8,1") = 0 Then MsgBox "COM2 not free" End Sub Private Sub Form_Unload(Cancel As Integer) CLOSECOM End Sub Private Sub Timer1_Timer() If DSR = 1 Then DTR 1 SetSuspendState True, True, False End If End Sub