Hệ điều hành cung cấp các phương thức để tắt nguồn / khởi động lại máy tính, khóa và ngủ đông tạm ngưng các tiến trình hiện tại để máy tính về chế độ nguồn điện thấp.. Nên nhóm em chọn đ
Trang 1TRƯỜNG ĐẠI HỌC THỦY LỢI
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN
MÔN HỆ ĐIỀU HÀNH
ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG QUẢN LÝ TẮT NGUỒN / KHỞI ĐỘNG LẠI TỰ ĐỘNG, KHÓA VÀ CHẾ ĐỘ NGỦ ĐÔNG
TRÊN MÁY TÍNH WINDOWS
Giảng viên hướng dẫn : TS Phạm Thanh Bình
Nhóm sinh viên thực hiện :
Trang 2Hà Nội, 4/2022 MỤC LỤC
MỤC LỤC
MỞ ĐẦU 3
1 Giới thiệu 3
2 Công cụ sử dụng 3
CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH VÀ HÀM API TRÊN HỆ ĐIỀU HÀNH WINDOWS 5
1.1 Tổng quan về hệ điều hành windows 5
1.2 Tổng quan về tiến trình 5
1.2.1 Tiến trình là gì? 5
1.2.2 Chương trình ví dụ về tiến trình 6
1.3 Hàm API trên hệ điều hành windows 8
1.3.1 Hàm API là gì? 8
1.3.2 Một số hàm API trên hệ điều hành widnows 8
CHƯƠNG 2: CHƯƠNG TRÌNH ỨNG DỤNG HỖ TRỢ HỆ ĐIỀU HÀNH VÀ THỰC NGHIỆM 10
2.1 Giới thiệu bài toán chương trình ứng dụng 10
2.2 Giải thuật của bài toán 10
2.3 Mã nguồn chương trình ứng dụng và thực nghiệm 14
2.4 Hình ảnh màn hình thực nghiệm chương tình 23
CHƯƠNG 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 30
3.1 Kết luận 30
3.2 Hướng phát triển 30
TÀI LIỆU THAM KHẢO 31
2
Trang 3MỞ ĐẦU
1 Giới thiệu
Hệ điều hành là một hệ chương trình hoạt động giữa người dùng và phần cứng củamáy tính Từ đó, cung cấp một môi trường để người sử dụng có thể thi hành các chương trình làm cho máy tính dễ sử dụng hơn, thuận tiện và hiệu quả Hệ điều hành cung cấp các phương thức để tắt nguồn / khởi động lại máy tính, khóa và ngủ đông tạm ngưng các tiến trình hiện tại để máy tính về chế độ nguồn điện thấp Nên nhóm
em chọn đề tài “XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG QUẢN LÝ TẮT NGUỒN / KHỞI ĐỘNG LẠI TỰ ĐỘNG, KHÓA VÀ CHẾ ĐỘ NGỦ ĐÔNG TRÊN MÁY TÍNH WINDOWS” dùng các hàm API để mô phỏng cách máy tính
làm việc
2 Công cụ sử dụng
Ngôn ngữ lập trình: C#
Công cụ lập trình: Visual Studio 2019
Nội dung bố cục của báo cáo được trình bày trong 3 chương:
Chương 1 : Tổng quan về hệ điều hành và hàm API trên hệ điều hành windown.Chương này trình bày các khái niệm tổng quan logic về hệ điều hành windows Từ
đó, giới thiệu về tiến trình trong hệ điều hành widnows, một số hàm API và công dụng của hàm API trên windows
Chương 2: Chương trình ứng dụng hỗ trợ hệ điều hành và thực nghiệm
Chương này trình bày các khái niệm, trình bày bài toán, giải thuật cho chương trình Tắt nguồn / Khởi động lại máy tính, Khóa, Ngủ đông máy tính Từ đó đưa ra đầy
đủ mã nguồn và chú thích cho từng module chức năng và hình ảnh thực nghiệm của ứng dụng
3
Trang 4Chương 3: Kết luận và hướng phát triển.
Chương này đưa ra kết luận về những gì đã làm được và rút ra bài học định hướng phát triển ứng dụng cho ứng dụng hỗ trợ hệ điều hành trong tương lai
4
Trang 5CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH VÀ HÀM API
TRÊN HỆ ĐIỀU HÀNH WINDOWS
1.1 Tổng quan về hệ điều hành windows.
Định nghĩa: Hệ điều hành là một chương trình hay một hệ chương tình hoạt động giao tiếp giữa người dùng và phần cứng máy tính Cung cấp một môi trường để người sử dụng có thể thi hành chương trình, giúp ích cho người dùng trong công việc và cuộc sống Hệ điều hành bao gồm các chương trình dịch, hệ thống cơ sở sữ liệu, sử dụng tài nguyên của máy tính để giải quyết các yêu cầu người dùng
Hình 1: Hình ảnh minh họa sự so sánh giữa các loại hệ điều hành năm 2014
Hệ điều hành windows: Một hệ điều hành đa nhiệm có thể xử lý nhiều chương trình cùng một lúc Hệ điều hành được phân phối bởi Microsoft
1.2 Tổng quan về tiến trình
1.2.1 Tiến trình là gì?
Tiến trình là một thực thể đang thực hiện điều khiển một đoạn mã lệnh riêng không gian, địa chỉ, ngăn xếp và sở hữu một trạng thái giúp thông báo nó đang làm gì (đang chạy, đang chờ, đã đóng, )
5
Trang 6Tiến trình có 4 thành phần quan trọng: CPU, bộ nhớ, File, Thiết bị nhập xuất.
1.2.2 Chương trình ví dụ về tiến trình
- Mã nguồn code:
+ Khai báo hàm hiển thị danh sách các tiến trình
private void loadProcessList()
Trang 7private void btnStart_Click(object sender, EventArgs e)
{
string text = txtText.Text;
Process process = new
Process();
process.StartInfo.FileName = text; //Nhân chuỗi nhập
vào process.Start();
}
+ Xử lý sự kiện kill một tiến trình
private void btnStop_Click(object sender, EventArgs e)
Trang 81.3 Hàm API trên hệ điều hành windows
1.3.1 Hàm API là gì?
API là viết tắt của Application Programming Interface (giao diện lập trình ứng dung) phương thức kết nối với các thư viện và ứng dụng khác Nó chính là một phần mềm giao tiếp được sử dụng bởi các ứng dụng khác nhau giữa chương trình và hệ điều hành
1.3.2 Một số hàm API trên hệ điều hành widnows
- Các API được tổ chức trong 4 DLL của windows:
Trang 9Thư viện quản lý Windows Thư viện này chứa các hàm xử lý menu, định giờ,truyền tin, tập tin và nhiều phần không được hiển thị khác của Windows.
Ta có thể tìm các tập tin này trong thư mục \Windows\system Ngoài ra, còn có các DLL
nhỏ hơn, cũng được dùng phổ biến để cung cấp các dịch vụ đặc biệt cho ứng dụng.Trên đây là các tên DLL 32 bit Phiên bản VB4 là bản cuối cùng còn hỗ trợ 16 bit
Một số hàm API:
- Declare Function AnyPopup Lib "user32" Alias "AnyPopup" () As Long
Công dụng:Đưa ra chỉ số cửa sổ popup đang tồn tại trên màn hình
Trị trả về: Integer ~ True (Khác zero) nếu có cửa sổ popup
- Declare Function AdjustWindowRectEx Lib "user32" Alias
"AdjustWindowRectEx" (lpRect As RECT, ByVal dsStyle As Long, ByValbMenu As Long, ByVal dwEsStyle As Long) As Long
Công dụng: Điều chỉnh cửa sổ khi có vùng làm việc client (Không tính kích thước của thanh tiêu đề, đường viền và các phần thêm) được khai báo, khi biết kiểu cửa sổ
Tham số kèm: LpRect Hình chữ nhật chứa vùng làm việc client DwStyle Kiểu cửa sổ BMenu Đưa giá trị True (Khác zero) nếu cửa sổ có trình đơn DwEsStyle kiểu cửa sổ mở rộng
9
Trang 10CHƯƠNG 2: CHƯƠNG TRÌNH ỨNG DỤNG HỖ TRỢ HỆ ĐIỀU
HÀNH VÀ THỰC NGHIỆM
2.1 Giới thiệu bài toán chương trình ứng dụng.
- Chương trình quản lý tự động tắt nguồn / khởi động lại, khóa và chế độ ngủ đông cho máy tính cho phép người dùng máy tính thực hiện việc đặt thời gian tự động tắt nguồn / khởi động lại 1 cách nhanh chóng, khóa màn hình máy tính để tránh việc truy cập trái phép vào máy tính hoặc cho máy tính về chế độ ngủ đông để tiệntrong việc di chuyển máy tính
- Nguyên tắc chung của chương trình là dùng những hàm API liên quan đến quản trịthiết bị có sẵn trên Window để thực hiện những công việc trên
- Dùng những hàm để tính thời gian tự động tắt nguồn / khởi động lại và hủy bỏ việc tự động đó
10
Trang 11Từ đó, chương trình sẽ sử dụng hỗ trợ hàm API trên hệ điều hành Windows tiến trình của chương trình và thực hiện việc tắt nguồn / khởi động lại, khóa và chế độ ngủ đôngcho máy tính.
2.2 Giải thuật của bài toán.
1 Tắt nguồn.
Đầu vào: Sự kiện người dùng có thể chỉnh thời gian tự động tắt nguồn trên giao diện
(nếu người dùng không chỉnh thì máy tính sẽ tắt nguồn ngay lập tức) và nhấn vào shutdown
Đầu ra: Cho phép người dùng thiết lập thời gian tắt nguồn tự động cho máy tính.
Các bước tiến hành:
Bước 1: Người dùng chọn thời gian tắt nguồn trên giao diện
Bước 2: Người dùng nhấn nút SHUTDOWN
Bước 3: Khai báo sử dụng chức năng hàm xử lý cấp quyền SHUTDOWN 1 cách an toàn trên tiến trình hiện tại
Bước 4: Gọi hàm xử lý tắt nguồn theo thời gian đã quy định của người dùng.Bước 5: Trả về kết quả cho người dùng và thực hiện đếm ngược thời gian tắt nguồn máy tính
2 Khởi động lại.
Đầu vào: Sự kiện người dùng có thể chỉnh thời gian tự động khởi động lại trên giao diện (nếu người dùng không chỉnh thì máy tính sẽ khởi động lại ngay lập tức) và nhấnvào RESTART
Đầu ra: Cho phép người dùng thiết lập thời gian khởi động lại tự động cho máy tính.
11
Trang 12Các bước tiến hành:
Bước 1: Người dùng chọn thời gian khởi động lại trên giao diện
Bước 2: Người dùng nhấn nút RESTART
Bước 3: Khai báo sử dụng chức năng hàm xử lý cấp quyền RESTART 1 cách an toàn trên tiến trình hiện tại
Bước 4: Gọi hàm xử lý khởi động lại theo thời gian đã quy định của người dùng.Bước 5: Trả về kết quả cho người dùng và thực hiện đếm ngược thời gian khởi động lại máy tính
3 Tắt nguồn và cập nhật.
Đầu vào: Sự kiện người dùng có thể chỉnh thời gian tự động tắt nguồn và cập nhật
trên giao diện (nếu người dùng không chỉnh thì máy tính sẽ tắt nguồn và cập nhật ngay lập tức) và nhấn vào shutdown and update
Đầu ra: Cho phép người dùng thiết lập thời gian tắt nguồn và cập nhật tự động cho
máy tính
Các bước tiến hành:
Bước 1: Người dùng chọn thời gian tắt nguồn và cập nhật trên giao diện
Bước 2: Người dùng nhấn nút SHUTDOWN AND UPDATE
Bước 3: Khai báo sử dụng chức năng hàm xử lý cấp quyền SHUTDOWN 1 cách an toàn trên tiến trình hiện tại
Bước 4: Gọi hàm xử lý tắt nguồn và cập nhật theo thời gian đã quy định của người dùng
12
Trang 18+ Khai báo hàm để thiết lập tắt máy / khởi động lại / tắt máy và cập nhật lại máy tính của người dùng.
+ Giải thích tham số:
lpMachineName: Tên máy tính sẽ được tắt
lpMessage: Tin nhắn sẽ được hiển thị trên thông báo tắt nguồn.dwGracePeriod: Thời gian để máy tính tắt máy / khởi động lại / tắt máy
+ Khai báo hàm API xử lý việc thiết lập Hiberate hay Sleep cho máy tính.+ Giải thích tham số:
Hiberate: biến boolean để kiểm tra việc Hiberate hay Sleep True là Hiberate và False là Sleep
forceCritical: Tham số này không có hiệu lực
disableWakeEvent: Tham số true thì hệ thống sẽ vô hiệu hóa tất cả các
sự kiện đang chạy Nếu là false thì bất kỳ sự kiện nào đang chạy vẫn sẽ được bật
- Các biến được sử dụng trong các hàm
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
+ Biến sử dụng để bật quyền SHUTDOWN cho tiến trình trong cấu trúc TokPriv1Luid để sử dụng trong các hàm khác
internal const int TOKEN_QUERY = 0x00000008;
18
Trang 19+ Biến sử dụng trong hàm OpenProcessToken với mục đích truy vấn mã thông báo quyền truy cập.
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
+ Biến sử dụng trong hàm OpenProcessToken dùng để bật quyền trong mã thông báo quyền truy cập
internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";+ Quyền SHUTDOWN mà hàm LookupPrivilegeValue dùng để tìm và cấp quyền cho tiến trình hiện tại
internal const UInt32 SHUTDOWN_INSTALL_UPDATES = 0x00000040;+ Biến được sử dụng như là cờ báo hiệu việc máy tính cần tắt nguồn và cập nhật các gói sẵn có trong máy tính
internal const int EWX_RESTART = 0x00000004;
+ Biến được sử dụng như là cờ báo hiệu việc máy tính cần khởi động lại.internal const UInt32 SHUTDOWN_POWEROFF = 0x00000008;
+ Biến được sử dụng như là cờ báo hiệu việc máy tính cần tắt nguồn
- Hàm xử lý việc tắt nguồn / khởi động lại / tắt nguồn và cập nhật:
private void DoExitWin(UInt32 flg, String tt)
{
timer1.Enabled = !timer1.Enabled; //bật chế độ đếm ngược thời gian của timer UInt32 time = (UInt32)thoiGian(); //lấy thời gian tắt nguồn tự động của người dùng nhập
bool ok;
TokPriv1Luid tp;
IntPtr hproc = GetCurrentProcess();
IntPtr htok = IntPtr.Zero; //IntPtr la con tro
19
Trang 20ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero); InitiateShutdownA(System.Environment.MachineName, tt, time, flg, 0); }
+ Giải thích tham số:
Flg: Cờ báo việc việc máy tính cần làm là tắt nguồn / khởi động lại / tắtnguồn và cập nhật
Tt: Trạng thái hiển thị lên giao diện
- Hàm lấy thời gian người dùng cài đặt để máy tính tự động tắt nguồn / khởi động lại / tắt nguồn và cập nhật
public int thoiGian()
{
int Gio = (int)nUPH.Value;
int Phut = (int)nUPM.Value;
int Giay = (int)nUPS.Value;
int soGiay = Gio * 3600 + Phut * 60 + Giay;
return soGiay;
}
20
Trang 21- Biến cục bộ dùng cho toàn hệ thống.
+ static int v = -2; //biến kiểm tra để cài đặt bộ đếm tự động trên giao diện.+ static string tt = ""; //biến trạng thái hiển thị lên giao diện
- Hàm xử lý sự kiện đếm ngược thời gian tự động
private void timer1_Tick(object sender, EventArgs e)
Trang 22private void btnCancel_Click(object sender, EventArgs e)
{
label4.Text = "Trạng thái: "+tt + " đã bị hủy!"; //
string filename = "shutdown.exe"; //khai báo tìm trên file xử lý tiến tình shutdown.exe
string arguments = "-a"; //Thuộc tính để hủy lệnh shutdown
ProcessStartInfo startinfo = new ProcessStartInfo(filename, arguments); //Khai báo thông tin của hàm xử lý
22
Trang 23Process.Start(startinfo); //Thực hiện hủy lệnh
timer1.Enabled = false; //Tắt bộ đếm ngược thời gian
SetSuspendState(true, true, true);
label4.Text = "Trạng thái: Máy tính đã về trạng thái Hibernate!";
SetSuspendState(false, true, true);
label4.Text = "Trạng thái: Máy tính đã về trạng thái Sleep!";
}
2.4 Hình ảnh màn hình thực nghiệm chương tình.
1 Giao diện chính của chương trình.
23
Trang 242 Chức năng SHUTDOWN
Chức năng Cancel Shutdown
24
Trang 253 Chức năng RESTART
Chức năng Cancel Restart
25
Trang 264 CHỨC NĂNG SHUTDOWN AND UPDATE
Chức năng Cancel Shutdown and Update
26
Trang 275 LOCK
6 HIBERNATE
27
Trang 28Sau khi thoát khỏi chế độ Hibernate.
7 SLEEP
28
Trang 29Sau khi thoát khởi chế độ SLEEP.
29
Trang 30CHƯƠNG 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
3.1 Kết luận
Hiện nay cũng có nhiều ứng dụng hỗ trợ việc tắt nguồn và các thao tác liên quan
Và nhóm em đã áp dụng những kiến thức đó và những hàm API để viết lên chương trình quản lý SHUTDOWN 1 cách thuận tiện
Sau thời gian nghiên cứu và học hỏi, nhóm em đã xây dựng thành công chương trình quản lý tự động tắt nguồn / khởi động lại / tắt nguồn và cập nhật và Hibernate vàSleep hỗ trợ ngôn ngữ cho hệ điều hành Windows Với các chức năng tắt nguồn / khởiđộng lại / tắt nguồn và cập nhật và Hibernate và Sleep của máy tính Tuy nhiên chương trình chưa tránh khỏi việc có nhiều sai sót, nhóm em rất mong nhận được góp
ý từ Thầy Nhóm em chân thành cảm ơn Thầy nhiều!
3.2 Hướng phát triển
Chúng em sẽ hoàn thiện chương trình và bổ sung thêm 1 số tính năng cho chương trình Đồng thời, áp dụng kiến thức môn học để phát triển nhiều ứng dụng hơn nữa để hỗ trợ hệ điều hành Windows
30
Trang 31TÀI LIỆU THAM KHẢO
[1] http://dhthuyloi.blogspot.com/2014/02/tai-lieu-he-ieu-hanh.html
[2] System Shutdown Functions - Win32 apps | Microsoft Docs [3] https://msdn.microsoft.com/en-us/library/
31