السلام عليكم و رحمة الله تعالى و بركاته
[
أنا اليوم حضرت لكم شرح تفصيلي لطريقة إيقاف أو إعلدة تشغيل الكمبيوتر و غيرها من الخيارات المتوفرة في هذه الدالة ... المهم سنبدأ الشرح بإذن الله
**بسم الله الرحمن الرحيم**
أولا :إفتح project جديد ثم تأكد من وجود الوحدة windows في بلوك unit وإذا لم تكن موجودة أضفها ...
ثانيا:ضع 5 أزرار في الفورم وغير خاصية caption لكل منها على الترتيب كما يلي:
الأولى:shutdown
الثانية:reboot
الثالثة:log off
الرابعة:force
الخامسة:power off
ثالثا:أكتب داخل الوحدة الكود التالي:
procedure getshutdownprivilege;//this procedure is used to get the shutdown or reboot or poweroff privilege
var
hdlProcessHandle:cardinal;
hdlTokenHandle:cardinal;
tmpLuid:LUID_AND_ATTRIBUTES;
tkp:TOKEN_PRIVILEGES;
tkpNewButIgnored:TOKEN_PRIVILEGES;
lBufferNeeded:cardinal;
begin
tmpluid.Attributes:=SE_PRIVILEGE_ENABLED;
hdlProcessHandle:= GetCurrentProcess;
OpenProcessToken(hdlProcessHandle,(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY),hdlTokenHandle);
LookupPrivilegeValue('','SeShutdownPrivilege',tmpluid.Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0]:=tmpluid;
AdjustTokenPrivileges(hdlTokenHandle,False,tkp,16,tkpNewButIgnored,lBufferNeeded);
end;الشرح:
هذا الكود في الواقع هو ليس لإيقاف أو إعادة تشغيل الكمبيوتر أو ... ولكنه كود ضروري استعماله خاصة مع windows2000 أو windowsXp
وهو يستعمل للحصول على إمتياز إيقاف أو إعادة تشغيل الكمبيوتر لأنه دون الحصول على الإمتياز لا يمكنك تطبيق الأمر...
و الآن نكون قد وصلنا إلى الخطوة الأهم المتمثلة في كيفية إيقاف أو إعادة تشغيل الكمبيوتر ...
أكتب الكود التالي داخل unit مباشرة:
procedure TForm1.Button1Click(Sender: TObject); begin if not (exitwindowsex(ewx_shutdown,0)) then begin //Shutdown computer getshutdownprivilege; exitwindowsex(ewx_shutdown,0); end; end; procedure TForm1.Button2Click(Sender: TObject); begin if not (exitwindowsex(ewx_reboot,0)) then begin //Restaring computer getshutdownprivilege; exitwindowsex(ewx_reboot,0); end; end; procedure TForm1.Button5Click(Sender: TObject); begin if not (exitwindowsex(ewx_poweroff,0)) then begin //Power off computer getshutdownprivilege; exitwindowsex(ewx_poweroff,0); end; end; procedure TForm1.Button3Click(Sender: TObject); begin if not (exitwindowsex(ewx_logoff,0)) then //Log off computer exitwindowsex(ewx_logoff,0); end; procedure TForm1.Button4Click(Sender: TObject); begin exitwindowsex(ewx_force,0); end;
شرح الكود:
الدالة المستعملة لإيقاف أو إعادة تشغيل الكمبيوتر أو ... هي الدالة Exitwindowsex و نجد فيها الخيارات التالية:
Ewx_shutdown:لإيقاف تشغيل الكمبيوتر.. لتحقيق ذلك لابد من الحصول على الإمتياز
Ewx_Reboot:لإعادة تشغيل الكمبيوتر.. لتحقيق ذلك لابد من الحصول على الإمتياز
Ewx_poweroff:لإيقاف تشغيل الكمبيوتر مباشرة أي دون إظهار الرسالة ... لتحقيق ذلك لابد من الحصول على الإمتياز و لابد أن يكون جهازك يدعم إيقاف
التشغيل المباشر و إذا لم يكن الجهاز يدعم هذه الخاصية سيتم إعادة التشغيل فقط
Ewx_force:لإغلاق جميع التطبيقات العاملة حاليا ... وهو خيار غير آمن
Ewx_logoff:لقطع الإتصال مع الشبكة و تسجيل خروج المستخدم الحالي
الآن و عند تشغيل البرنامج تلاخظ أنه سيحدث عند النقر على:
الزر الأول:إيقاف التشغيل
الزر الثاني:إعادة التشغيل
الزر الثالث:قطع الإتصال مع الشبكة
الزر الرابع:غلق جميع التطبيقات
الزر الخامس:إيقاف التشغيل المباشر
و لأي استفسار الرجاء
الإتصال بيو لتحميل المثال
إضغط هنا