Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2 MB, 31 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b>MÔN HỆ ĐIỀU HÀNH</b>
<b>ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG QUẢN LÝ TẮTNGUỒN / KHỞI ĐỘNG LẠI TỰ ĐỘNG, KHÓA VÀ CHẾ ĐỘ NGỦ ĐƠNG</b>
<b>TRÊN MÁY TÍNH WINDOWS</b>
<i>Giảng viên hướng dẫn : TS. Phạm Thanh Bình Nhóm sinh viên thực hiện :</i>
1. Nguyễn Thị Loan – 61TH42. Đào Duy Đán - 61TH43. Phạm Lê Dũng – 61TH44. Lê Đức Thắng – 61TH4
1
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><b>Hà Nội, 4/2022MỤC LỤC</b>
<b>1.3.2.Một số hàm API trên hệ điều hành widnows...8</b>
<b>CHƯƠNG 2: CHƯƠNG TRÌNH ỨNG DỤNG HỖ TRỢ HỆ ĐIỀU HÀNH VÀ THỰC NGHIỆM...10</b>
<b>2.1. Giới thiệu bài toán chương trình ứng dụng...10</b>
<b>2.2. Giải thuật của bài tốn...10</b>
<b>2.3. Mã nguồn chương trình ứng dụng và thực nghiệm...14</b>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">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
<b>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 </b>
làm việc.
<b>2.Cơng cụ sử dụng</b>
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:
<b>Chương 1</b> : 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.
<b>Chương 2: Chương trình ứng dụng hỗ trợ hệ điều hành và thực nghiệm</b>
Chương này trình bày các khái niệm, trình bày bài tố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
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><b>Chương 3: Kết luận và hướng phát triển.</b>
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
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5"><b>1.1.Tổng quan về hệ điều hành windows.</b>
Đị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.
<b>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</b>
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.
<b>1.2.Tổng quan về tiến trình1.2.1. Tiến trình là gì?</b>
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
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Tiến trình có 4 thành phần quan trọng: CPU, bộ nhớ, File, Thiết bị nhập xuất.
<b>1.2.2. Chương trình ví dụ về tiến trình- Mã nguồn code:</b>
+ Khai báo hàm hiển thị danh sách các tiến trìnhprivate void loadProcessList()
lblCount.Text = processList.Length.ToString();}
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">private void btnStart_Click(object sender, EventArgs e){
string text = txtText.Text;
Process process = new
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){
private void timer1_Tick(object sender, EventArgs e){
private void killProcessToolStripMenuItem_Click(object sender, EventArgs e){
<b>- Hình ảnh chạy chương trình:</b>
7
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8"><b>1.3.Hàm API trên hệ điều hành windows1.3.1. Hàm API là gì?</b>
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.
<b>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:a. KERNEL32:</b>
Là DLL chính, đảm nhiệm quản lý bộ nhớ, thưc hiện chức năng đa nhiệm và những hàm ảnh hưởng trực tiếp đến hoạt động của Windows.
<b>b. USER32</b>
8
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">Thư 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.
<i>Ta có thể tìm các tập tin này trong thư mục \Windows\system. Ngồi ra, cịn có các DLL </i>
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.
<b>Một số hàm API:</b>
<b>- Declare Function AnyPopup Lib "user32" Alias "AnyPopup" () As Long</b>
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.
<b>- Declare Function AdjustWindowRectEx Lib "user32" Alias </b>
"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
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><b>2.1. Giới thiệu bài tốn chương trình ứng dụng.</b>
- 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
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Từ đó, 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.
<b>2.2. Giải thuật của bài toán.1. Tắt nguồn.</b>
<b>Đầ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 </b>
(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.
<b>Đầ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.</b>
<b>2. Khởi động lại.</b>
<b>Đầu vào:</b> 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.
<b>Đầ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.</b>
11
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12"><b>3. Tắt nguồn và cập nhật.</b>
<b>Đầ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 </b>
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.
<b>Đầ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 </b>
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 tồ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
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="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áyvà cập nhật.
dwShutdownFlags: Cờ xác định máy tính sẽ được tắt máy hay khởi động lại hay tắt máy và cập nhật.
dwReason: Lý do bắt đầu tắt máy. Có thể sử dụng tham số 0 cho biến này.
[DllImport("Powrprof.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern bool SetSuspendState(bool hiberate, bool forceCritical, bool disableWakeEvent);
+ 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
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="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
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
tp.Count = 1; tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
ok = 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
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="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) {
int tG = 0; if (v == -2) {
tG = thoiGian(); v = tG; } if (v > 0) {
label4.Text = "Trạng thái: Máy tính sẽ " + tt + " sau " + v + " giây!"; v--;
} else {
timer1.Stop();
label4.Text = "Trạng thái: Máy tính sẽ "+tt+" ngay lập tức!"; v = -2;
} }
- Hàm xử lý gọi hàm tắt nguồn. (Khi người dùng click vào SHUTDOWN trên giao diện hiển thị)
private void btnShutdown_Click(object sender, EventArgs e) {
21
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">tt = "tắt nguồn";
DoExitWin(SHUTDOWN_POWEROFF, "SHUTDOWN"); }
- Hàm xử lý gọi hàm khởi động lại. (Khi người dùng click vào RESTART trên giao diện hiển thị)
private void btnRestart_Click(object sender, EventArgs e) {
tt = "khởi động lại";
DoExitWin(EWX_RESTART, "RESTART"); }
- Hàm xử lý gọi hàm tắt nguồn và cập nhật. (Khi người dùng click vào SHUTDOWN AND UPDATE trên giao diện hiển thị)
private void btnShutdownandUpdate_Click(object sender, EventArgs e) {
private 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
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">Process.Start(startinfo); //Thực hiện hủy lệnh timer1.Enabled = false; //Tắt bộ đếm ngược thời gian v = -2;
SetSuspendState(true, true, true);
label4.Text = "Trạng thái: Máy tính đã về trạng thái Hibernate!"; }
- Hàm xử lý gọi hàm SLEEP (Khi người dùng click vào SLEEP trên giao diện hiển thị)
private void btnSleep_Click(object sender, EventArgs e) {
SetSuspendState(false, true, true);
label4.Text = "Trạng thái: Máy tính đã về trạng thái Sleep!"; }
<b>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.</b>
23
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24"><b>2. Chức năng SHUTDOWN</b>
Chức năng Cancel Shutdown
24
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25"><b>3. Chức năng RESTART</b>
Chức năng Cancel Restart
25
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26"><b>4. CHỨC NĂNG SHUTDOWN AND UPDATE</b>
Chức năng Cancel Shutdown and Update
26
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27"><b>5. LOCK</b>
<b>6. HIBERNATE</b>
27
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">Sau khi thoát khỏi chế độ Hibernate.
<b>7. SLEEP</b>
28
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">Sau khi thoát khởi chế độ SLEEP.
29
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30"><b>3.1. Kết luận</b>
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!
<b>3.2.Hướng phát triển</b>
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
</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31"><b>TÀI LIỆU THAM KHẢO</b>
[1] System Shutdown Functions - Win32 apps | Microsoft Docs[3] </b>