Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415

Отловить выключение компьютера

04.05.2015, 20:00. Показов 2570. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Столкнулся с проблемой….
Необходимо, что бы при выключении компьютера информация записывалась в лог.
Через FormClose не работает, поэтому отлавливаю WM_QUERYENDSESSION.
Вот код .cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
void __fastcall TForm1::WMEndSession(TMessage &msg)
{
if (msg.Msg == WM_QUERYENDSESSION || msg.Msg==WM_ENDSESSION)
        {
        AnsiString file = "log.txt";
        TStringList *list = new TStringList;
        if (FileExists(file))
                {
                list->LoadFromFile(file);
            }
        list->Add("**************** Выключение ************");
        list->SaveToFile(file);
        delete list;
        Form1->Close();
        Cl=true;
        }
}
//---------------------------------------------------------------------------
Код .h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
private:    // User declarations
            bool Cl;
            void __fastcall WMEndSession(TMessage &msg);
 
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
            BEGIN_MESSAGE_MAP                                             
            MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,WMEndSession)
            MESSAGE_HANDLER(WM_ENDSESSION, TMessage, WMEndSession)
            END_MESSAGE_MAP(TForm)
};
Проблема в том, что лог записывается, но компьютер не выключается с первого раза, со второго выключается.
Подскажите в чем проблема.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2015, 20:00
Ответы с готовыми решениями:

Выключение компьютера
Извините но вопрос такой не могу разобратся , есть свое приложение, программа ,записывает в файл с веб камеры если нажимаю на кнопку стоп...

Выключение компьютера
Уважаеммы программисты.я пишу программу и мне нужно чтобы при нажатии на кнопку компьютер выключался или при нажатии на другую кнопку...

Выключение компьютера
Хочу сделать программу, которая будет выключать компьютер, если он не используется в течении 15 минут в т.ч сетевой. Программа надо будет...

22
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
04.05.2015, 20:09
Почитай вот это: Be careful with FormCloseQuery
1
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
04.05.2015, 20:11  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Почитай вот это: Be careful with FormCloseQuery
Не открывается ссылочка....
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
04.05.2015, 21:10
Цитата Сообщение от swr-15 Посмотреть сообщение
но компьютер не выключается с первого раза
а в лог записывается при первом выключении, если да то можно ему помочь выключиться сразу как в лог запишет))
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
04.05.2015, 21:22  [ТС]
Цитата Сообщение от Samrisbe Посмотреть сообщение
а в лог записывается
Да записывается и программа закрывается.
Если второй раз выключать, то выключается нормально.

