Câu hỏi

25/05/2013 20:34
Xin chỉ cách viết chương trình Shutdown máy tính bằng ngôn ngữ C++. ?
Danh sách câu trả lời (1)

Trong chương trình ứng dụng được viết bằng bất kỳ ngôn ngữ nào, miễn sao có thể gọi hàm API Windows, bạn đều có thể yêu cầu Windows shutdown bằng cách gọi hàm API Windows có tên là ExitWindows() hay ExitWindowsEx(). Ngoài ra để shutdown thành công, ứng dụng của bạn cũng cần xin quyền SE (Shutdown Enabled) bằng cách gọi hàm API tên là AdjustTokenPrivileges(). Sau đây là đoạn code C++ điển hình để shutdown Windows NT (hay Win2000, WinXP):
//khai báo các biến cần dùng
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//Tìm token của process ứng dụng hiện hành.
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
error("OpenProcessToken");
//Tìm LUID của "shutdown privilege"
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
//Thiết lập quyền SE cho process ứng dụng hiện hành.
tkp.PrivilegeCount = 1; // thiết lập 1 quyền
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
//kiểm tra và báo lỗi kết quả.
if (GetLastError() != ERROR_SUCCESS)
error("AdjustTokenPrivileges");
//Shutdown Windows và buộc tất cả ứng dụng kết thúc
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
error("ExitWindowsEx");
Chúc bạn thành cống
//khai báo các biến cần dùng
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//Tìm token của process ứng dụng hiện hành.
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
error("OpenProcessToken");
//Tìm LUID của "shutdown privilege"
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
//Thiết lập quyền SE cho process ứng dụng hiện hành.
tkp.PrivilegeCount = 1; // thiết lập 1 quyền
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
//kiểm tra và báo lỗi kết quả.
if (GetLastError() != ERROR_SUCCESS)
error("AdjustTokenPrivileges");
//Shutdown Windows và buộc tất cả ứng dụng kết thúc
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
error("ExitWindowsEx");
Chúc bạn thành cống
Trả lời câu hỏi
Câu hỏi lĩnh vực Lập trình
Rao vặt Siêu Vip