Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2009, 14:16   #1
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 661
По умолчанию Окно выключения компьютера

Подскажите как отловить момент открытия окна для завершения работы windows. Хотел по названию окна,но не получилось

Код:
var
h:hWnd;
begin
h:=FindWindow(nil, 'Выключить компьютер');
if h=0 then exit;
SendMessage(h, WM_DESTROY, 0,0);
end;
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 27.04.2009, 14:45   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
h:=FindWindow(nil, 'Завершение работы Windows');
SERG1980 вне форума Ответить с цитированием
Старый 27.04.2009, 14:53   #3
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 661
По умолчанию

И так пробовал,не реагирует
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 27.04.2009, 15:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ловить событие WM_QUERYENDSESSION
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.04.2009, 15:36   #5
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Я использовал так :
Код:
// объявление
procedure WMQUERYENDSESSION(var Msg: TMessage);message WM_QUERYENDSESSION;
....
....
....
procedure TPhoneBook1.WMQUERYENDSESSION(var Msg: TMessage);
begin
  inherited;
  // наши действия по поведению программы при завершении Виндоуз
end;
З.Ы.
вот тут брал теорию и кодом ... http://itsecure.org.ua/publ/76-1-0-490
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 27.04.2009, 15:44   #6
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

А можно просто по нажатию кнопки вырубить комп. Вот модуль:
Код:
program reboot;

uses
  Windows, messages;

procedure RebootSystem;
var
  handle_: THandle;
  n: DWORD;
  luid: TLargeInteger;
  priv: TOKEN_PRIVILEGES;
  ver: TOSVERSIONINFO;
begin
  ver.dwOSVersionInfoSize := Sizeof(ver);
  GetVersionEx(ver);
  if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
  begin
    if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle_) then
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
      begin
        priv.PrivilegeCount := 1;
        priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        priv.Privileges[0].Luid := luid;
        AdjustTokenPrivileges(handle_, false, priv, 0, nil, n);
      end
      else
        writeln('Ошибка')
    else
      writeln('Ошибка ');
  end
  else
    writeln('Ошибка ');
  if not ExitWindowsEx(EWX_POWEROFF,1) then
    writeln('Ошибка');
end;

begin
  RebootSystem;
end.
Я знаю, что вопрос не совсем по теме, но всё же может пригодиться!
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 27.04.2009, 15:48   #7
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
А можно просто по нажатию кнопки вырубить комп. Вот модуль:
Вопрос то не в этом ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 27.04.2009, 16:15   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Kotofff
По хорошему нужно еще указать какой результат возвратит обработчик этого сообщения. От результа зависит вырубит ли комп винда или нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.04.2009, 17:46   #9
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Ок. Немного дополню:
Msg.Result := 1 внутри процедуры как бы разрешая продолжать винде завершать работу и Msg.Result := 0 - запретить ей завершать работу ...

З.Ы. У меня так все работало нормально ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 27.04.2009, 18:27   #10
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 661
По умолчанию

Этим мы отлавливаем уже то,что винда пытается завершить работу.
А мне надо,что бы при открытии окна "завершении работы",отловить этот момент.То есть окно открылось и произошло мое действие(не нажимая кнопки завершения винды.

Вот мой вопрос:



Цитата:
Сообщение от Михаил Юрьевич Посмотреть сообщение
Подскажите как отловить момент открытия окна для завершения работы windows. Хотел по названию окна,но не получилось

Код:
var
h:hWnd;
begin
h:=FindWindow(nil, 'Выключить компьютер');
if h=0 then exit;
SendMessage(h, WM_DESTROY, 0,0);
end;
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выключения монитора joker Компьютерное железо 2 25.01.2009 10:55
Перехват выключения компьютера Спартак Общие вопросы Delphi 3 06.03.2008 15:45
Запись времени выключения В_И_К_Т_О_Р Помощь студентам 13 05.02.2008 08:39
Заставить работать Tservise до выключения Windows Alter Общие вопросы Delphi 10 09.12.2007 21:39
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28