61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Столкнулся с проблемой….
Необходимо, что бы при выключении компьютера информация записывалась в лог.
Через 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2015, 20:00
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Samrisbe Посмотреть сообщение
можно ему помочь
Несколько вариантов может быть (выключение, перезагрузка, смена пользователя ......)
0
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,060
04.05.2015, 21:24 6
Цитата Сообщение от swr-15 Посмотреть сообщение
Несколько вариантов может быть
точно, не подумал...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
04.05.2015, 21:25 7
Цитата Сообщение от swr-15 Посмотреть сообщение
Не открывается ссылочка....
Все прекрасно открывается, она просто подтормаживает при открытии на пару секунд. Но там как раз и приведено объяснение и решение проблемы. Правда, 1) по-английски 2) для Дельфи.
1
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
04.05.2015, 21:29  [ТС] 8
Цитата Сообщение от volvo Посмотреть сообщение
Все прекрасно открывается, она просто подтормаживает при открытии на пару секунд. Но там как раз и приведено объяснение и решение проблемы. Правда, 1) по-английски 2) для Дельфи.
УЖЕ ОТКРЫЛ, с 5 раза только.
Перевел, прочитал, только пока не понял, разбираюсь и с Delphi проблема.
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
05.05.2015, 22:07  [ТС] 9
Цитата Сообщение от 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
Сообщений: 634
05.05.2015, 22:10 10
Цитата Сообщение от swr-15 Посмотреть сообщение
if not bForceClose
C++
1
if(!bForceClose)
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
05.05.2015, 22:14  [ТС] 11
Цитата Сообщение от Dr.Xank Посмотреть сообщение
1
if(!bForceClose)
выдает ошибку.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
05.05.2015, 22:48 12
Ошибка, наверняка, очень секретная, что ее нельзя привести здесь?
0
61 / 61 / 5
Регистрация: 12.04.2013
Сообщений: 415
05.05.2015, 23:05  [ТС] 13
Цитата Сообщение от volvo Посмотреть сообщение
Ошибка, наверняка, очень секретная, что ее нельзя привести здесь?
Отловить выключение компьютера
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
05.05.2015, 23:09 14
Читать нужно, а не бегло просматривать и сразу пытаться копипастить код. Ясно же написано:
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  [ТС] 15
Цитата Сообщение от 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
Сообщений: 634
07.05.2015, 18:49 16
Цитата Сообщение от 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  [ТС] 17
Цитата Сообщение от Dr.Xank Посмотреть сообщение
А толку. Где ты ей присвоил значение true?
И что изменилось???
Приложение все равно не работает как нужно.
Кто нибудь знает как правильный код?
оп.rar
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 634
07.05.2015, 20:36 18
Цитата Сообщение от 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  [ТС] 19
Цитата Сообщение от Dr.Xank Посмотреть сообщение
Вы опишите, что вы хотите конкретно.
При выключении (перезагрузке) компьютера в лог файл должна записаться определенная информация и компьютер должен выключиться (перезагрузиться).
С последним кодом, при выключении компьютера, программа закрывается, лог записывается, но компьютер не выключается.
В принципе мой код, на 1-й странице, делает тоже самое.
Продвижений нет...
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 634
07.05.2015, 22:45 20
У Меня среда ХЕ6. Всё работает проект прикрепляю.
А какая у вас ОС?
Вложения
Тип файла: zip ExitProg.zip (1.45 Мб, 6 просмотров)
0
07.05.2015, 22:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2015, 22:45
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru