EVITAR O DESLIGAMENTO DO WINDOWS
Alguém sabe de uma maneira de evitar que o windows seja desligado sem que um certo aplicativo seja encerrado?
no vb eu faria assim
Esse comando shell e pra executar comandos do prompt-dos shutdown -a (Evita o desligamento)
Private Sub Command1_Click()
Shell ([Ô]Shutdown -a[Ô])
End Sub
Esse comando shell e pra executar comandos do prompt-dos shutdown -a (Evita o desligamento)
Adicione um módulo ao seu projeto e copie o código abaixo:
No Form principal do seu programa acrescente o código abaixo no Load do Form:
Dessa form o Windows só será desligado após o encerramento do seu programa.
Option Explicit
Public Const GWL_WNDPROC = (-4)
Public Const WM_ENDSESSION = &H16
Public Const WM_QUERYENDSESSION = &H11
Public WndProc As Long
Private Declare Function CallWindowProc Lib [Ô]user32[Ô] Alias [Ô]CallWindowProcA[Ô] (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib [Ô]user32[Ô] Alias [Ô]SetWindowLongA[Ô] (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
[ô] exiting from windows
[ô]-------------------------------------------------------
[ô]EWX_FORCE = 4 Force any applications to quit instead of prompting the user to close them.
[ô]EWX_LOGOFF = 0 Log off the network.
[ô]EWX_POWEROFF = 8 Shut down the system and, if possible, turn the computer off.
[ô]EWX_REBOOT = 2 Perform a full reboot of the system.
[ô]EWX_SHUTDOWN = 1
Public Declare Function ExitWindowsEx Lib [Ô]user32.dll[Ô] (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
[ô]call this from your form
Public Sub Hook(lWnd As Long)
Dim uProcess As Long
WndProc = SetWindowLong(lWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_QUERYENDSESSION Then
[ô]MsgBox [Ô]hw:[Ô] + CStr(hw) + [Ô] uMsg:[Ô] + CStr(uMsg) + [Ô] wParam:[Ô] + CStr(wParam)
WindowProc = False [ô]send don[ô]t shut down
[ô]run code do what you want, then call ExitWindowsEx etc up to you
Exit Function
ElseIf uMsg = WM_ENDSESSION Then
[ô]MsgBox [Ô]hw:[Ô] + CStr(hw) + [Ô] uMsg:[Ô] + CStr(uMsg) + [Ô] wParam:[Ô] + CStr(wParam)
WindowProc = False
[ô]run code
Exit Function
End If
WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam)
End Function
No Form principal do seu programa acrescente o código abaixo no Load do Form:
Private Sub Form_Load()
Hook Me.hWnd
[ô]Seus comandos
End Sub
Dessa form o Windows só será desligado após o encerramento do seu programa.
JAMESBOND007 seu código funcionou direitinho, mas ele deixava uma latência (atraso) no windows (pelo menos aqui no windows7), por isso eu utilizei o do FFCOUTO porque, se tratando de API, a resposta do código foi imediata e não permite ao usuário executar nenhuma tarefa sem antes colocar o horário de saÃda.
Obrigado a todos.
Obrigado a todos.
Tópico encerrado , respostas não são mais permitidas