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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2009, 07:43   #1
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
Стрелка Как запретить выключение компьютера?

Здравствуйте.

Кто-нибудь знает, как убрать кнопку "Выключить компьютер", из меню "Пуск"? Не "выход из системы", а именно "выключить компьютер"!

Похоже, без перезагрузки IE или даже компа - это невозможно?

Ещё лучше, или как вариант, - переназначить её, на своё приложение .

Сразу ответ вопрос, "зачем?": очень часто вставляешь, например, флешку для длительного копирования, и уходя с работы забываешь её вытащить.....

Или ещё какие-нибудь вещи ПЕРЕД выключением забываешь сделать. Если бы при этом залочить кнопку выключения - проблема была бы решена

Поиск путей решения проблемы штатными средствами венды дал отрицательный результат. Может, возможны программные решения?

Ловить событие венды, на выключение, похоже, бесполезно - приложения всё равно начинают выгружаться, и "быть первым" возможности нет...?

Может, у кого-нибудь будут какие-нибудь идеи? Самоорганизацию и тренировку внимательности не предлагать
AnTe вне форума Ответить с цитированием
Старый 01.07.2009, 08:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Самоорганизацию и тренировку внимательности не предлагать
Почему бы и нет?
Впрочем есть два варианта:
1 - Взять твикер и с его помошью поотключать кнопки пуска.
2 - (рекомендуемый) Создать несколько пользователей на машине. и входить в свой сеанс, тогда можно заблокировать машину (Кнопкой WinKey+L)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 08:24   #3
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
2 - (рекомендуемый) Создать несколько пользователей на машине. и входить в свой сеанс, тогда можно заблокировать машину (Кнопкой WinKey+L)
не, такое не подойдёт. Это напоминалка, для самого себя. типа, "сегодня, по окончании работы скопируй папку с проектами на флеху!!", которое вылетит при попытке выключения компа.

про твикер...
уже нашлось ещё лучшее решение
Цитата:
Поиск путей решения проблемы штатными средствами венды дал отрицательный результат.
Он уже положителен:
1)
HKEY_CURRENT_USER\Software\Microsof t\Windows\Curre ntVersion\Policies\Explorer
Параметр DWORD с именем Noclose = 1

2) gpedit.msc

Теперь три вопроса,
1. как бы отключать программно? Почему-то, когда вручную создаю указанный ключ реестра, изменения применяются не сразу. А после редактирования gpedit.msc - моментально. В реестре появляется тот же ключ. Что делает gpedit.msc, после изменения параметра ключа?

2. Может, всё же есть возможность ПЕРЕНАЗНАЧЕНИЯ кнопки "выключить компьютер", или перехвата события выключения "первым", когда ещё никто не начал разгружаться?

3. Как программно наиболее "корректно" выключить компьютер? В инете масса различных кодов для этой операции. Какой выполняется, при нажатии кнопки "Пуск"? Можно ли её программно "нажать"?
AnTe вне форума Ответить с цитированием
Старый 01.07.2009, 08:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
AnTe
Плохая идея. Я в качестве напоминальника использовал Chamelion Clоck
или записки на рабстоле.
Цитата:
А после редактирования gpedit.msc - моментально
Скорее всего потому что gpedit.msc сообщение посылает всем окнам об изменении реестра
Цитата:
Как программно наиболее "корректно" выключить компьютер?
Уже обсуждалось - ExitWindowsEx. На форуме уже обсуждалось.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 09:15   #5
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Плохая идея. Я в качестве напоминальника использовал Chamelion Clоck
Смотрел и его. В нём нет будильника, "на выключение". А конец рабочего дня, по времени, у меня не нормирован. "Свободный график"

Цитата:
Сообщение от Stilet Посмотреть сообщение
или записки на рабстоле.
Да кто ж их читает то? Бумажный стикер на экран налепишь - и то, убегая, забудешь перечитать. За раб.день привыкаешь

Цитата:
Сообщение от Stilet Посмотреть сообщение
Скорее всего потому что gpedit.msc сообщение посылает всем окнам об изменении реестра
О! Это вариант! Наверное, нужно меню "пуск" слать? А как это сделать, не подскажете?

Цитата:
Сообщение от Stilet Посмотреть сообщение
Уже обсуждалось - ExitWindowsEx. На форуме уже обсуждалось.
Мне кажется, что WinExec('Shutdown -s -t 0', SW_HIDE) - будет "правильнее"....

а вот что на самом деле выполняется при нажатии "завершение работы", в меню "пуск" - загадка

ps похоже, я не один озадачен данной проблемой http://programmersforum.ru/showthrea...=ExitWindowsEx
AnTe вне форума Ответить с цитированием
Старый 01.07.2009, 10:26   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А как это сделать, не подскажете?
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE , 0, 0);
кажись
Цитата:
За раб.день привыкаешь
Приучи себя. Это будет лучше.

Или поставь прогу копирования в автозапуск, и она скинет не при выходе из винды а при входе. Какая разница вечером ты сольешь или утром, если слив все равно будет между рабочим временем, зато при включении компа ты сможешь автоматом запустить прогу слива. (лично я так поступаю)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 13:30   #7
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE , 0, 0);
кажись
Спасибо, попробую

Цитата:
Сообщение от Stilet Посмотреть сообщение
Приучи себя. Это будет лучше.
ну, тут я процитирую сам себя:
Цитата:
Сообщение от AnTe Посмотреть сообщение
Самоорганизацию и тренировку внимательности не предлагать

каким образом себя приучить ежедневно проводить пустые манипуляции, когда надобность в них возникает, в среднем, раз в неделю?

на работе тут поговорил о подобном приложении - народ завалил вопросами "когда же будет готово". Просят включить проверку нахождения диска в сидюке, и дискеты во флопике.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Или поставь прогу копирования в автозапуск, и она скинет не при выходе из винды а при входе. Какая разница вечером ты сольешь или утром, если слив все равно будет между рабочим временем, зато при включении компа ты сможешь автоматом запустить прогу слива. (лично я так поступаю)
Разница огромна. Когда я прихожу утром на работу - надобности копировать на флешку результатов вчерашней работы нет. Я ведь прям с ними и продолжаю работать. А вот когда ухожу домой, чтобы ночью, или на выходных, посидеть над проблемой - есть. И если флешка таки забыта в компе (такое было, и не раз) - все планы рушатся.
AnTe вне форума Ответить с цитированием
Старый 01.07.2009, 13:45   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну не знаю... Я это обычно ручками в тотале делаю...

Есть вариант отлавливать сообщение о завершении работы... Но повторюсь - этоне лучшая стратегия.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 15:45   #9
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Если надо заблокировать выключение компа или ещё что-нибудь, то всё можно найти здесь: http://programmersforum.ru/showthread.php?t=54664
Я выложил свои модули и в них куча всяких процедур и функций для работы с системой. Там же есть процедуры для выключения, перезагрузки и т.д.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 03.07.2009, 05:54   #10
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
Если надо заблокировать выключение компа или ещё что-нибудь, то всё можно найти здесь: http://programmersforum.ru/showthread.php?t=54664
Я выложил свои модули и в них куча всяких процедур и функций для работы с системой. Там же есть процедуры для выключения, перезагрузки и т.д.
Спасибо. Однако, глядя на процедуру блокирования выключения, можно заметить, что она как раз и меняет ту самую ветку реестра (кстати, лучше использовать try..finally):

Код:
procedure NoClose(Block: Boolean);
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True);
    if Block then
    begin
      Reg.WriteInteger('NoClose', 1);
      Reg.Free;
    end
    else
    begin
      Reg.WriteInteger('NoClose', 0);
      Reg.Free;
    end;
  except
    Reg.Free;
  end;
end;
То есть, изменения происходят не моментально. И в первые минуты после запуска, в системе ничего не меняется.

Дописал, предложенный Stilet "SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE , 0, 0);". Применяются моментально.

Но два замечания.
1. почему-то, после SendMessage, происходит какой-то глюк, с основным окном программы: на несколько секунд оно "зависает" (возможно, окон, для рассылки слишком много?)

2. Данное изменение реестра не убирает кнопку "выключить компьютер", из меню "Пуск". Просто, после блокировки, попытке нажать на неё, вылазит системное сообщение:

---------------------------
Ограничения
---------------------------
Операция отменена вследствие действующих для компьютера ограничений. Обратитесь к администратору сети.
---------------------------
ОК
---------------------------


А если отключать её в настройках gpedit.msc, то она вовсе исчезает, что, несомненно, удобнее. Видимо, оно ещё что-то отключает....
AnTe вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выключение компьютера через определенное время V@mpir Общие вопросы Delphi 7 28.06.2009 00:33
Выключение компьютера Delphi Vladya Помощь студентам 5 10.02.2009 14:24
Выключение компьютера aesoem Общие вопросы Delphi 2 03.07.2008 16:50
выключение, перезагрузка компьютера ATL Win Api 4 16.05.2007 01:57
выключение компьютера Svop Общие вопросы Delphi 23 18.12.2006 22:57