• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rgcouto

[vb x] desligar computador através de um programa em VB

14 mensagens neste tópico

boas pessoal

alguém sabe como desligar um computador atraves de um programa feito em VB?? precisava desse codigo e nao consigo encontrar :S .. please help me  :fartnew2:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Simples, para qualquer versão do VB

' código a inserir num botão por exemplo
Shell "shutdown.exe -s -t 00", vbHide

Só funciona no XP, e quiçá no 2000.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas... eu axu que o forma que o vbmaster disse é bem simples e eficas, vou só postar este código mais a titulo de curiosidade do que outra coisa qualquer  :P (para quê complicar se basta utilizar o comando shutdown da linha de comandos)

Primeio copia-se istu tudo:

Option Explicit

Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_FORCE As Long = 4
Private Const EWX_POWEROFF As Long = 8
Private Const EWX_FORCEIFHUNG As Long = 16
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8

Private Const ANYSIZE_ARRAY = 1
Private Const SE_PRIVILEGE_ENABLED = &H2

Private Type LUID
    LowPart As Long
    HighPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type



Private Declare Function ExitWindowsEx& Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long)
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" _
                (ByVal TokenHandle As Long, _
                 ByVal DisableAllPrivileges As Long, _
                 NewState As TOKEN_PRIVILEGES, _
                 ByVal BufferLength As Long, _
                 PreviousState As TOKEN_PRIVILEGES, _
                 ReturnLength As Long) As Long







Private Sub ForceShutdown(ByVal Action As Long, _
                                                      ForceFlag As Boolean, _
                                                      PowerOff As Boolean)
Dim OSVer As Long
Dim Msg As String

If (Action > -1) And (Action < 3) Then

    If ForceFlag Then
        Action = Action Or EWX_FORCE
    End If
    

    If PowerOff Then
        Action = Action Or EWX_POWEROFF
    End If
    
    SetPrivilege
    

    Action = Action Or EWX_FORCEIFHUNG


    ExitWindowsEx Action, 0

End If
    
End Sub





Public Sub SetPrivilege()

Dim hToken As Long
Dim aLUID As LUID
Dim NewPriv As TOKEN_PRIVILEGES
Dim PrevPriv As TOKEN_PRIVILEGES
Dim Ret As Boolean


Ret = OpenProcessToken(GetCurrentProcess(), _
                                            TOKEN_ADJUST_PRIVILEGES Or _
                                            TOKEN_QUERY, _
                                            hToken)

If Ret Then

    Ret = LookupPrivilegeValue(vbNullString, _
                                                SE_SHUTDOWN_NAME & vbNullChar, _
                                                aLUID)
    If Ret Then
        With NewPriv
            .PrivilegeCount = 1
            .Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
            .Privileges(0).pLuid = aLUID
        End With
        
        Ret = AdjustTokenPrivileges(hToken, _
                                            0, _
                                            NewPriv, _
                                            4 + 12 * NewPriv.PrivilegeCount, _
                                            PrevPriv, 4 + 12 * PrevPriv.PrivilegeCount)
    End If
End If
    

End Sub

Depois é só colocar estas linhas de código num evento de um botão ou algo do genero para executar as funções:

Dim Action As Integer

Action = EWX_SHUTDOWN

ForceShutdown Action, True, True
DoEvents
Unload Me

Istu funciona em VB6 e no windows XP(foi onde testei :D )

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Havia um código parecido que era o que funcionava nos 9x.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Havia um código parecido que era o que funcionava nos 9x.

Havia e há :D

http://www.gssg.de/vbsysnw.htm

O que eu fiz foi fazer o download do programa que esta ai nesse site e como o rgcouto só queria desligar o sistema(nada de terminar sesão nem reiniciar) e como ele não falou em SO(pati do principeo que fosse XP) retirei apenas o código necesário  :P

Já agora se houver alguma duvida no código digam...

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código não é meu  :P. Eu só separei o que era preciso do que não era :D

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu preciso deste codigo em vb pq quero k o programa desligue a uma certa hora, então  faço um programa em vb para desligar a uma certa hora...

mas este codigo só funciona

' código a inserir num botão por exemplo
Shell "shutdown.exe -s -t 00", vbHide

quanto tenho o vb aberto, se criar um executavel nao funciona :s

NuGuN o teu funciona a partir de um executavel com o vb fechado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu preciso deste codigo em vb pq quero k o programa desligue a uma certa hora, então  faço um programa em vb para desligar a uma certa hora...

mas este codigo só funciona

' código a inserir num botão por exemplo
Shell "shutdown.exe -s -t 00", vbHide

quanto tenho o vb aberto, se criar um executavel nao funciona :s

NuGuN o teu funciona a partir de um executavel com o vb fechado?

Deves estar a fazer uma grande batata, porque tudo o que corre num Run, tem de correr sempre, e esse programa corre sempre.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu preciso deste codigo em vb pq quero k o programa desligue a uma certa hora, então  faço um programa em vb para desligar a uma certa hora...

mas este codigo só funciona

' código a inserir num botão por exemplo
Shell "shutdown.exe -s -t 00", vbHide

quanto tenho o vb aberto, se criar um executavel nao funciona :s

NuGuN o teu funciona a partir de um executavel com o vb fechado?

Tambem não estou a ver porque não funciona quando passas para executavel, vê issu bem.

De qualquer forma, esse código que eu postei funciona num executavel. Como o vbmaster, o que corre no VB6 tambem corre no executavel a menos que haja outras coisas que possam interferir mas não é o caso.

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu penso que entendi o que o rgcouto disse. Ele quer é implementar uma textbox onde selecciona a hora a que o PC desliga. Depois do programa compilado ele pode escolher sempre uma hora qualquer.

Era isto certo rgcouto?

Com os melhores comprimentos,

Skin

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

skin, isso é irrelevante.

Ele diz que o código só lhe funciona quando tem o vb aberto o que é ridículo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

skin, isso é irrelevante.

Ele diz que o código só lhe funciona quando tem o vb aberto o que é ridículo.

Ha isso n tinha lido :D e tb n entendo pk.

So li a parte em que ele diz aquilo da hora =/.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora