PDA

Visualizza versione completa : [VB]Che comando uso per far spegnere il pc?


guam
26-03-2002, 21.17.18
Salve a tutti, sto facendo un programmino in VB che, una volta impostata l'ora, mi spenga il computer all'ora prefissata (esempio se imposto le 18:30, appena scattano le 18:30 il pc si deve spegnere automaticamente).

Ho fatto tutto mi manca solo il comando dello shut down, ho dato un'occhiata alla guida ma ho trovato solo "object.shutdownwindows" che non riesco a far funzionare.

Grazie per l'aiuto sono ai primi passi :)

beee
01-04-2002, 10.08.16
Puoi usare le API ExitWindow e/o ExitWindowEx. Con w9x/me funziona bene, con NT/2000/xp le cose si complicano abbastanza (in pratica ti rimarra la scritta -Ŕ ora possibile spegnere il pc-)
L'argomento Ŕ stato giÓ trattato in questo forum qualche mese fÓ.

Bye !

P8257 WebMaster
02-04-2002, 09.10.11
Per Windows XP:

Fai una shell al processo SHUTDOWN .. non ricordo i parametri..

Bye :cool:

Lucavettu
02-04-2002, 12.03.24
io in programmazione di VB6 buio completo...
So solo che per far spegnere il PC basta creare un collegamento al programma Rundll32.exe (mi pare nella cartella Windows) e poi cliccare col tasto dx sul link -> ProprietÓ. E poi scrivere nel campo "Destinazione" il comando "user,exitwindows" (senza virgolette).

Poi basta dare OK e farci doppio click. Fatemi sapere se sapete qualcosa di nuovo.

Ciao:rolleyes:

xegallo
05-04-2002, 23.22.03
Const TOKEN_ADJUST_GROUPS = &H40
Const TOKEN_ADJUST_DEFAULT = &H80
Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Const ANYSIZE_ARRAY = 1
Private Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type
Private Type Luid
lowpart As Long
highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
'pLuid As Luid
pLuid As LARGE_INTEGER
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY)
As LUID_AND_ATTRIBUTES
End Type
Private Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, ByVal lpMessage As String, ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, ByVal bRebootAfterShutdown As Long) 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 LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LARGE_INTEGER) 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 Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Public Function InitiateShutdownMachine(B
yVal Machine As String, Optional Force As Variant, Optional Restart As Variant, Optional AllowLocalShutdown As Variant, Optional Delay As Variant, Optional Message As Variant) As Boolean
Dim hProc As Long
Dim OldTokenStuff As TOKEN_PRIVILEGES
Dim OldTokenStuffLen As Long
Dim NewTokenStuff As TOKEN_PRIVILEGES
Dim NewTokenStuffLen As Long
Dim pSize As Long
If IsMissing(Force) Then Force = False
If IsMissing(Restart) Then Restart = True
If IsMissing(AllowLocalShutd
own) Then AllowLocalShutdown = False
If IsMissing(Delay) Then Delay = 0
If IsMissing(Message) Then Message = ""
'Make sure the Machine-name doesn't start with '\'
If InStr(Machine, "\\") = 1 Then
Machine = Right(Machine, Len(Machine) - 2)
End If
'check if it's the local machine that's going to be shutdown
If (LCase(GetMyMachineName) = LCase(Machine)) Then
'may we shut this computer down?
If AllowLocalShutdown = False Then Exit Function
'open access token
If OpenProcessToken(GetCurre
ntProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hProc) = 0 Then
MsgBox "OpenProcessToken Error: " & GetLastError()
Exit Function
End If
'retrieve the locally unique identifier to represent the Shutdown-privilege name
If LookupPrivilegeValue(vbNu
llString, SE_SHUTDOWN_NAME, OldTokenStuff.Privileges(0).pLuid) = 0 Then
MsgBox "LookupPrivilegeValue Error: " & GetLastError()
Exit Function
End If
NewTokenStuff = OldTokenStuff
NewTokenStuff.PrivilegeCount = 1
NewTokenStuff.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
NewTokenStuffLen = Len(NewTokenStuff)
pSize = Len(NewTokenStuff)
'Enable shutdown-privilege
If AdjustTokenPrivileges(hPr
oc, False, NewTokenStuff, NewTokenStuffLen, OldTokenStuff, OldTokenStuffLen) = 0 Then
MsgBox "AdjustTokenPrivileges Error: " & GetLastError()
Exit Function
End If
'initiate the system shutdown
If InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 Then
Exit Function
End If
NewTokenStuff.Privileges(0).Attributes = 0
'Disable shutdown-privilege
If AdjustTokenPrivileges(hPr
oc, False, NewTokenStuff, Len(NewTokenStuff), OldTokenStuff, Len(OldTokenStuff)) = 0 Then
Exit Function
End If
Else
'initiate the system shutdown
If InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 Then
Exit Function
End If
End If
InitiateShutdownMachine = True
End Function
Function GetMyMachineName() As String
Dim sLen As Long
'create a buffer
GetMyMachineName = Space(100)
sLen = 100
'retrieve the computer name
If GetComputerName(GetMyMach
ineName, sLen) Then
GetMyMachineName = Left(GetMyMachineName, sLen)
End If
End Function
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
InitiateShutdownMachine GetMyMachineName, True, True, True, 60, "You initiated a system shutdown..."
End Sub

Lucavettu
06-04-2002, 21.09.03
Cos'Ŕ, arabo??? o aramaico???

:D :S :D :S :D :S :D :S :D :S

xegallo
06-04-2002, 23.14.50
NO API CARO MIO

pazzokramaz
15-04-2002, 20.17.36
cappero io non ho capito niente:confused:
fai prima a dire a vb di aprire il collegamento a rundll32 e poi scrivi qualcosa ok ciao:D

LoryOne
16-04-2002, 11.34.21
Creati un file .bat dentro al quale inserisci questo:
rundll32 user,exitwindows

Poi lancia il .bat all'ora prestabilita utilizzando l'utilitÓ di Operazioni pianificate.

Questo se hai Windows 9x/ME

Se non ce l'hai leggi gli altri consigli. Sono tutti validi !:)