Detectar que o Windows está sendo desligado

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

Pessoal,

Existe alguma função que detecte que o windows está sendo desligado ou logoff ? para proteger o sistea de eventuais perdas de dados.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Detectar que o Windows está sendo desligado

Mensagem por fladimir »

Não sei como isso é possível...

Mas tem um tópico no fórum Xailer falando sobre isto... dá pra ter uma ideia e quem sabe te ajude... segue link

Parece q é algo relacionado ao WM_ENDSESSION message do Windows...

Aki fala sobre como mandar encerrar o Windows... quem sabe da pra nesse código pensar em algo pra saber se esta sendo desligado.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

Olá Fladimir,

Eu achei essa informação no MSDN mas não sei como implementar.

https://msdn.microsoft.com/pt-br/librar ... s.85).aspx

WindowProc callback function

An application-defined function that processes messages sent to a window. The WNDPROC type defines a pointer to this callback function.

WindowProc is a placeholder for the application-defined function name.

Código: Selecionar todos

LRESULT CALLBACK WindowProc(
  _In_ HWND   hwnd,
  _In_ UINT   uMsg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

Código: Selecionar todos

LRESULT CALLBACK windowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    //...       
    case WM_QUERYENDSESSION: return TRUE;       
    case WM_ENDSESSION: 
         if(wParam) PostQuitMessage(0);         
    break;    
    default:
        return DefWindowProc(hwnd,msg,wParam,lParam);
    }

    return FALSE;
}
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

A situação é a seguinte, um processo é iniciado em um determinado horário e não pode ser interrompido, mas no momento do processo, o servidor fez um shutdown ou logoff isso precisa ser interceptado para que a aplicação faça um registro "em que pé tá o processamento", será que eu viajei muito ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Detectar que o Windows está sendo desligado

Mensagem por JoséQuintas »

Não entendi.
Porque precisa saber se o Windows desligou?
Não é só a rotina saber se terminou?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

Quintas,

A questão não é saber que o windows desligou e sim que ele está sendo encerrado, pescou?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Detectar que o Windows está sendo desligado

Mensagem por JoséQuintas »

Código: Selecionar todos

IF File( "naoterminou.txt" )
   MsgExclamation( "Rotina não foi terminada na vez anterior" )
   RETURN
ENDIF
MemoWrit( "naoterminou.txt", "teste" )
DO WHILE .NOT. Eof()
    SKIP
ENDDO
CLOSE DATABASES
fErase( "naoterminou.txt" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

Quintas,

A situação é em uma atualização critica, tem que iniciar e finalizar sem interrupções.
Sei que em caso de processo incompleto, teria que voltar o backup.
A ideia então é saber aonde parou o processamento e continuar a partir dele ou antes dele.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Detectar que o Windows está sendo desligado

Mensagem por janio »

aSimoes,

O Quintas compreende coisas difíceis, mas não as fáceis! kkkk

:D :D :))

Eu entendi o que vc deseja e adoraria se isso existisse tbm: a aplicação detectar que foi pedido por alguma criatura para que o Windows seja desligado ou reiniciado. Como o processo é crítico e tem que ir até o fim, o ideal era o sistema detectar esse pedido de desligamento e antes de que se complete, apresentar msg: "AMIGÃO, TO FAZENDO UMA ATUALIZACAO AQUI DE TABELAS QUE NÃO PODE PARAR! VA TOMAR UM CAFÉ, BEBER UMA ÁGUA, DORMIR UM POUCO, MAS NAO DESLIGUE O WINDOWS AGORA"

Problemas:
Se a atualização estiver sendo executada no servidor e for este que estiver sendo desligado... ok, talvez daria para impedir esse desligamento. Mas se a atualização estiver sendo processada numa estação e estiverem desligando o servidor... aí complica o meio de campo

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

Janio,

Você captou a minha ideia.

O difícil é criar a função que é em C para interceptar o momento que o windows entra em modo de desligamento ou logoff
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Detectar que o Windows está sendo desligado

Mensagem por janio »

aSimoes,

Talvez uma solução 'quebra-galho' seria retirar o poder do usuário fazer o desligamento do Windows, através do registro (gpedit.msc)!

Janio
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Detectar que o Windows está sendo desligado

Mensagem por janio »

aSimoes,

Fazer essa interceptação é possível! Veja o programa do link abaixo:

http://www.baboo.com.br/software/proiba ... de-seu-pc/

Basta alguém que desenvolva isso para embutirmos nos nossos sistemas!
:-´

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Detectar que o Windows está sendo desligado

Mensagem por JoséQuintas »

Eu ainda não entendi o uso prático.
Se o computador parou.... parou..... rs

No VB tem algo nesse sentido, que é como foi solicitado o fechamento da janela, se foi o usuário ou o Windows e algo mais.

Código: Selecionar todos

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End Sub
Mas o mais prático é o aplicativo controlar ele mesmo.

O usuário pode muito bem ir lá no gerenciador de tarefas e fechar a aplicação, e isso não seria o Windows desligando.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

Tem como enganar a forma é lusitana

Todas as janelas windows são encerradas com Escape, então, no momento do processamento colocar em idle a função escape()
Desta forma se a aplicação não desativar o escape, vai ter que desligar no botão, kkkkk

Código: Selecionar todos

STATIC nIdle
STATIC nTempo

AtivaEscape(.T.) //Ativa o escape
AtivaEscape()    //Desativa o escape

FUNCTION AtivaEscape(lAtiva)
PUBLIC nTmpSistema := 1 // 1 segundo
   hb_Default(@lAtiva, .F.)
   IF lAtiva
      nIdle := hb_IdleAdd( {|| CheckEscape() } )
   ELSE   
      IF nIdle != Nil
         hb_IdleDel( nIdle )
      ENDIF
   ENDIF
RETURN .T.  

FUNCTION CheckEscape
   IF nTempo = Nil
      nTempo := Seconds()
   ENDIF
   IF Seconds() - nTempo >= nTmpSistema
      Escape()
      nTempo := Seconds()
   ENDIF
RETURN Nil

FUNCTION Escape()
   oShell := Win_OleCreateObject( "WScript.Shell" )
   oShell:SendKeys("{ESC}")
RETURN .T.

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Detectar que o Windows está sendo desligado

Mensagem por asimoes »

AtivaEscape(.T.)
DO WHILE .T.
.... processando alguma coisa
ENDDO
...Terminou
AtivaEscape()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder