Danh mục

Đóng mở khay CD trong .NET

Số trang: 3      Loại file: doc      Dung lượng: 88.50 KB      Lượt xem: 7      Lượt tải: 0    
Jamona

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài viết này sẽ dạy bạn cách mở và đóng khay CD/VCD bằng C# sử dụng winmmDLL và các cuộc gọi mã không quản với PInvoke. Microsoft .NET Framework khôngcung cấp phương thức nào để bạn có thể đơn giản trong việc gọi mở hay đóng khayCD/DVD của các ổ đĩa...
Nội dung trích xuất từ tài liệu:
Đóng mở khay CD trong .NETĐóng mở khay CD trong .NETCập nhật: 26/8/2008 với no commentsXếp trong: Lập trình, C#, ApplicationBài viết này sẽ dạy bạn cách mở và đóng khay CD/VCD bằng C# sử dụng winmmDLL và các cuộc gọi mã không quản với PInvoke. Microsoft .NET Framework khôngcung cấp phương thức nào để bạn có thể đơn giản trong việc gọi mở hay đóng khayCD/DVD của các ổ đĩa...Bài viết này sẽ dạy bạn cách mở và đóng khay CD/VCD bằng C# sử dụng winmmDLL và các cuộc gọi mã không quản với PInvoke.Microsoft .NET Framework không cung cấp phương thức nào để bạn có thể đơn giảntrong việc gọi mở hay đóng khay CD/DVD của các ổ đĩa máy tính. Tuy nhiên, điều đókhông có nghĩa là vấn đề đưa ra không thể dễ dàng thực hiện được bằng cách sử dụngmciSendString từ Windows API. Bài viết này được viết với Visual Studio 2005, nhưngnó cũng chạy tốt cả với Visual Studio 2003.Khởi động một project C# Window Application. Kéo 2 nút đưa lên form, btnOpen vàbtnClose, chúng sẽ mở và đóng khay CD/DVD khi được click.Bây giờ chúng ta hãy chuyển sang chế độ code và thêm tiền chỉ thị sau vào, bởi vìchúng ta sẽ làm việc với mã không quản.view plainprint? 1. 2. using System.Runtime.InteropServices;Trong class (thường là contructor ở trên), sử dụng hai dòng mã sau đây. Chúng sẽ gọiđến file DLL winmm.dll vào mã nguồn của chúng ta, sử dụng cơ chế có tên là PInvoke.DLL này (winmm.dll) được đặt trong thư mục System32 của Windows. HàmmciSendString được sử dụng để gửi đi một chuỗi câu lệnh đến thiết bị MCI, trongtrường hợp này là ổ đĩa CD/DVD.view plainprint? 1. 2. [DllImport(winmm.dll)] 3. static extern Int32 mciSendString(String command, StringBuilder buffer, Int32 bu fferSize, IntPtr hwndCallback);Bây giờ chúng ta quay trở lại form, nhấn đúp chuột vào nút Open (btnOpen) để nhậnđược handler cho sự kiện Click. Trong handler này chúng ta viết mã sau:view plainprint? 1. 2. mciSendString(set CDAudio door open, null, 0, IntPtr.Zero);Chúng ta đã gửi câu lệnh set CDAudio door open tới thiết bị MCI ( ổ đĩa CD/DVD ).Bạn có thể chạy ứng dụng luôn bằng cách nhấn nút và chờ cho khay được mở ra.Bây giờ bạn có thể muốn biết làm thế nào để đòng khay lại. Hãy quay lại form, nhấnđúp chuột vào nút Close (btnClose) và dùng hàm sau để gửi tới ổ đĩa câu lệnh setCDAudio door closed.view plainprint? 1. 2. mciSendString(set CDAudio door closed, null, 0, IntPtr.Zero);Sau khi biên dịch và kiểm tra ứng dụng C# này, bạn có thể mở và đóng khay đĩa củacác ổ đĩa rồi, và đó chỉ làm bởi một vài dòng mã lệnh.Tôi biết nhiều bạn sẽ đang nghĩ đến câu hỏi lúc này là: Tôi có nhiều ổ đĩa CD/DVDvà chỉ muốn một trong số chúng được mở. Làm thế nào ta có thể chọn một ổ nhưvậy?.Các câu lệnh gửi ở trên, chỉ là mở/đóng ổ đĩa được đánh dấu như là các ổ đĩa mặc địnhđể chạy các CDs audio. Để mở các ổ đĩa khác, chúng ta cần chỉ ra chữ cái tên ổ màchúng ta muốn mở là được. Nếu như bạn có hai ổ đĩa DVD -H và -I, thay đổi lại đoạnmã chúng ta viết lúc nãy trong các handler của sự kiện click vào nút bởi mã:view plainprint? 1. 2. // Open Drive H: 3. mciSendString(open H: type CDAudio alias driveH, null, 0, IntPtr.Zero); 4. mciSendString(set driveH door open, null, 0, IntPtr.Zero); 5. // Open Drive I: 6. mciSendString(open I: type CDAudio alias driveI, null, 0, IntPtr.Zero); 7. mciSendString(set driveI door open, null, 0, IntPtr.Zero);Đầu tiên chúng ta tạo ra tên bí danh cho ổ đĩa H tên là driveH, như là một kiểuCDAudio của ổ đĩa, tiếp đến trong câu lệnh thứ hai, chúng ta mở nó bằng cách chỉ rabí danh thay vì CDAudio. Cách làm cũng sẽ tương tự với ổ đĩa I.Câu lệnh sau đây cho tât cả ổ đĩa minh họa như sau:view plainprint? 1. 2. // Close Drive H: 3. mciSendString(open H: type CDAudio alias driveH, null, 0, IntPtr.Zero); 4. mciSendString(set driveH door closed, null, 0, IntPtr.Zero); 5. // Close Drive I: 6. mciSendString(open I: type CDAudio alias driveI, null, 0, IntPtr.Zero); 7. mciSendString(set driveI door closed, null, 0, IntPtr.Zero);Chỉ cần tùy biến đoạn mã này một chút, bạn có thể sử dụng các dòng bí danh một lần,bằng cách gọi chúng trong sự kiện Load của form, và tiếp đến chỉ việc gọi các câulệnh open door/close door trong các handler của các nút đó.

Tài liệu được xem nhiều: