Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Sa jeg skulle skrive hvordan man slår av PCen...

Prøv denne.... (tror den funker)

 

Skriv dette i En "module":

 

 

Public Declare Function ExitWindowsEx& Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long)

Public Const EWX_SHUTDOWN = 1



Public Function WINShutdown()

ExitWindowsEx EWX_SHUTDOWN, 0

End Function

 

Skriv dette I "formen":

 

Private Sub Command1_Click()

call WINShutdown

End Sub

 

Hvis ikke det funker får du(dere) ta å si i fra...

(Lengesiden jeg har brukt den)

Lenke til kommentar
  • 4 måneder senere...

Skal du bare bruke API for å skru av pcen vil du støte på et problem når du prøver å få windows 2000/XP til å avslutte. Løsningen er denne koden:

 


Private Const EWX_LOGOFF = 0

Private Const EWX_SHUTDOWN = 1

Private Const EWX_REBOOT = 2

Private Const EWX_FORCE = 4

Private Const TOKEN_ADJUST_PRIVILEGES = &H20

Private Const TOKEN_QUERY = &H8

Private Const SE_PRIVILEGE_ENABLED = &H2

Private Const ANYSIZE_ARRAY = 1

Private Const VER_PLATFORM_WIN32_NT = 2

Type OSVERSIONINFO

   dwOSVersionInfoSize As Long

   dwMajorVersion As Long

   dwMinorVersion As Long

   dwBuildNumber As Long

   dwPlatformId As Long

   szCSDVersion As String * 128

End Type

Type LUID

   LowPart As Long

   HighPart As Long

End Type

Type LUID_AND_ATTRIBUTES

   pLuid As LUID

   Attributes As Long

End Type

Type TOKEN_PRIVILEGES

   PrivilegeCount As Long

   Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES

End Type

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) 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 AdjustTokenPrivileges Lib "advapi32" (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 ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long



Public Function IsWinNT() As Boolean



Dim myOS As OSVERSIONINFO

myOS.dwOSVersionInfoSize = Len(myOS)

GetVersionEx myOS

IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)



End Function



Private Sub EnableShutDown()



   Dim hProc As Long

   Dim hToken As Long

   Dim mLUID As LUID

   Dim mPriv As TOKEN_PRIVILEGES

   Dim mNewPriv As TOKEN_PRIVILEGES

   hProc = GetCurrentProcess()

   OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken

   LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID

   mPriv.PrivilegeCount = 1

   mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED

   mPriv.Privileges(0).pLuid = mLUID

   ' enable shutdown privilege for the current application

   AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)



End Sub



' Shut Down NT



Public Sub ShutDownNT(Force As Boolean)



Dim ret&, Flags&



Flags = EWX_SHUTDOWN

If Force Then Flags = Flags + EWX_FORCE

If IsWinNT Then EnableShutDown



ExitWindowsEx Flags, 0



End Sub

 

"ShutDownNT" virker på alle windows versjoner.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...