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