Página 1 de 1

impedir desligamento do Windows pelo programa

Enviado: 19 Set 2011 23:53
por cjp
Pessoal, vocês sabem me informar se tem como um programa compilado no xHarbour impedir (ou ao menos retardar) o desligamento ou o Log off do Windows?

É que o meu programa executa algumas operações necessárias antes de fechar, que não deveriam ser impedidas pelo usuário fazendo log off ou desligando. Assim, eu gostaria de impedir o log off ou o desligamento pelo usuário, para que ele não interrompa as operações do programa antes de fechar, me entenderam?

É possível?

Inacio

impedir desligamento do Windows pelo programa

Enviado: 20 Set 2011 20:43
por emotta
Se você usa Fivewin ou qualquer outra GUI é simples. Quando o usuário manda DESLIGAR o computador o WINDOWS "simula" como se o usuário fosse fechando as janelas no X (canto superior direito) de cada windows/dialog. Basta que voce faça o processo que deseja no evento de FECHAR (bClose ou bEnd) da WINDOWS principal. Mas tem que ser rápido o processo porque se a aplicacao não FECHAR "naturalmente" o windows informa ao usuário se ele deseja forçar o fechamento do aplicativo.

Voce pode fazer um teste simples fazendo um programa normal que cria uma DIALOG simples e deixe ela aberta. No dialog coloque oDlg:bEnd := {||MsgStop("testando fechamento)}

Execute o seu programa e com ele aberto mande desligar o computador. Voce poderá perceber que ele vai abrir a mensagem "testando fechamento" e após algum tempo o windows vai perguntar se deseja forçar o fechamento do aplicativo.

abraço,

impedir desligamento do Windows pelo programa

Enviado: 21 Set 2011 00:09
por cjp
Entendi o que vc disse, pois já vi o Windows fazer isso com vários programas.

Mas não sei o que Gui ou Fivewin. Eu compilo com o Xharbour. Como faço isso?

impedir desligamento do Windows pelo programa

Enviado: 21 Set 2011 00:17
por sygecom
Tente criar uma função conforme abaixo e compile com seu sistema e teste:

Código: Selecionar todos

exit function fimSistema()
alert('aqui executa a função de saida')
return nil

impedir desligamento do Windows pelo programa

Enviado: 03 Out 2011 23:24
por cjp
Meu caro, acho que tem algum erro.

Essa função só funcionou quando o programa dá algum erro.

Não funciona quando o usuário aciona o desligamento do Windows, que é o que eu quero.

impedir desligamento do Windows pelo programa

Enviado: 04 Out 2011 00:04
por sygecom
Era uma tentativa, o que você quer deve ser o exemplo da pasta XHARBOUR\TEST\service.prg usando HB_SIGNAL_QUIT

Veja o exemplo que foi postado no NEWS do xHarbour:

Código: Selecionar todos

#include "hbserv.ch"
procedure main()
   cls
   fErase('Msg.txt')
   ? 'iniciou'
   HB_PushSignalHandler( HB_SIGNAL_ALL, "Handle" )
   While .t.
       a:=inkey(0)
       if lastkey()=27
          EXIT
       ENDIF
   end

   ? 'Fim normal'


 Function Handle( nSignal, aParams )
   // THIS SHOULD NOT BE DONE, but I do it to test that it works !
   // Don't do it in real life. Is not good to start threads from
   // within signal handlers.
   //StartThread(@Teller(), nSignal, aParams)

   Teller( nSignal, aParams)
   IF nSignal == HB_SIGNAL_QUIT .or. nSignal == HB_SIGNAL_INTERRUPT
      // Use only if you want to use INTERRUPT to exit prg.
      bWait = .F.
   ENDIF
RETURN HB_SERVICE_HANDLED


PROCEDURE Teller(nSignal, aParams)
   Local vArq:='.\Msg.TXT'
   //fazer o que deseja

   close all
   SET CONSOLE OFF
   SET ALTERNATE  TO &vArq
   SET ALTERNATE ON

   #ifdef HB_THREAD_SUPPORT
   ? "VM Thread    ", GetThreadId()
   ? "System Thread", GetSystemThreadId()
   #endif
   ? "Handled: ", nSignal
   ? "Syserror: ", aParams[1], aParams[2], HB_SignalDesc( aParams[1], aParams[2] )
   ?
   ? ' Finalizou o sistema ok'
   SET ALTERNATE OFF
   SET ALTERNATE TO
RETURN


Function eGrava(vTxt)
   MEMOWRIT('T.TXT',vTxt)
   ? 'Gravou'
return nil