1) Pertama kali desain formnya terlebih dahulu seperti gambar berikut :
No |
Object |
Properties |
|
1 |
Form |
Name |
Form1 |
|
|
Caption |
Form1 |
2 |
Command Button |
Name |
Command1 |
|
|
Caption |
Restart |
3 |
Command Button |
Name |
Command2 |
|
|
Caption |
Shutdown |
4 |
Command Button |
Name |
Command3 |
|
|
Caption |
Exit |
2) Buat Modul kemudian copy code dibawah ini :
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
Public Sub ShutDownNT(Force As Boolean)
Dim ret As Long
Dim Flags As Long
Flags = EWX_SHUTDOWN
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindowsEx Flags, 0
End Sub
'Restart
Public Sub RebootNT(Force As Boolean)
Dim ret As Long
Dim Flags As Long
Flags = EWX_REBOOT
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindowsEx Flags, 0
End Sub
3) Kembali pada Form1, copy code di bawah ini pada Form1 :
Private Sub Command1_Click()
'Warn User
If MsgBox("System akan melakukan Restart", vbOKCancel) = vbOK Then
'Call Function
RebootNT True
End If
'No Need To Check For Success!!
End Sub
Private Sub Command2_Click()
'Warn User
If MsgBox("System akan melakukan Shutdown sekarang", vbOKCancel) = vbOK Then
'Call Function
ShutDownNT True
End If
'No Need To Check For Success!!
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
4) Jalankan program, lihat hasilnya seperti gambar dibawah ini :
Penting :
* Untuk mencegah terjadinya salah tekan tombol, sebaiknya anda menyimpan program anda terlebih dahulu sebelum menjalankan program.
Download sample program :Password if needed
Mediafire : nc_team
Rar : nice-creativity.blogspot.com