C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DVD/CDドライバの開閉を行うには?


(過去ログ 67 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■38846 / inTopicNo.1)  DVD/CDドライバの開閉を行うには?
  
□投稿者/ Axolotl (56回)-(2009/07/26(Sun) 11:48:14)
Axolotl さんの Web サイト

分類:[C#] 

お叱りの言葉を受けてこちらで新たに質問させていただくことにしました。

その質問にも入っていますが、
DVD/CDドライバの開閉を行うにはどうすればよいのでしょうか?

それともプログラムからは実行できないのでしょうか?

よろしくお願いします。
引用返信 編集キー/
■38847 / inTopicNo.2)  Re[1]: DVD/CDドライバの開閉を行うには?
□投稿者/ microg (1回)-(2009/07/26(Sun) 12:24:56)
No38846 (Axolotl さん) に返信
> お叱りの言葉を受けてこちらで新たに質問させていただくことにしました。
>
> その質問にも入っていますが、
> DVD/CDドライバの開閉を行うにはどうすればよいのでしょうか?
>
> それともプログラムからは実行できないのでしょうか?
>
> よろしくお願いします。

これはCDなどのイジェクトという事ですよね?
それでしたらAPIを叩けば結構簡単に行くと思います。(ドライブの情報とか必要)
普通にネットで検索しても見つけることができると思いますので参考にしてみてはいかがでしょう。
キーワード「.Net イジェクト」
引用返信 編集キー/
■38848 / inTopicNo.3)  Re[1]: DVD/CDドライバの開閉を行うには?
□投稿者/ 魔界の仮面弁士 (1168回)-(2009/07/26(Sun) 13:11:13)
No38846 (Axolotl さん) に返信
> DVD/CDドライバの開閉を行うには
ドライバ(Driver)ではなく
ドライブ(Drive)ですよね。

> どうすればよいのでしょうか?
幾つかの方法がありますが、たとえばこんなのとか。
(VB であれば、もっとスッキリ書けるのだけれども…)

using System;
using System.Reflection;
using System.Runtime.InteropServices;

class Program
{
    static void Main(string[] args)
    {
        BindingFlags bfGetPropery = BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty;
        BindingFlags bfMethod = BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod;
        Type t = Type.GetTypeFromProgID("WMPlayer.OCX");
        object wmp = Activator.CreateInstance(t);
        object drives = t.InvokeMember("cdromCollection", bfGetPropery, null, wmp, null);
        int cnt = (int)t.InvokeMember("Count", bfGetPropery, null, drives, null);
        for (int i = 0; i < cnt; i++)
        {
            object drive = t.InvokeMember("Item", bfMethod, null, drives, new object[] { i });
            string driveLetter = (string)t.InvokeMember("driveSpecifier", bfGetPropery, null, drive, null);
            Console.WriteLine(driveLetter + "を開閉します。");
            t.InvokeMember("eject", bfMethod, null, drive, null);
            Marshal.ReleaseComObject(drive);
        }
        Marshal.ReleaseComObject(drives);
        Marshal.ReleaseComObject(wmp);
    }
}

引用返信 編集キー/
■38852 / inTopicNo.4)  Re[2]: DVD/CDドライバの開閉を行うには?
□投稿者/ オショウ (281回)-(2009/07/26(Sun) 17:32:59)
> Type t = Type.GetTypeFromProgID("WMPlayer.OCX");
> object wmp = Activator.CreateInstance(t);

  WindowsMediaPlayer使うんですか・・・
  重いな〜

  CDドライブのイジェクトなら
  ttp://smdn.invisiblefulmoon.net/programming/tips/eject_cdrom/

  当然、他にもやり方ありますが、似たりよったり・・・

※ ええ〜とOSは、WinXPと考えてよいのでしょか?
  そうでない場合、機能しません。OSによって方法違いますので。
  そういう意味では、WMPが吸収してくれる・・・

以上。参考まで
引用返信 編集キー/
■38853 / inTopicNo.5)  Re[2]: DVD/CDドライバの開閉を行うには?
□投稿者/ 魔界の仮面弁士 (1170回)-(2009/07/26(Sun) 19:00:40)
No38848 (魔界の仮面弁士) に追記
>>どうすればよいのでしょうか?
> 幾つかの方法がありますが、たとえばこんなのとか。

第2案。

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

class Program
{
    [DllImport("winmm", CharSet = CharSet.Auto)]
    private static extern int mciSendString(
        string command, StringBuilder buffer,
        int bufferSize, IntPtr hwndCallback);

    static void Main()
    {
        foreach (string drive in Environment.GetLogicalDrives())
        {
            DriveInfo di = new DriveInfo(drive);
            if (di.DriveType == DriveType.CDRom)
            {
                mciSendString("open " + drive + " type cdaudio alias orator", null, 0, IntPtr.Zero);
                int canEject = mciSendString("capability orator can eject", null, 0, IntPtr.Zero);
                Console.WriteLine("{0}はイジェクト{1}です。", drive, (canEject == 0) ? "可能" : "不可");
                Console.WriteLine("ドアを開きます。");
                mciSendString("set orator door open", null, 0, IntPtr.Zero);
                Console.WriteLine("ドアを締めます。");
                mciSendString("set orator door closed", null, 0, IntPtr.Zero);
                mciSendString("close orator", null, 0, IntPtr.Zero);
            }
        }
    }
}

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -