0

P/Invokeはあまり得意ではありません。誰かが.NETで次のshell32.dll関数を宣言して使用する方法を教えてもらえますか?

http://msdn.microsoft.com/en-us/library/bb762230%28VS.85%29.aspxから:

HRESULT SHMultiFileProperties(      
    IDataObject *pdtobj,
    DWORD dwFlags
);

これは、複数のファイルシステムオブジェクトのWindowsシェルのプロパティダイアログを表示するためのものです。

1つのファイルまたはフォルダーに対してSHObjectPropertiesを使用する方法はすでに理解しています。

[DllImport("shell32.dll", SetLastError = true)]
static extern bool SHObjectProperties(uint hwnd, uint shopObjectType, [MarshalAs(UnmanagedType.LPWStr)] string pszObjectName, [MarshalAs(UnmanagedType.LPWStr)] string pszPropertyPage);

public static void ShowDialog(Form parent, FileSystemInfo selected)
{
    SHObjectProperties((uint)parent.Handle, (uint)ObjectType.File, selected.FullName, null));
}

enum ObjectType
{
    Printer = 0x01,
    File = 0x02,
    VoumeGuid = 0x04,
}

誰か助けてもらえますか?

4

2 に答える 2

4

.NETFrameworkにはIDataObjectインターフェイスとDataObjectクラスがあります。

[DllImport("shell32.dll", SetLastError = true)]
static extern int SHMultiFileProperties(IDataObject pdtobj, int flags);

public static void Foo()
{
    var pdtobj = new DataObject();

    pdtobj.SetFileDropList(new StringCollection { @"C:\Users", @"C:\Windows" });

    if (SHMultiFileProperties(pdtobj, 0) != 0 /*S_OK*/)
    {
        throw new Win32Exception();
    }
}

編集:これをコンパイルしてテストしたところ、動作します(フォルダーの外観設定を含むダイアログが表示されます)。

于 2009-08-15T08:53:45.020 に答える