On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
администратор




Пост N: 7636
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.04.22 17:54. Заголовок: Как поймать событие винды ?


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 40 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 4109
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.22 19:08. Заголовок: Dima пишет Возможно ..


Dima пишет
 цитата:
Возможно ли узнать из Harbour момент ухода компа в гибернацию , перезагрузку , выключение компа ?


Есть события в windows, но hb их не ловит (обработчика событий внешнего нет, как сейчас не знаю, уже не слежу)
WM_QUERYENDSESSION
WM_ENDSESSION
Можно сделать, на пример hmg программу, для теста, которая будет ловить эти сообщения и по handle твоей проги делать WM_CLOSE, при получении выше указанных сообщений. Тестовая программа нужна для понимания, а выдает ли windows эти сообщения. Столкнулся, что на 10 есть настройка (в google находил как делать, правда давно было) и по умолчанию сообщений не было (у большинства клиентов). Т.к. PC чужие и админ прав нет, то похерил эту тему обработки этих событий. Оставил обработку только в модуле управления LetoDb[f] (запуск как daemon), на всякий случай. Стараюсь max работать открыл таблицу - сделал - закрыл, сохраняя что надо делать в раб. файлах. При запуске работы, если раб. файл есть, то повторяю его на таблицу и удаляю (когда связанные действия с неск. таблицами это важно). Работает такая схема норм, но копии не отменяются, некоторые (важные) делаются в момент получения форм или выборок в спец. каталог без участия пользователя

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7637
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.04.22 19:13. Заголовок: Понял тебя , спасибо..


Понял тебя , спасибо , буду думать

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7245
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.04.22 02:05. Заголовок: Я делал тестовую про..


Я делал тестовую прогу.
Может тебе пригодиться.
https://cloud.mail.ru/public/daHi/tDFsy6oxD

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7638
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.22 12:20. Заголовок: Попытался дёрнуть из..


Попытался дёрнуть из Минигуи функцию SETGLOBALLISTENER и облом
при сборке , ругается на HB_CRITICAL_T s_lst_mtx
Подскажет кто как правильно ковырнуть от туда эту функцию ?

 
#pragma BEGINDUMP

#include "Windows.h"
#include <commctrl.h>
#include "hbapiitm.h"
#include "hbvm.h"
#include "hbapi.h"
#include "hbapierr.h"
#include "hbwapi.h"

static HB_CRITICAL_T s_lst_mtx;
#define HMG_LISTENER_LOCK HB_CRITICAL_LOCK( s_lst_mtx );
#define HMG_LISTENER_UNLOCK HB_CRITICAL_UNLOCK( s_lst_mtx );


HB_FUNC( SETGLOBALLISTENER )
{
const char * pszNewName = hb_parc( 1 );

if( pszNewName && hb_dynsymIsFunction( hb_dynsymGet( pszNewName ) ) )
{
HMG_LISTENER_LOCK;
g_ListenerDyns = hb_dynsymGet( pszNewName ); hb_retl( HB_TRUE );
HMG_LISTENER_UNLOCK;
}
else
hb_retl( HB_FALSE );
}

#pragma ENDDUMP



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4110
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.22 13:58. Заголовок: Dima У тебя же не x..


Dima
У тебя же не xHb ?!
Выкинь лишнее с ним связанное
 
#ifdef __XHARBOUR__
static HB_CRITICAL_T s_lst_mtx;
#define HMG_LISTENER_LOCK HB_CRITICAL_LOCK( s_lst_mtx );
#define HMG_LISTENER_UNLOCK HB_CRITICAL_UNLOCK( s_lst_mtx );
#else

static HB_CRITICAL_NEW( s_lst_mtx );
#define HMG_LISTENER_LOCK hb_threadEnterCriticalSection( &s_lst_mtx )
#define HMG_LISTENER_UNLOCK hb_threadLeaveCriticalSection( &s_lst_mtx )
#endif /* __XHARBOUR__ */


HB_FUNC( GETGLOBALLISTENER )
{
if( NULL != g_ListenerDyns )
hb_retc( hb_dynsymName( g_ListenerDyns ) );
else
hb_retc_null();
}

HB_FUNC( SETGLOBALLISTENER )
{
const char * pszNewName = hb_parc( 1 );

if( pszNewName && hb_dynsymIsFunction( hb_dynsymGet( pszNewName ) ) )
{
HMG_LISTENER_LOCK;
g_ListenerDyns = hb_dynsymGet( pszNewName ); hb_retl( HB_TRUE );
HMG_LISTENER_UNLOCK;
}
else
hb_retl( HB_FALSE );
}

HB_FUNC( RESETGLOBALLISTENER )
{
HMG_LISTENER_LOCK;
g_ListenerDyns = hb_dynsymGet( DEFAULT_LISTENER );
HMG_LISTENER_UNLOCK;
}

static size_t AppEventScan( EVENTSHOLDER * events, UINT message )
{
size_t i, nPos = 0;

for( i = 0; i < events->count; i++ )
{
if( message == events->events[ i ].message )
{
nPos = ( i + 1 ); break;
}
}

return nPos;
}


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4111
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.22 15:07. Заголовок: Dima Смотрю gtwwt.c..


Dima
Смотрю gtwwt.c
static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
...
сообщения (выше) есть в ней
...
 
case WM_QUERYENDSESSION: /* check if we can shutdown or logoff */
return 1;

#if defined( WM_ENDSESSION )
case WM_ENDSESSION: /* shutdown started */
if( wParam )
hb_vmRequestQuit();
return 0;
#endif

case WM_CLOSE: /* Clicked 'X' on system menu */
...

т.е. сборка hb с defined( WM_ENDSESSION ) может ловить их, но можно тогда и свое добавить, раз речь осборке

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7639
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.22 15:38. Заголовок: супер , попробую :s..


супер , попробую

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4112
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.22 16:12. Заголовок: Dima пишет я понял д..


Dima пишет
 цитата:
я понял достаточно в Main процедуре это задефайнить или в модуле gtwwt.c ?


Думаю hb надо пересобрать, сделав, например, так
 
static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
...
case WM_QUERYENDSESSION: /* check if we can shutdown or logoff */
hb_vmRequestQuit();
return 1;

case WM_ENDSESSION: /* shutdown started */
hb_vmRequestQuit();
return 1;

case WM_CLOSE: /* Clicked 'X' on system menu */
...

Можно цивильнее подойти, подцепив блоки кода
SetKey(1111111, {|| Nil \ hb_vmRequestQuit() }) // case WM_QUERYENDSESSION: /* check if we can shutdown or logoff */
SetKey(1111112, {|| Nil \ hb_vmRequestQuit() }) // case WM_ENDSESSION: /* shutdown started */
добавив в процедуру на case ... типа нажатия клавиши _PushKey(...), но не помню уже как это делать в wwt на С, т.е.
 
case WM_QUERYENDSESSION: /* check if we can shutdown or logoff */
_PushKey(...) // hb_vmRequestQuit();
return 1;

case WM_ENDSESSION: /* shutdown started */
_PushKey(...) // hb_vmRequestQuit();
return 1;

но может и не прав с таким подходом

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7640
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.22 18:36. Заголовок: Сергей всё оказалось..


Сергей всё оказалось проще :)
Когда выполняется hb_vmRequestQuit() , в этом случае выполняется Exit Procedure.
Слепил такую , работает однако , проверил
 
EXIT PROCEDURE MyExit()
dbcloseall()
ferase(hb_CurDrive()+":\"+CurDir()+"\"+'boots.dat')
RETURN


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7641
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.22 18:49. Заголовок: а вот как ловить гиб..


а вот как ловить гибернацию не понятно
достаточно будет ловить только PBT_APMSUSPEND или нет ?

по идее достаточно
 
PBT_APMSUSPEND: ; // переход в спящий режим
PBT_APMRESUMESUSPEND: ; // выход из спящего режима, инициированный пользователем (например, нажата клавиша)
PBT_APMRESUMEAUTOMATIC: ; // выход из спящего режима


Попробовал , не ловит .........

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7642
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.22 19:37. Заголовок: Пробнул такой строко..


Пробнул такой строкой решить не поймало ....
 
case WM_POWERBROADCAST:
if( wParam == PBT_APMSUSPEND )
hb_vmRequestQuit();
return 1;


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4113
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.22 20:31. Заголовок: Dima пишет Когда вып..


Dima пишет
 цитата:
Когда выполняется hb_vmRequestQuit() , в этом случае выполняется Exit Procedure.
Слепил такую , работает однако , проверил


С этим ясно, у меня есть vwt программки, как утилитки на разное ..., в них всегда есть INIT и EXIT PROCEDURE со всяким.
Я не понял WM_... (выше) поймались или нет ?

 цитата:
достаточно будет ловить только PBT_APMSUSPEND или нет ?


Power Management Events не ловились события, как и WM_QUERYENDSESSION, WM_ENDSESSION на разных PC где то есть, но в большинстве случаях нету. Потому и закрыл эту лавочку, как писал в самом начале.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7643
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.22 20:48. Заголовок: SergKis пишет: WM_Q..


SergKis пишет:

 цитата:
WM_QUERYENDSESSION, WM_ENDSESSION


у меня в WIN7 поймалось нормально
Завтра попробую вот такое , если "смерч" или "ураган" не прилетит в дом , ну ты в курсе что у нас война......
 
case WM_POWERBROADCAST:
if ( (wParam = PBT_APMSUSPEND) || (wParam = PBT_APMSTANDBY) || (wParam = PBT_APMQUERYSUSPEND) || (wParam = PBT_APMQUERYSTANDBY))
hb_vmRequestQuit();
return 1;



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4114
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.22 21:02. Заголовок: Dima пишет у меня в ..


Dima пишет
 цитата:
у меня в WIN7 поймалось нормально


В win 7,8 было OK!
А в 10 случился казус, на раб. местах, клиентских с Leto, перестало ловится (disconnect не случается), вставил log, так их нет, этих сообщений. Пришлось костыли городить.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4115
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.22 07:57. Заголовок: Dima пишет Завтра по..


Dima пишет
 цитата:
Завтра попробую вот такое , ......

case WM_POWERBROADCAST:
if ( (wParam = PBT_APMSUSPEND) || (wParam = PBT_APMSTANDBY) || (wParam = PBT_APMQUERYSUSPEND) || (wParam = PBT_APMQUERYSTANDBY))
hb_vmRequestQuit();
return 1;


Добавил в пример Андрея
 
FUNCTION App_OnEvents( hHwnd, nMsg, wParam, lParam )
...
ELSEIF nMsg == WM_DESTROY // 2
? HB_TSTOSTR( HB_DATETIME() ) , "Event arrived - WM_DESTROY", ProcNL() ; ? "."
RETURN 1

ELSEIF nMsg == WM_POWERBROADCAST
? HB_TSTOSTR( HB_DATETIME() ) , "Event arrived - WM_POWERBROADCAST", ProcNL(), wParam
? "PBT_APMQUERYSUSPEND =", wParam == PBT_APMQUERYSUSPEND
? "PBT_APMQUERYSTANDBY =", wParam == PBT_APMQUERYSTANDBY
? "PBT_APMSUSPEND =", wParam == PBT_APMSUSPEND
? "PBT_APMSTANDBY =", wParam == PBT_APMSTANDBY
?
RETURN 1

ENDIF

RETURN Events( hHwnd, nMsg, wParam, lParam)

Получил у себя выкл.\вкл. по кнопке и закрыл\открыл экран ноута

2022-04-14 07:43:11.715 Launching the program Call from: MAIN(55) --> demo.prg
2022-04-14 07:44:34.269 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 4
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .T.

PBT_APMSTANDBY = .F.

2022-04-14 07:44:59.371 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 18
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .F.
PBT_APMSTANDBY = .F.

2022-04-14 07:44:59.948 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 7
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .F.
PBT_APMSTANDBY = .F.

2022-04-14 07:45:49.100 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 4
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .T.

PBT_APMSTANDBY = .F.

2022-04-14 07:46:58.395 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 18
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .F.
PBT_APMSTANDBY = .F.

2022-04-14 07:46:59.148 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 7
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .F.
PBT_APMSTANDBY = .F.

2022-04-14 07:47:49.460 Closing the program Call from: MYEXITPRG(103) --> demo.prg
.

т.е. работает на моей 10, думаю, сработает и у клиента. Поправлю либу, версию проги, проверю

PS. Засыпание по времени дает
 
2022-04-14 08:31:46.579 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 4
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .T.

PBT_APMSTANDBY = .F.

2022-04-14 08:36:42.972 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 7
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .F.
PBT_APMSTANDBY = .F.

2022-04-14 08:36:42.972 Event arrived - WM_POWERBROADCAST Call from: APP_ONEVENTS(164) --> demo.prg 18
PBT_APMQUERYSUSPEND = .F.
PBT_APMQUERYSTANDBY = .F.
PBT_APMSUSPEND = .F.
PBT_APMSTANDBY = .F.

2022-04-14 08:36:58.464 Closing the program Call from: MYEXITPRG(103) --> demo.prg
.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7644
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.04.22 09:18. Заголовок: SergKis пишет: Dima..


SergKis пишет:

 цитата:
Dima пишет
цитата:
Завтра попробую вот такое , ......

case WM_POWERBROADCAST:
if ( (wParam = PBT_APMSUSPEND) || (wParam = PBT_APMSTANDBY) || (wParam = PBT_APMQUERYSUSPEND) || (wParam = PBT_APMQUERYSTANDBY))
hb_vmRequestQuit();
return 1;



Не ловится на Win7...
Сергей а как на Cи после case WM_POWERBROADCAST: сделать запись в файл скажем в корень
диска C: и туда пихнуть wParam ?
Ну что бы понимать ловится вообще WM_POWERBROADCAST или нет а если ловится что приплыло в wParam

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4116
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.22 09:39. Заголовок: Dima пишет Не ловитс..


Dima пишет
 цитата:
Не ловится на Win7...


Положил программу (поправленную) от Андрея, попробуй у себя на 7-ке. Должна в лог вывести ловит\не ловит.

 цитата:
как на Cи после case WM_POWERBROADCAST: сделать запись в файл скажем в корень


Дима, надо смотреть тексты hb, может готовое есть. Сам я еще тот С-шник.
Потому и предлагал вариант с SetKey(1111111, {|| ... }), чтобы цеплять, что то дополнительное
PS
hb исходники уже давно не смотрю, т.к. в раб. версии исп. hb от 2018 г., с msvc 2019 исп. hb от 2020 г., остальное это версии hmg и в основном, как тесты. Пробнул только hmg unicode, как утилитку небольшую, полет нормальный. Переводить на нее вряд ли получится. Фирму купили литовцы, так что сижу до конца года в режиме "сопровождения" программ

PS2. нашел у себя Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7645
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.04.22 10:09. Заголовок: SergKis пишет: Поло..


SergKis пишет:

 цитата:
Положил программу (поправленную) от Андрея, попробуй у себя на 7-ке


Да ловит
SergKis пишет:

 цитата:
PS2. нашел у себя Скрытый текст


Из меня сишник ни какой и чего с этим делать не знаю , ладно придумаю что то

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7646
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.04.22 12:45. Заголовок: Все понятно...не лов..


Все понятно...не ловится совсем WM_POWERBROADCAST из gtwwt.c
Выключение и перезагрузку ловит.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4117
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.22 13:37. Заголовок: Dima пишет Все понят..


Dima пишет
 цитата:
Все понятно...не ловится совсем WM_POWERBROADCAST из gtwwt.c


т.е. не входит в case WM_POWERBROADCAST или case 0x0218
или не ловит
if ( (wParam == PBT_APMSUSPEND) || (wParam == PBT_APMSTANDBY) || (wParam == PBT_APMQUERYSUSPEND) || (wParam == PBT_APMQUERYSTANDBY))

 цитата:
Выключение и перезагрузку ловит


У меня этих сообщений нет, а предыдущие есть.
Кинь свой test пробну у себя, что выдаст

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7647
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.04.22 14:52. Заголовок: SergKis пишет: if (..


SergKis пишет:

 цитата:
if ( (wParam == PBT_APMSUSPEND) || (wParam == PBT_APMSTANDBY) || (wParam == PBT_APMQUERYSUSPEND) || (wParam == PBT_APMQUERYSTANDBY))


Это я отключил пока
SergKis пишет:

 цитата:
т.е. не входит в case WM_POWERBROADCAST


да не входит
SergKis пишет:

 цитата:
Кинь свой test пробну у себя, что выдаст


Теста нет , на живой проге тестю .......правленный gtwwt.c я иак понял тебя не устроит так же как и либа gtwvt под Mingw

PS
Думаю гибернация или сон не смертелен для локальной проги и открытых баз , так что бог с ним , пусть гибернируют ))

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 327
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 14.04.22 19:48. Заголовок: Dima пишет: так что..


Dima пишет:

 цитата:
так что бог с ним , пусть гибернируют ))



сделай таймер по активности пользователя, если бездействует то завершай прогу

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7648
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.04.22 19:53. Заголовок: MIKHAIL пишет: сдел..


MIKHAIL пишет:

 цитата:
сделай таймер по активности пользователя, если бездействует то завершай прогу


давно уже сделан.
1 час неактивности и выброс из проги.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 328
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 14.04.22 21:27. Заголовок: Dima попробуй в план..


Dima попробуй в планировщике создать задание по записи события в журнале системы по коду события

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7491
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.23 16:49. Заголовок: Сетка из 2-х компов...


Сетка из 2-х компов. Сервер Win11 , локальный комп Win10.
Прога МиниГуи на Win10 иногда зависает, экран белым становиться и вот такое окно появляется.

А можно как то отловить это событие ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 2176
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.07.23 17:04. Заголовок: Andrey пишет: отлов..


Andrey пишет:

 цитата:
отловить это событие ?


Уже обсуждалось здесь

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8096
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.05.25 18:48. Заголовок: А посылает ли винда ..


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 2437
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.05.25 19:43. Заголовок: Когда приложение при..



 цитата:
Когда приложение принудительно закрывается в Диспетчере задач Windows, оно получает сообщение WM_ENDSESSION с параметром lParam, установленным в ENDSESSION_CLOSEAPP. Это сообщение сигнализирует приложению о том, что сеанс Windows завершается и приложение должно закрыться.

Если приложение не обрабатывает это сообщение или не закрывается в течение определенного времени, Windows отправляет сообщение WM_QUIT, которое завершает работу приложения.


Увы, это не соответствует действительности.
На самом деле,

 цитата:
При принудительном завершении через Диспетчер задач:

Windows не отправляет WM_CLOSE, WM_QUIT, или другие сообщения Windows API.

Вместо этого используется функция TerminateProcess, которая немедленно завершает процесс на уровне операционной системы.

Это обход стандартного механизма завершения — никакие окна не уведомляются, никакие обработчики сообщений не вызываются.




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8097
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.05.25 21:50. Заголовок: gfilatov2002 Понял ..


gfilatov2002
Понял , спасибо.
То есть отреагировать приложение не сможет.....ну и ладно

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8098
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.05.25 17:06. Заголовок: SergKis Решил я сно..


SergKis
Решил я снова поиграться с WM_POWERBROADCAST.
И изначально я зациклился на gtwvt.c о котором ты писал и о правках в нём.
Но я же юзаю GTWVG и глянул сырцы и поправил gtwgud.c и gtwvgd.c
в плане реакции на WM_ENDSESSION и WM_POWERBROADCAST с учетом wParam ,
пересобрал , чекнул , всё ловит отлично.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4726
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.05.25 17:31. Заголовок: Dima :sm36: GTWVG..


