На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Перезагрузка/выключение Windows. Как?
    Для выполнения перезагрузки/выключения предназначены функции ExitWindows/ExitWindowsEx

    ExitWindows:

    Описание:
     Function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool;
     Иницииpует стандаpтную пpоцедуpу завеpшения pаботы с Windows. Все пpикладные задачи должны подтвеpдить завеpшение pаботы Windows. Вызывает функцию 4CH пpеpывания 21H DOS.

    Паpаметpы:
     Reserved: Установлен в нуль.
     ReturnCode: Значение, пеpедаваемое в DOS (в pегистpе AL).

    Возвpащаемое значение:
     Нуль, если одна или несколько задач отказываются завеpшить pаботу.

    Примеры использования:
     ExitWindows(EWX_LOGOFF,0); - завершение сеанса
     ExitWindows(EWX_SHUTDOWN,0); - выключение компьютера
     ExitWindows(EWX_REBOOT,0); - перезагрузка
     Флаги EWX_FORCE, EWX_POWEROFF и  EWX_FORCEIFHUNG могут комбинироваться к нужному действию.

    ExitWindowsEx:
    Функция ExitWindowsEx() представляет собой расширенный вариант ExitWindows().

    Описание:
     BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved, );
     Функция ExitWindowsEx перезагружает(restart) или выключает систему (shutdown), а также может завершить сессию для текущего пользователя(log off).

    Параметры:
     uFlags -- флаг завершения работы, может принимать следущие значения:
       EWX_LOGOFF завершает сессию текущего пользователя.
       EWX_POWEROFF выключает питание компьютера(компьютер должен поддерживать данную функцию).
       EWX_REBOOT перезагружает систему.
       EWX_SHUTDOWN завершает работу комьпьютера до того места, где он может быть безопасно выключен: сброшенны все файловые буферы на диск, завершает работу всех процессов.
     dwReserved --Зарезирвированно для последующих нужд, параметр игнорируется.

    Возвращаемое значение:
     Не ноль если всё прошло успешно

    Пример использования:
     ExitWindowsEx(EWX_SHUTDOWN,0);
     Остальные примеры смотри в описании первой функции.

    Вышеописанные примеры действительны только для w9x/Me.
    Дело в том, что, чтобы выполнить функциию в NT ОС, нужно получить права на выполнение этой функции. Сделать это можно через AdjustTokenPriviligies.
    С помощью нижеприведённой функции можно получить любую привелегию, в т.ч. и привеленгию SeShutdownPrivilege, которая нужна для разрешения функции ExitWindows(Ex)

    ExpandedWrap disabled
      Function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean ): Boolean; <br>Var TPPrev, <br>      TP: TTokenPrivileges; <br>      Token: THandle; <br>      dwRetLen: DWord; <br>Begin <br> Result:=False; <br> OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @Token ); <br> TP.PrivilegeCount:=1; <br> IF LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID )) then <br>  Begin <br>   IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED <br>               else  TP.Privileges[0].Attributes:=0; <br>   dwRetLen:= 0; <br>   Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen); <br>  End; <br> CloseHandle(Token); <br>End;


    Пример использования для среды NT:
     SetPrivilege('SeShutdownPrivilege',True);
     ExitWindowsEx(EWX_SHUTDOWN,0);

    Тема - элемент ЧАВО. Подготовлена by © Song
    Сообщение отредактировано: Song -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0431 ]   [ 16 queries used ]   [ Generated: 10.04.26, 00:29 GMT ]