PDA

View Full Version : Shutdown = Vb6



haitu
24-05-2003, 18:30
có ai biết viết code bằng vb6 để shutdown máy không vậy, nhưng trước khi tắt máy thì những chương trình đang chạy trên hệ điều hành phải tự động tắt trước, nếu chương trình chưa save thì tự đông save lại.

gamehacker
25-05-2003, 14:01
Bác dùng hàm Api exitwindow đó

KEM_WALL
25-05-2003, 17:01
trên hệ NT thì hình như khi chạy exitwindow thì nó kô báo cho các chương trình khác biết để chuẩn bị đâu, shutdown kô chờ đợi

dtt_vn
25-05-2003, 20:05
hehe đợi dtt_vn một tí nhé, dtt_vn sẽ post lên một đọan code shutdown trên mọi win. sướng !

trungnt88
26-05-2003, 12:40
dùng api exW mà NT không chờ à ?
Tui lại có (win .net 2003 - nhân NT còn gì ? XP cũng rứa !) có sao đâu ! cài thử SP5 đi !

Nicky
28-05-2003, 19:06
Đúng đó trên WinNT là dùng cái hàm ExitWindow*** nó không có chạy đâu. Cần phải đăng kí đặc quyền rồi mới sử dụng hàm đó được.
Trung Post lên đi :D

dtt_vn
28-05-2003, 22:06
vay thi chay file user32.exe hehe. dtt_vn dang tim lai dong tai lieu. vai ngay nua do

Zui !
28-05-2003, 23:38
Nhanh lên !

White_Rose
29-05-2003, 07:03
Author : Andrea Tincani

API Declarations

Option Explicit

'API constants
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

'API structures
Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type

Public Type LUID
LowPart As Long
HighPart As Long
End Type

Public Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type

Public Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type

'API Declarations
Private Declare Function GetCurrentProcess Lib "kernel32.dll" () 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 LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) 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 ExitWindow*** Lib "user32.dll" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long



Module


'Detect if the program is running under Windows NT
Public Function IsWinNT() As Boolean
Dim myOS As OSVERSIONINFO

myOS.dwOSVersionInfoSize = Len(myOS)
GetVersionEx myOS
IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

'set the shut down privilege for the current application
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 As Long
Dim Flags As Long

Flags = EWX_SHUTDOWN
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindow*** Flags, 0
End Sub

'Restart NT
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
ExitWindow*** Flags, 0
End Sub

'Log off the current user
Public Sub LogOffNT(Force As Boolean)
Dim ret As Long
Dim Flags As Long

Flags = EWX_LOGOFF
If Force Then Flags = Flags + EWX_FORCE
ExitWindow*** Flags, 0
End Sub

haitu
31-05-2003, 16:09
cám ơn White_rose nha để mình thử xem đã

dtt_vn
31-05-2003, 20:37
hehe bác WR đi trước tui mất rồi :(

haitu
07-06-2003, 15:42
À nhưng mà trên đoạn code có 1 số hàm tôi chưa hiểu lắm có ai giải thích dùm tôi với.

4ehoahong
09-06-2003, 17:44
thư viện Lib "kernel32.dl" là cái gì vậy.
mong White_rose chỉ giùm em với.
em cảm ơn trước nhé

4ehoahong
09-06-2003, 17:46
em rất thích học lâp trình API nhưng ko biết tìm tài liệu ở đâu.mong các anh chị chỉ giúp

Nicky
09-06-2003, 19:46
API thì ít có tài liệu bằng Tiếng Việt, tài liệu về API lớn nhất là MSDN của Microsoft. Sau đó bạn đến allapi.net để tìm thêm.

Nói thiệt là lúc đầu tìm hiểu API khó lắm, chỉ biết copy rồi cho nó chạy thôi, chả hiểu gì hết. Nhưng cứ lâu dần bạn sẽ hiểu ra và sẽ nắm được thôi. Nếu lúc đầu có gì không hiểu bạn cũng đừng nản, ai cũng vậy thôi.
Chúc bạn thành công !

White_Rose
09-06-2003, 23:48
kernel32.dll là một thư viện của Windows. Bạn yên tâm là lúc nào nó cũng sẵn sàng cho bạn sử dụng, miễn là bạn vẫn còn vào được Win :-)
Bạn có thể lên google để tra xem tác dụng của file này là gì. Mình chỉ đoán mò là file này chứa những chức năng quan trọng nhất của hệ điều hành như quản lý bộ nhớ chẳng hạn (kernel nghĩa là "nhân")