Jump to content

Recommended Posts

Posted

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:

www.rgcouto.net

Posted

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  😛 (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 😄 )

cumps

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

Havia e há 😄

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  😛

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

cumps

Posted

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?

www.rgcouto.net

Posted

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.

Posted

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

Posted

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

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Posted

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 😄 e tb n entendo pk.

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

Our lives begin to end the day we become silent about things that matter - Martin Luther King

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.