2009-08-15 29 views
0

私はP/Invokeにあまり良くありません。誰も宣言し、次のshell32.dll関数を.NETで使用する方法を教えてもらえますか? http://msdn.microsoft.com/en-us/library/bb762230%28VS.85%29.aspxからP/Invoke for shell32.dllのSHMultiFileProperties

HRESULT SHMultiFileProperties(  
    IDataObject *pdtobj, 
    DWORD dwFlags 
); 

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

私はすでに一つのファイルまたはフォルダの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

.NET Frameworkには、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(); 
    } 
} 

EDIT:私はコンパイルされ、これをテストし、それが動作します(フォルダの外観の設定でいくつかのダイアログをポップアップ表示)しました。

+0

は、これは正しい道に私を得たとの質問への答えなので、+回答は、1 しかし、それはより複雑です。私はフォルダの外観の設定ではなく、マルチファイルのプロパティ(アイテムの合計サイズなど)を探していました。 JDropFilesクラスのCopyFilesToClipboardForDragDrop(パス、PT)のための http://www.codeproject.com/KB/files/JFileManager.aspx ルック:幸いにも私は、必要なコードが含まれているコードプロジェクトにJFileManagerを見つけました。これは、IDataObjectにシェルIDリストデータを作成するのに役立ちます。 これはVistaで動作しますが、Windows 2003ではまだ失敗します。まだ完璧なソリューションを探しています。 –

0

私はたぶんあなたの質問を誤って読んでいますが、ファイルの拡張ファイルプロパティを探していると思います。つまり、属性、所有者、著作権、サイズ、作成日などのウィンドウエクスプローラと表示列を開きますか?

この情報を提供するGetDetailsOfというAPIがShell32にあります。 codeproject 乾杯で始まる記事、 ジョン

関連する問題