Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations biv343 on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Is there a way to turn-off a pc fro

Status
Not open for further replies.

JBats

Programmer
Aug 3, 2003
127
PH
Is there a way to turn-off a pc from another pc through network?

jbats
 
I've done it with remote-desktop software, then Start-Shutdown

Nice freebie remote desktop at
Howard Dingman
Pro-Tel Communications
Endicot, NY

webmaster<at>holocom<dot>com
 
API calls

InitiateSystemShutdown
SetSystemPowerState

[flowerface]

&quot;All I ask is the chance to prove that money can't make me happy.&quot; - Spike Milligan
 
' Shutdown Flags
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Const SE_PRIVILEGE_ENABLED = &H2
Const TokenPrivileges = 3
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = &H2
Const TOKEN_IMPERSONATE = &H4
Const TOKEN_QUERY = &H8
Const TOKEN_QUERY_SOURCE = &H10
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_ADJUST_GROUPS = &H40
Const TOKEN_ADJUST_DEFAULT = &H80
Const SE_SHUTDOWN_NAME = &quot;SeShutdownPrivilege&quot;
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 &quot;advapi32.dll&quot; Alias &quot;InitiateSystemShutdownA&quot; (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 &quot;advapi32.dll&quot; (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcess Lib &quot;kernel32&quot; () As Long
Private Declare Function LookupPrivilegeValue Lib &quot;advapi32.dll&quot; Alias &quot;LookupPrivilegeValueA&quot; (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LARGE_INTEGER) As Long
Private Declare Function AdjustTokenPrivileges Lib &quot;advapi32.dll&quot; (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 &quot;kernel32&quot; Alias &quot;GetComputerNameA&quot; (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetLastError Lib &quot;kernel32&quot; () As Long
Public Function InitiateShutdownMachine(ByVal 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(AllowLocalShutdown) Then AllowLocalShutdown = False
If IsMissing(Delay) Then Delay = 0
If IsMissing(Message) Then Message = &quot;&quot;
'Make sure the Machine-name doesn't start with '\\'
If InStr(Machine, &quot;\\&quot;) = 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(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hProc) = 0 Then
MsgBox &quot;OpenProcessToken Error: &quot; & GetLastError()
Exit Function
End If
'retrieve the locally unique identifier to represent the Shutdown-privilege name
If LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, OldTokenStuff.Privileges(0).pLuid) = 0 Then
MsgBox &quot;LookupPrivilegeValue Error: &quot; & 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(hProc, False, NewTokenStuff, NewTokenStuffLen, OldTokenStuff, OldTokenStuffLen) = 0 Then
MsgBox &quot;AdjustTokenPrivileges Error: &quot; & GetLastError()
Exit Function
End If
'initiate the system shutdown
If InitiateSystemShutdown(&quot;\\&quot; & Machine, Message, Delay, Force, Restart) = 0 Then
Exit Function
End If
NewTokenStuff.Privileges(0).Attributes = 0
'Disable shutdown-privilege
If AdjustTokenPrivileges(hProc, False, NewTokenStuff, Len(NewTokenStuff), OldTokenStuff, Len(OldTokenStuff)) = 0 Then
Exit Function
End If
Else
'initiate the system shutdown
If InitiateSystemShutdown(&quot;\\&quot; & 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(GetMyMachineName, sLen) Then
GetMyMachineName = Left(GetMyMachineName, sLen)
End If
End Function
Private Sub Form_Load()
'KPD-Team 2000
'URL: 'E-Mail: KPDTeam@Allapi.net
InitiateShutdownMachine GetMyMachineName, True, True, True, 60, &quot;You initiated a system shutdown...&quot;
End Sub


peterguhl@yahoo.de
 
thanks a lot guys for your reply, poltergeist i'll try your codes

jbats
 
Poltergeist,

I've tried your code on my home network. (My daughter is always leaving her PC on.) It works great when executing the code from the PC I want to shutdown. But I can't get it to shut a PC from another PC. I've hard coded the name of the PC I want to shutdown, but no shutdown occurs.

What am I doing wrong?

Ken
 
Is it a MB and PS that supports software power management, or is it an older machine with a hardwire switch to shut it down?

I gave my kid the old machine with a push-on push-off switch, so I can command it to shut down, but it won't power off remotely.

howard
 
Howard,

Both machines are ATX. So they both shutdown through software power management. I can't seem to get it to work for me.

Thanks for input.
 
I tried that Poletgeist's code and got the error message "OpenProcessTokenError: 120"
What problem does it indicate?
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top