C#の質問

・C#から実行可能なAPIなどでCDドライブのトレイを開閉することはできますか?
・C#から実行可能なAPIなどでシステムの音量を変更することはできますか?

事前に他の言語でDLLを作り、それを呼び出す方法はできるだけ使わないように
したいと考えております。
アドバイス宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/10/30 10:20:33
  • 終了:2009/11/02 09:42:57

ベストアンサー

id:y-kawaz No.2

y-kawaz回答回数1420ベストアンサー獲得回数2252009/10/30 11:08:14

ポイント150pt

ドライブの開閉やシステムのボリューム変更は.NETのAPIではできないと思います。

が事前に自分でDLLを作る必要はなく、OSのAPIを呼び出せばそれで目的は達成できると思います。


とりあえずドライブの開閉は以下のような感じで出来ました。

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()
    {
        
        mciSendString("status my_sound volume", buff, buffのサイズ, IntPtr.Zero);
        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("{0}ドライブを開きます。", drive);
                mciSendString("set orator door open", null, 0, IntPtr.Zero);
                Console.WriteLine("{0}ドライブを閉じます。", drive);
                mciSendString("set orator door closed", null, 0, IntPtr.Zero);
                mciSendString("close orator", null, 0, IntPtr.Zero);
            }
        }
    }
}

システムの音量調整は面倒なので割愛します(^^;

自作DLLを別途作る必要は一応ないと思います。

http://q.hatena.ne.jp/answer

id:harunoharuno

回答ありがとうございます。

OSのAPIは知っていれば自由に使えるものなのですね。

他にどんなものが存在するのか興味が出てきました。

2009/10/30 11:48:58

その他の回答(2件)

id:freemann No.1

freemann回答回数305ベストアンサー獲得回数482009/10/30 10:45:22

ポイント150pt

以下のサイトが参考になるようです。

CDドライブの開閉

http://bbs.wankuma.com/index.cgi?mode=al2&namber=38846&KLOG=67

音量調整

http://bbs.wankuma.com/index.cgi?mode=al2&namber=11021&KLOG=24

id:harunoharuno

回答ありがとうございます。大変参考になりました。

2009/10/30 11:47:29
id:y-kawaz No.2

y-kawaz回答回数1420ベストアンサー獲得回数2252009/10/30 11:08:14ここでベストアンサー

ポイント150pt

ドライブの開閉やシステムのボリューム変更は.NETのAPIではできないと思います。

が事前に自分でDLLを作る必要はなく、OSのAPIを呼び出せばそれで目的は達成できると思います。


とりあえずドライブの開閉は以下のような感じで出来ました。

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()
    {
        
        mciSendString("status my_sound volume", buff, buffのサイズ, IntPtr.Zero);
        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("{0}ドライブを開きます。", drive);
                mciSendString("set orator door open", null, 0, IntPtr.Zero);
                Console.WriteLine("{0}ドライブを閉じます。", drive);
                mciSendString("set orator door closed", null, 0, IntPtr.Zero);
                mciSendString("close orator", null, 0, IntPtr.Zero);
            }
        }
    }
}

システムの音量調整は面倒なので割愛します(^^;

自作DLLを別途作る必要は一応ないと思います。

http://q.hatena.ne.jp/answer

id:harunoharuno

回答ありがとうございます。

OSのAPIは知っていれば自由に使えるものなのですね。

他にどんなものが存在するのか興味が出てきました。

2009/10/30 11:48:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません