2011-12-06T19:54:31の更新内容

programming/tips/open_property_dialog/index.wiki.txt

current previous
1,85 1,9
 
${smdncms:title,ファイル・フォルダのプロパティダイアログを表示する}
${smdncms:title,ファイル・フォルダのプロパティダイアログを表示する}
~
${smdncms:keywords,C#,VB.NET,プロパティ,ダイアログ,ファイル,フォルダ,SHObjectProperties,ShellExecuteEx}
${smdncms:keywords,C#,VB.NET,プロパティ,ダイアログ,ファイル,フォルダ,ShellExecuteEx}
 
${smdncms:tags,plat/win,api/win32,lang/vb,lang/c#}
${smdncms:tags,plat/win,api/win32,lang/vb,lang/c#}
 
${smdncms:document_versions,codelang=cs,codelang=vb}
${smdncms:document_versions,codelang=cs,codelang=vb}
 

        

        
~
Win32 API関数を用いてファイル・フォルダのプロパティを表示する方法について。
Win32 APIのShellExecuteEx関数を用いてファイル・フォルダのプロパティを表示する。 SHELLEXECUTEINFO.lpVerb に"properties"を代入することによって、ファイルを実行するのではなく、プロパティを表示することができる。
+

          
+
#googleadunit
+

          
+
*SHObjectProperties
+
SHObjectPropertiesを使用すると、さまざまなオブジェクトのプロパティダイアログを表示できる。 任意のファイル・フォルダのプロパティを表示したい場合は、第2引数shopObjectTypeにSHOP_FILEPATHを指定する。 以下の例では引数hwndにIntPtr.Zeroを指定しているが、親ウィンドウが存在する場合はそのウィンドウのハンドルを指定する。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Runtime.InteropServices;
+

          
+
class Sample {
+
  [DllImport("shell32.dll")]
+
  static extern bool SHObjectProperties(IntPtr hwnd,
+
                                        uint shopObjectType,
+
                                        [MarshalAs(UnmanagedType.LPWStr)] string pszObjectName,
+
                                        [MarshalAs(UnmanagedType.LPWStr)] string pszPropertyPage);
+

          
+
  const uint SHOP_PRINTERNAME = 0x1;
+
  const uint SHOP_FILEPATH = 0x2;
+
  const uint SHOP_VOLUMEGUID = 0x4;
+

          
+
  public static void Main()
+
  {
+
    // プロパティを表示する対象のファイル・フォルダのパス
+
    var path = @"C:\";
+

          
+
    if (SHObjectProperties(IntPtr.Zero, SHOP_FILEPATH, path, string.Empty))
+
      Console.WriteLine("成功しました");
+
    else
+
      Console.WriteLine("失敗しました");
+

          
+
    Console.WriteLine("終了するにはEnterキーを押してください");
+
    Console.ReadLine();
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Runtime.InteropServices
+

          
+
Class Sample
+
  <DllImport("shell32.dll")> _
+
  Shared Function SHObjectProperties(ByVal hwnd As IntPtr, _
+
                                     ByVal shopObjectType As UInteger, _
+
                                     <MarshalAs(UnmanagedType.LPWStr)> ByVal pszObjectName As String, _
+
                                     <MarshalAs(UnmanagedType.LPWStr)> ByVal pszPropertyPage As String) As Boolean
+
  End Function
+

          
+
  Const SHOP_PRINTERNAME As UInteger = &H1
+
  Const SHOP_FILEPATH As UInteger = &H2
+
  Const SHOP_VOLUMEGUID As UInteger = &H4
+

          
+
  Public Shared Sub Main()
+

          
+
    ' プロパティを表示する対象のファイル・フォルダのパス
+
    Dim path As String = "C:\"
+

          
+
    If SHObjectProperties(IntPtr.Zero, SHOP_FILEPATH, path, String.Empty) Then
+
      Console.WriteLine("成功しました")
+
    Else
+
      Console.WriteLine("失敗しました")
+
    End If
+

          
+
    Console.WriteLine("終了するにはEnterキーを押してください")
+
    Console.ReadLine()
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
なお、引数shopObjectTypeとpszObjectNameに指定する値を変えることでファイル・フォルダ以外のプロパティも表示でき、例えばプリンタのプロパティなども表示することができる。
+

          
+
*ShellExecuteEx
+
ShellExecuteExはファイルのオープン・実行だけでなく、verbを指定することでファイルに様々な動作を行うことが出来る。 SHELLEXECUTEINFO.lpVerb に"properties"を代入することによって、ファイルを実行するのではなく、プロパティを表示することができる。
 

        

        
 
関数が失敗すると、falseが返されると同時に、SHELLEXECUTEINFO.hInstAppに32以下のエラー値が代入される。 エラー値とその具体的な意味はコード中のSE_ERR〜の定数にある通り。 この例ではSHELLEXECUTEINFO.hWndにIntPtr.Zeroを指定しているが、親ウィンドウが存在する場合はそのウィンドウのハンドルを指定する。
関数が失敗すると、falseが返されると同時に、SHELLEXECUTEINFO.hInstAppに32以下のエラー値が代入される。 エラー値とその具体的な意味はコード中のSE_ERR〜の定数にある通り。 この例ではSHELLEXECUTEINFO.hWndにIntPtr.Zeroを指定しているが、親ウィンドウが存在する場合はそのウィンドウのハンドルを指定する。
 
#googleadunit
#googleadunit