Dima

GTWVG - это продвинутый наследник gtwvt, так что "Правильным путем идете, товарищ"

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8100
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.05.25 17:55. Заголовок: SergKis Сергей прив..


SergKis
Сергей привет !
А можно как то понять в EXIT PROCEDURE , в неё я попал
в результате __QUIT() (я понимаю что это есть hb_vmRequestQuit) сделанный в самой программе
или я туда попал из модуля GTWVG в результате срабатывания WM_QUERYENDSESSION ||
WM_ENDSESSION и тд и тоже вызовом hb_vmRequestQuit ?

PS
Можно конечно через PUBLIC переменную объявленную в программе и скажем в самой
проге перед __QUIT() присваивать ей например 1 , изначально она 0
Если в Exit Proc видим что переменная имеет значение 0 значит __Quit был
из GTWVG

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4729
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.05.25 18:45. Заголовок: Dima Что дает в EXI..


Dima
Что дает в EXIT PROCEDURE (я не пробовал) посмотри
i := 0
While !Empty( ProcName( i++ )) ; ? i, Procname( i ) ; End

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8101
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.05.25 19:09. Заголовок: SergKis Понял пробн..


SergKis
Понял пробну (тоже интересно), но все же успел переделать как выше и писал

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8102
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.05.25 12:50. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что дает в EXIT PROCEDURE (я не пробовал) посмотри


Собственно ни чего интересного
И если строго по твоему коду то вернет
1 , имя EXIT процедуры
2, пусто
Я переделал i++ на ++i
и тогда вернет
1 , имя EXIT процедуры
А вот приёмчик с переменной сработал нормально и теперь можно понять откуда ноги растут

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4731
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.25 14:39. Заголовок: Dima пишет Собственн..


Dima пишет
 цитата:
Собственно ни чего интересного


Странно, по идее, __QUIT() должна была отметиться в списке

 цитата:
А вот приёмчик с переменной сработал нормально и теперь можно понять откуда ноги растут


т.к. ты собираешь свой hb, то переменную перенести можно в добавленный код обработки (ее значения, например)
WM_QUERYENDSESSION -> 2
WM_ENDSESSION -> 1
__QUIT() -> 0
тогда в прикладной программе никаких переменных с присваиванием не было бы

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8103
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.05.25 16:52. Заголовок: SergKis Поправка :..


SergKis
Поправка
Код вставил не туда а в функцию которая вызывается из EXIT PROCEDURE
Если его вставить непосредственно в EXIT PROCEDURE , то стёк процедур пуст.
Вероятно он просто обнуляется при выполнении __QUIT()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4732
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.25 18:44. Заголовок: Dima Тогда вариант с..


Dima Тогда вариант с переменной остается

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8106
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.05.25 14:18. Заголовок: SergKis пишет: Powe..


SergKis пишет:

 цитата:
Power Management Events не ловились события, как и WM_QUERYENDSESSION, WM_ENDSESSION на разных PC где то есть, но в большинстве случаях нету. Потому и закрыл эту лавочку, как писал в самом начале.


На ряде компов появились ложные срабатывания и прога просто закрывалась после запуска.
Тоже закрыл эту лавочку в плане Power Management Events

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 702
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 06.06.25 15:16. Заголовок: METHOD HandEvent(nMs..


METHOD HandEvent(nMsg, nWParam, nLParam) class TWindow
if nMsg=WM_QUERYENDSESSION.or.nMsg=WM_ENDSESSION //ловит выключение компа, давно работает без ошибок

endif

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 40 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 11
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет