Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Eject and close CDROOM tự động bằng C#

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    18

    Mặc định Eject and close CDROOM tự động bằng C#

    không biết có ai post lên chưa!
    tui viết tạo xong chương trình eject and close ổ đĩa CDRoom một cách tự động
    anh em nhận xét nhé. mình mới tập viết thui.

    (đang cố hoàn thiện hook phím tắt!)

    rất cám ơn sự nhận xét của mọi người!

    đây là bản trên window của nó. Tạo 1 form và kéo thêm 2 button: Eject, Close vào là ok.
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Text;
    7. using System.Windows.Forms;
    8. using System.Runtime.InteropServices;
    9.  
    10. namespace EjectCDRoomWindow
    11. {
    12.     public partial class Form1 : Form
    13.     {
    14.         /// Drive type of CDRoom.
    15.         private const uint DRIVE_ROOM = 5;
    16.  
    17.         // Drive name.
    18.         private String drive = "";
    19.  
    20.         /// <summary>
    21.         /// Default contructor.
    22.         /// </summary>
    23.         public Form1()
    24.         {
    25.             InitializeComponent();
    26.  
    27.             // Gets label of CDRoom.
    28.             drive = this.DiscDrives();
    29.         }
    30.  
    31.         /// <summary>
    32.         ///
    33.         /// </summary>
    34.         /// <param name="sender"></param>
    35.         /// <param name="e"></param>
    36.         private void btnEject_Click(object sender, EventArgs e)
    37.         {
    38.             this.OpenCDRoom(drive);
    39.         }
    40.  
    41.         /// <summary>
    42.         ///
    43.         /// </summary>
    44.         /// <param name="sender"></param>
    45.         /// <param name="e"></param>
    46.         private void btnClose_Click(object sender, EventArgs e)
    47.         {
    48.             this.closeCDRoom(drive);
    49.         }
    50.  
    51.         /// <summary>
    52.         /// declare method GetDriveType to get label of CDRoom.
    53.         /// </summary>
    54.         /// <param name="driveName"></param>
    55.         /// <returns></returns>
    56.         [DllImport("kernel32", SetLastError = true)]
    57.         public static extern int GetDriveType(String driveName);
    58.  
    59.         /// <summary>
    60.         /// Gets label of CDRoom.
    61.         /// </summary>
    62.         /// <returns>
    63.         /// Label of cdroom.
    64.         /// </returns>
    65.         private String DiscDrives()
    66.         {
    67.             String letter = "";
    68.             foreach (String drive in Environment.GetLogicalDrives())
    69.             {
    70.                 int i = GetDriveType(drive);
    71.                 if (DRIVE_ROOM == i)
    72.                 {
    73.                     letter += drive.ToCharArray()[0];
    74.                 }
    75.             }
    76.  
    77.             return letter;
    78.         }
    79.  
    80.         /// <summary>
    81.         /// declare method mciSendingStringA to open and close CDRoom.
    82.         /// </summary>
    83.         /// <param name="lpstrCommand"></param>
    84.         /// <param name="lpstrReturnString"></param>
    85.         /// <param name="uReturnLength"></param>
    86.         /// <param name="hwndCallback"></param>
    87.         [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
    88.         public static extern void mciSendStringA(string lpstrCommand, string lpstrReturnString,
    89.             long uReturnLength, long hwndCallback);
    90.  
    91.         /// <summary>
    92.         /// Opens cdroom.
    93.         /// </summary>
    94.         /// <param name="drive"></param>
    95.         private void OpenCDRoom(String drive)
    96.         {
    97.             String returnString = "";
    98.             mciSendStringA("set cdaudio!" + drive + " door open", returnString, 0, 0);
    99.         }
    100.  
    101.         /// <summary>
    102.         /// Close cdroom.
    103.         /// </summary>
    104.         /// <param name="drive"></param>
    105.         private void closeCDRoom(String drive)
    106.         {
    107.             String returnString = "";
    108.             mciSendStringA("set cdaudio!" + drive + " door closed", returnString, 0, 0);
    109.         }
    110.     }
    111. }
    Attached Files Attached Files
    --------------------------------------

  2. #2
    Ngày gia nhập
    05 2009
    Bài viết
    19

    dài thế anh. Nhưng mà ứng dụng nho nhỏ này lại hay đấy!!!!
    Java language will become a future of technology

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    34

    Bạn có thể giải thích dùm mình hai dòng này được ko

    [DllImport("kernel32", SetLastError = true)]
    public static extern int GetDriveType(String driveName);
    [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
    public static extern void mciSendStringA(string lpstrCommand, string lpstrReturnString,
    long uReturnLength, long hwndCallback);

    Và trong 2 method OpenCDRoom và closeCDRoom mình thử đánh thẳng vô sự kiện click của hai button thì ko được là vì sao vậy?
    Thanks nhiều (Tại mình gà c# lắm nên mới hỏi nhiều vậy (^_^)).

  4. #4
    Ngày gia nhập
    09 2008
    Bài viết
    18

    mình không biết bạn gọi thẳng 2 method open và close như thế nào. trong code trên của mình cũng gọi thẳng đó chứ. chú ý bạn phải dùng 2 method GetDriverType và mciSendString nhé.

    còn việc sử dụng DllImport thì để dùng function GetDriverType và mciSendString của 2 dll tương ứng thôi. cách này đc dùng rất nhiều.
    bạn cũng có thể ko cần dùng dllImport, bạn có thể add reference cho nó rồi dùng bình thường.
    --------------------------------------

  5. #5
    Ngày gia nhập
    06 2009
    Bài viết
    9

    Thanks bạn nhiều ,mình mới bắt đầu làm quen với C# thôi.

Các đề tài tương tự

  1. Có nên eject Iphone 4
    Gửi bởi dangkynhanhieu trong diễn đàn Thắc mắc IPhone, IPad, Mac OS X
    Trả lời: 2
    Bài viết cuối: 16-05-2013, 11:07 PM
  2. Tại sao đã close connecttiom (conn.close) nhưng kết nối đến databse vẩn còn?
    Gửi bởi commoncm trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 01-12-2011, 02:30 PM
  3. Nút Close(X) không thực hiện???
    Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 14-12-2008, 08:54 PM
  4. Làm cách nào để close Monitor
    Gửi bởi chanphat01001 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 15-05-2008, 08:08 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn