Chương trình đóng mở ổ CD bằng C# và VB.NET
|Bài này mình giới thiệu cách sử dụng Windows API để viết chương trình đóng mở ổ CD bằng C# hoặc VB.NET.
Trên Windows, winmm.dll (thường nằm trong thư mục WINDOWS\System32) là thư viện chứa các API liên quan đến Multimedia. Nó chứa các hàm cấp thấp để thao tác với các driver thiết bị (Windows device drivers) và các phần cứng đa phương tiện (multimedia hardware). Các hàm này còn được gọi với tên là Multimedia Control Interface (MCI).
Ổ CD cũng là một thiết bị đa phương tiện. Như vậy, ta có thể sử dụng thư viện winmm.dll để thao tác với nó. Cụ thể, chúng ta sẽ sử dụng hàm mciSendString. Cú pháp C++ của hàm này như sau:
MCIERROR mciSendString(
LPCTSTR lpszCommand,
LPTSTR lpszReturnString,
UINT cchReturn,
HANDLE hwndCallback
);
Trong đó:
- lpszCommand: là một chuỗi chứa lệnh mà ta muốn gởi tới thiết bị cần thao tác. Trong C# và VB.NET, chúng ta có thể sử dụng kiểu dữ liệu String cho tham số này.
- lpszReturnString: là một chuỗi sẽ nhận thông tin mà hàm trả về. Trong C# và VB.NET, chúng ta có thể sử dụng tham số ra (output parameter) hoặc truyền tham số theo tham chiếu (ByRef). Ngoài ra, nếu không quan tâm đến thông tin này, ta có thể để NULL.
- cchReturn: độ dài chuỗi lpszReturnString.
- hwndCalback: handle của callback window sẽ xử lý trong trường hợp có cờ “notify” trong lpszCommand. Đại khái là nếu có sử dụng “notify” trong lpszCommand, thì khi mciSendString thực thi xong, một thông điệp sẽ được gởi cho callback window để tiếp tục xử lý.
Viết ứng dụng
Chúng ta tạo project với form đơn giản như sau:
Trong chương trình, chúng ta sẽ gọi hàm mciSendString(), truyền lệnh “set CDAudio door open” vào tham số lpszCommand để ra lệnh mở ổ CD và lệnh “set CDAudio door closed” để ra lệnh đóng ổ CD. Giả sử chúng ta không quan tâm đến thông tin mà hàm trả ra tham số thứ hai, nên sẽ truyền NULL cho lpszReturnString, kéo theo cchReturn là 0. Chúng ta cũng sẽ không xử lý gì sau khi truyền lệnh mở/đóng ổ CD nên hwndCallback cũng để là 0.
Mã C#
Bước 1: Thêm chỉ thị sau ở đầu file mã của Form (giả sử là Form1.cs):
using System.Runtime.InteropServices;
Bước 2: Bên trong khai báo lớp Form1, thêm dòng sau:
[DllImport("winmm.dll")]
private static extern Int32 mciSendString(String lpstrCommand, String lpstrReturnString, Int32 cchReturn, Int32 hwndCallback);
Bước 3: Câu lệnh cho nút mở ổ CD:
mciSendString("set CDAudio door open", null, 0, 0);
Bước 4: Câu lệnh cho nút đóng ổ CD:
mciSendString("set CDAudio door closed", null, 0, 0);
Download Project mẫu (Visual Studio 2013)
Mã VB.NET
Bước 1: Thêm chỉ thị sau ở đầu file mã của Form (giả sử là Form1.vb):
Imports System.Runtime.InteropServices
Bước 2: Bên trong khai báo lớp Form1, thêm dòng sau:
<DllImport("winmm.dll")>
Private Shared Function mciSendString(lpstrCommand As String, lpstrReturnString As String, cchReturn As Int32, hwndCallback As Int32) As Int32
End Function
Bước 3: Câu lệnh cho nút mở ổ CD:
mciSendString("set CDAudio door open", Nothing, 0, 0)
Bước 4: Câu lệnh cho nút đóng ổ CD:
mciSendString("set CDAudio door closed", Nothing, 0, 0)
Download Project mẫu (Visual Studio 2013)
Nguồn tham khảo: