Управление завершением работы Windows
Управление завершением работы Windows
Управление завершением работы Windows Как в одном компоненте реализовать выключение компьютера, его перезагрузку, завершение сеанса работы пользователя, функцию eject cd, выключение питания монитора и т. д.? Предлагаем рассмотреть следующий пример: procedure tform1.button1click(sender: tobject); begin powercontrol1.action := actcdeject; // Или... actlogoff, actshutdown... powercontrol1.execute; end; unit powercontrol; interface uses windows, messages, sysutils, classes, controls, forms, graphics, mmsystem; type taction = (actlogoff, actshutdown, actreboot, actforce, actpoweroff, actforceifhung, actmonitoroff, actmonitoron, actcdeject, actcduneject); tpowercontrol = class(tcomponent) private faction: taction; procedure setaction(value: taction); public function execute: boolean; published property action: taction read faction write setaction; end; procedure register; implementation procedure register; begin registercomponents('k2', [tpowercontrol]); end; procedure tpowercontrol.setaction(value: taction); begin faction := value; end; function tpowercontrol.execute: boolean; begin with (owner as tform) do case faction of actlogoff: exitwindowsex(ewx_logoff,1); actshutdown: exitwindowsex(ewx_shutdown,1); actreboot: exitwindowsex(ewx_reboot,1); actforce: exitwindowsex(ewx_force,1); actpoweroff: exitwindowsex(ewx_poweroff,1); actforceifhung: exitwindowsex(ewx_forceifhung,1); actmonitoroff: sendmessage(application.handle, wm_syscommand, sc_monitorpower, 0); actmonitoron: sendmessage(application.handle, wm_syscommand, sc_monitorpower, -1); actcdeject: mcisendstring('set cdaudio door open wait', nil, 0, handle); actcduneject: mcisendstring('set cdaudio door closed wait', nil, 0, handle); end; {case} result := true; end; end.