Đóng m khay CD trong .NET
C p nh t: 26/8/2008 v i no comments
X p trong: ếL p trình, C#, Application
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 winmmế
DLL 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 n trong vi c g i m hay đóng khay ươ ơ
CD/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 winmmế
DLL 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 n ươ ơ
trong 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 ng ư ượ
mciSendString t Windows API. Bài vi t này đ c vi t v i Visual Studio 2005, nh ng ế ượ ế ư
nó 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 đó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 plain print ?
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àmượ ư
mciSendString đ c s d ng đ g i đi m t chu i câu l nh đ n thi t b MCI, trongượ ế ế
tr ng h p này là đĩa CD/DVD.ườ
view plain print ?
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 plain print ?
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 set
CDAudio door closed.
view plain print ?
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 a
cá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/DVDế ế
và 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
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 n ượ ế ư
mã 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 plain print ?
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 u ư
CDAudio c a đĩa, ti p đ n trong câu l nh th hai, chúng ta m nó b ng cách ch ra ế ế
bí 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 plain print ?
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âu ế ế
l nh open door/close door trong các handler c a các nút đó.