Добавлено через 1 минуту
Цитата Сообщение от Samrisbe Посмотреть сообщение
можно ему помочь
Несколько вариантов может быть (выключение, перезагрузка, смена пользователя ......)
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
04.05.2015, 21:24
Цитата Сообщение от swr-15 Посмотреть сообщение
Несколько вариантов может быть
точно, не подумал...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
04.05.2015, 21:25
Цитата Сообщение от swr-15 Посмотреть сообщение
Не открывается ссылочка....
Все прекрасно открывается, она просто подтормаживает при открытии на пару секунд. Но там как раз и приведено объяснение и решение проблемы. Правда, 1) по-английски 2) для Дельфи.
1
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
04.05.2015, 21:29  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Все прекрасно открывается, она просто подтормаживает при открытии на пару секунд. Но там как раз и приведено объяснение и решение проблемы. Правда, 1) по-английски 2) для Дельфи.
УЖЕ ОТКРЫЛ, с 5 раза только.
Перевел, прочитал, только пока не понял, разбираюсь и с Delphi проблема.
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
05.05.2015, 22:07  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
для Дельфи.
Если я правильно понял нужно добавить это
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose = true;
if (???????????)
   {
     CanClose = false;
   }
  else
  CanClose = true;
}
//---------------------------------------------------------------------------
но как на ++ написать
Pascal
1
if not bForceClose
Подскажите....
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
05.05.2015, 22:10
Цитата Сообщение от swr-15 Посмотреть сообщение
if not bForceClose
C++
1
if(!bForceClose)
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
05.05.2015, 22:14  [ТС]
Цитата Сообщение от Dr.Xank Посмотреть сообщение
1
if(!bForceClose)
выдает ошибку.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
05.05.2015, 22:48
Ошибка, наверняка, очень секретная, что ее нельзя привести здесь?
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
05.05.2015, 23:05  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Ошибка, наверняка, очень секретная, что ее нельзя привести здесь?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
05.05.2015, 23:09
Читать нужно, а не бегло просматривать и сразу пытаться копипастить код. Ясно же написано:
bForceClose here is a global boolean variable, signaling that we should force our application closing
Она у тебя описана?
1
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
06.05.2015, 22:26  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Она у тебя описана?
Да.
в .h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
private:    // User declarations
                        bool bForceClose;//обр
            bool Cl;
            void __fastcall WMEndSession(TMessage &msg);
 
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
            BEGIN_MESSAGE_MAP                                             
            MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,WMEndSession)
            MESSAGE_HANDLER(WM_ENDSESSION, TMessage, WMEndSession)
            END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Приложение не закрывается вообще, только завершить процесс. Лог при этом не пишет.
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
07.05.2015, 18:49
Цитата Сообщение от swr-15 Посмотреть сообщение
Цитата Сообщение от volvo Посмотреть сообщение
Она у тебя описана?
Да.
А толку. Где ты ей присвоил значение true?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 void __fastcall TForm1::WMEndSession(TMessage &msg)
{
   if (msg.Msg == WM_QUERYENDSESSION)// || msg.Msg==WM_ENDSESSION)
   {
        AnsiString file = "log.txt";
        TStringList *list = new TStringList;
        if (FileExists(file))
           list->LoadFromFile(file);
 
        list->Add("**************** Выключение ************");
        list->SaveToFile(file);
        delete list;
        Cl=true;
        bForceClose = true;// это забыл
        Sleep(100);
        Application->Terminate();
 
   }
}
Цитата Сообщение от swr-15 Посмотреть сообщение
Приложение не закрывается вообще, только завершить процесс. Лог при этом не пишет.
Правильно. По тому, что ты ни где не дал значение bForceClose. И у тебя всегда срабатывает
C++
1
2
3
4
if (!bForceClose)
   {
      CanClose = false;
   }
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
07.05.2015, 20:00  [ТС]
Цитата Сообщение от Dr.Xank Посмотреть сообщение
А толку. Где ты ей присвоил значение true?
И что изменилось???
Приложение все равно не работает как нужно.
Кто нибудь знает как правильный код?
оп.rar
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
07.05.2015, 20:36
Цитата Сообщение от swr-15 Посмотреть сообщение
И что изменилось???
Приложение все равно не работает как нужно.
Кто нибудь знает как правильный код?
Вы опишите, что вы хотите конкретно.

В действие закрытие программы, если bForceClose ==false то форма на щелчке крестика не закроется. А при выключение компа, программа закроется и все отработает.


C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose = true;
if (!bForceClose) 
   {
     CanClose = false;// если bForceClose == false то форма не закроется на щелчке крестика
   }
  else
  CanClose = true;
}
Да еще чуть не забыл у вас условие
C++
1
2
3
4
if (FileExists(file))
{
   list->LoadFromFile(file);
}
если файла рядом с программой не будет то ни чего не создаться и не запишется.
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
07.05.2015, 20:58  [ТС]
Цитата Сообщение от Dr.Xank Посмотреть сообщение
Вы опишите, что вы хотите конкретно.
При выключении (перезагрузке) компьютера в лог файл должна записаться определенная информация и компьютер должен выключиться (перезагрузиться).
С последним кодом, при выключении компьютера, программа закрывается, лог записывается, но компьютер не выключается.
В принципе мой код, на 1-й странице, делает тоже самое.
Продвижений нет...
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
07.05.2015, 22:45
У Меня среда ХЕ6. Всё работает проект прикрепляю.
А какая у вас ОС?
Вложения
Тип файла: zip ExitProg.zip (1.45 Мб, 6 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2015, 22:45
Помогаю со студенческими работами здесь

Выключение компьютера
Подскажите, как на c# или с++ программно, спустя n минут, после запуска этой программы, выключался компьютер. n даётся на выбор:15,30,60...

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

выключение компьютера
как переделать эту программу, чтоб после истечения установленного времени компьютер выключался?(здесь по истечению времени звуковой сигнал)...

Выключение компьютера
Какой командой можно просто выключить компьютер? Как я понял halt и shutdown только перезагружают.

Выключение компьютера
Здравствуйте. Прошу помочь решить проблему. Было два компьютера, оба похожи (AM2, DDR2, PCI-E). У одного сгорела материнская плата,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru