[VC2010] 「ファイルのプロパティ」ダイアログを開く方法

◆概要

この資料は、アイコンを右クリックしたときに出るメニュー中の[プロパティ(R)]で表示される、「ファイルのプロパティ」ダイアログを呼び出す方法を説明しています。
ファイルのプロパティダイアログを表示するには、ShellExecuteEx APIを使います。

まず、usingディレクティブにAPIを使用できるように次の記述を追加します。

using System.Runtime.InteropServices;

 次に、以下の構造体とAPIの宣言、定数の宣言を行います。

        // APIで使用する構造体
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        private struct SHELLEXECUTEINFO
        {
            public int cbSize;
            public uint fMask;
            public IntPtr hwnd;
            public string lpVerb;
            public string lpFile;
            public string lpParameters;
            public string lpDirectory;
            public int nShow;
            public IntPtr hInstApp;
            public int lpIDList;
            public string lpClass;
            public IntPtr hkeyClass;
            public int dwHotKey;
            public IntPtr hIcon;
            public IntPtr hProcess;
        }

        // Windows API
        [DllImport("shell32", CharSet=CharSet.Auto)]
        extern static int ShellExecuteEx(ref SHELLEXECUTEINFO lpExecInfo);

        // APIで使用する定数
        private const int SEE_MASK_INVOKELIST = 0xC;

最後に使用したいところで、以下のように記述します。このとき、lpFileにプロパティを表示したいファイル名をフルパスで指定します。
次の例では、ボタンをクリックしたとき、CドライブのWindowsフォルダにある、Notopad.exeのプロパティが表示されます。

        private void button1_Click(object sender, EventArgs e)
        {
            SHELLEXECUTEINFO seInfo = new SHELLEXECUTEINFO();

            seInfo.cbSize = Marshal.SizeOf(seInfo);
            seInfo.fMask = SEE_MASK_INVOKELIST;
            seInfo.lpVerb = "properties";
            seInfo.lpFile = @"C:\Windows\NOTEPAD.EXE";

            ShellExecuteEx(ref seInfo);
        }

実行結果

▼ページトップへ