potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

C# ドライブが自動実行されるメディアタイプを取得する

ドライブが自動実行されるメディアタイプを取得するサンプルコードです。

using System;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security;

namespace ConsoleApplication1
{
    [SecurityCritical]
    class Program
    {
        [SuppressUnmanagedCodeSecurity]
        private static class NativeMethods
        {
            [DllImport("shell32.dll", CharSet = CharSet.Unicode, PreserveSig = false)]
            public static extern AutoRunContentType SHGetDriveMedia(string pszDrive);
        }

        [Flags]
        public enum AutoRunContentType : int
        {
            AutoRunINF = 0x2,
            AudioCD = 0x4,
            DVDMovie = 0x8,
            BlankCD = 0x10,
            BlankDVD = 0x20,
            UnknownContent = 0x40,
            Picture = 0x80,
            Music = 0x100,
            Video = 0x200,
            VideoCD = 0x400,
            SuperVideoCD = 0x800,
            DVDAudioMedia = 0x1000,
            BlankBlurayDisc = 0x2000,
            BlurayDisc = 0x4000,
            CameraStorage = 0x8000,
            CustomEvent = 0x10000,
            None = 0x0,
            Mask = 0x1FFFE,
            PhaseUnknown = 0x0,
            PhasePresniff = 0x10000000,
            PhaseSniffing = 0x20000000,
            PhaseFinal = 0x40000000,
            PhaseMask = 0x70000000,
        }

        static void Main()
        {
            foreach (char letter in Enumerable.Range('a', 'z' - 'a' + 1))
            {
                var path = letter + ":\\";
                try
                {
                    // ドライブメディアの種類を取得します。
                    var driveMediaType = NativeMethods.SHGetDriveMedia(path);
                    Console.WriteLine("{0} - {1}", path, driveMediaType.ToString());
                }
                catch (Exception e)
                {
                    Console.WriteLine("{0} - {1}", path, e.Message);
                }
            }

            Console.WriteLine("PRESS ANY KEY.");
            Console.ReadKey();
        }
    }
}

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。