Win32 API 日本語リファレンス
ホームUI.Shell › BROWSEINFOW

BROWSEINFOW

構造体
サイズx64: 64 バイト / x86: 32 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
hwndOwnerHWND8/4+0+0ダイアログボックスのオーナーウィンドウへのハンドルです。
pidlRootITEMIDLIST*8/4+8+4参照を開始するルートフォルダーの位置を指定する PIDL です。名前空間階層内では、指定したフォルダーとそのサブフォルダーのみがダイアログボックスに表示されます。このメンバーは NULL にできます。その場合は既定の位置が使用されます。
pszDisplayNameLPWSTR8/4+16+8ユーザーが選択したフォルダーの表示名を受け取るバッファーへのポインターです。このバッファーのサイズは MAX_PATH 文字であることが前提とされます。
lpszTitleLPWSTR8/4+24+12ダイアログボックス内のツリービューコントロールの上に表示される、null 終端文字列へのポインターです。この文字列は、ユーザーへの指示を指定するために使用できます。
ulFlagsDWORD4+32+16

ダイアログボックスのオプションを指定するフラグです。このメンバーには 0 または次の値の組み合わせを指定できます。バージョン番号は、後のリリースで追加されたフラグを SHBrowseForFolder が認識するために必要な Shell32.dll の最小バージョンを示します。詳細については、シェルおよびコモンコントロールのバージョンを参照してください。

BIF_RETURNONLYFSDIRS (0x00000001)

0x00000001. ファイルシステムのディレクトリのみを返します。ユーザーがファイルシステムに属さないフォルダーを選択した場合、OK ボタンはグレー表示になります。

注意 "\\server" 項目、"\\server\share" 項目、およびディレクトリ項目については、OK ボタンは有効なままです。ただし、ユーザーが "\\server" 項目を選択した場合、SHBrowseForFolder が返した PIDL を SHGetPathFromIDList に渡すと失敗します。

BIF_DONTGOBELOWDOMAIN (0x00000002)

0x00000002. ダイアログボックスのツリービューコントロールに、ドメインレベルより下のネットワークフォルダーを含めません。

BIF_STATUSTEXT (0x00000004)

0x00000004. ダイアログボックスにステータス領域を表示します。コールバック関数は、ダイアログボックスにメッセージを送信することでステータステキストを設定できます。BIF_NEWDIALOGSTYLE を指定した場合、このフラグはサポートされません。

BIF_RETURNFSANCESTORS (0x00000008)

0x00000008. ファイルシステムの上位フォルダーのみを返します。上位フォルダーとは、名前空間階層でルートフォルダーの下にあるサブフォルダーのことです。ユーザーがファイルシステムに属さないルートフォルダーの上位フォルダーを選択した場合、OK ボタンはグレー表示になります。

BIF_EDITBOX (0x00000010)

0x00000010. バージョン 4.71。参照ダイアログボックスに、ユーザーが項目名を入力できるエディットコントロールを含めます。

BIF_VALIDATE (0x00000020)

0x00000020. バージョン 4.71。ユーザーがエディットボックスに無効な名前を入力した場合、参照ダイアログボックスはアプリケーションの BrowseCallbackProcBFFM_VALIDATEFAILED メッセージで呼び出します。BIF_EDITBOX が指定されていない場合、このフラグは無視されます。

BIF_NEWDIALOGSTYLE (0x00000040)

0x00000040. バージョン 5.0。新しいユーザーインターフェイスを使用します。このフラグを設定すると、サイズ変更が可能な、より大きいダイアログボックスがユーザーに表示されます。このダイアログボックスには、ダイアログボックス内でのドラッグアンドドロップ、並べ替え、ショートカットメニュー、新しいフォルダーの作成、削除、その他のショートカットメニューコマンドなど、いくつかの新しい機能があります。

注意 COINIT_MULTITHREADED フラグを設定して CoInitializeEx により COM を初期化した場合、BIF_NEWDIALOGSTYLE を渡すと SHBrowseForFolder は失敗します。

BIF_BROWSEINCLUDEURLS (0x00000080)

0x00000080. バージョン 5.0。参照ダイアログボックスが URL を表示できるようにします。BIF_USENEWUI フラグと BIF_BROWSEINCLUDEFILES フラグも設定する必要があります。これら 3 つのフラグのいずれかが設定されていない場合、参照ダイアログボックスは URL を受け付けません。これらのフラグが設定されている場合でも、選択された項目を含むフォルダーが URL をサポートしている場合にのみ、参照ダイアログボックスは URL を表示します。選択された項目の属性を要求するためにフォルダーの IShellFolder::GetAttributesOf メソッドが呼び出されたとき、そのフォルダーは SFGAO_FOLDER 属性フラグを設定しなければなりません。設定されていない場合、参照ダイアログボックスは URL を表示しません。

BIF_USENEWUI

バージョン 5.0。エディットボックスを含む新しいユーザーインターフェイスを使用します。このフラグは BIF_EDITBOX | BIF_NEWDIALOGSTYLE と同等です。

注意 COINIT_MULTITHREADED フラグを設定して CoInitializeEx により COM を初期化した場合、BIF_USENEWUI を渡すと SHBrowseForFolder は失敗します。

BIF_UAHINT (0x00000100)

0x00000100. バージョン 6.0BIF_NEWDIALOGSTYLE と組み合わせると、エディットボックスの代わりに使用方法のヒントをダイアログボックスに追加します。BIF_EDITBOX はこのフラグを上書きします。

BIF_NONEWFOLDERBUTTON (0x00000200)

0x00000200. バージョン 6.0。参照ダイアログボックスに 新しいフォルダー ボタンを含めません。

BIF_NOTRANSLATETARGETS (0x00000400)

0x00000400. バージョン 6.0。選択された項目がショートカットである場合、そのリンク先ではなくショートカット自体の PIDL を返します。

BIF_BROWSEFORCOMPUTER (0x00001000)

0x00001000. コンピューターのみを返します。ユーザーがコンピューター以外を選択した場合、OK ボタンはグレー表示になります。

BIF_BROWSEFORPRINTER (0x00002000)

0x00002000. プリンターの選択のみを許可します。ユーザーがプリンター以外を選択した場合、OK ボタンはグレー表示になります。

Windows XP 以降のシステムでは、Windows XP スタイルのダイアログを使用し、ダイアログのルートを プリンタと FAX フォルダー (CSIDL_PRINTERS) に設定することがベストプラクティスです。

BIF_BROWSEINCLUDEFILES (0x00004000)

0x00004000. バージョン 4.71。参照ダイアログボックスにフォルダーだけでなくファイルも表示します。

BIF_SHAREABLE (0x00008000)

0x00008000. バージョン 5.0。参照ダイアログボックスがリモートシステム上の共有可能なリソースを表示できるようにします。これは、ローカルシステム上にリモート共有を公開したいアプリケーションを対象としています。BIF_NEWDIALOGSTYLE フラグも設定する必要があります。

BIF_BROWSEFILEJUNCTIONS (0x00010000)

0x00010000. Windows 7 以降。ライブラリや .zip というファイル名拡張子を持つ圧縮ファイルなどのフォルダージャンクションを参照できるようにします。

lpfnBFFCALLBACK8/4+40+20イベントが発生したときにダイアログボックスが呼び出す、アプリケーション定義の関数へのポインターです。詳細については、BrowseCallbackProc 関数を参照してください。このメンバーは NULL にできます。
lParamLPARAM8/4+48+24lpfn にコールバック関数が指定されている場合に、ダイアログボックスがそのコールバック関数へ渡すアプリケーション定義の値です。
iImageINT4+56+28

選択されたフォルダーに関連付けられ、システムイメージリストに格納されているイメージのインデックスを受け取る整数値です。

- ulFlags.BIF_BROWSEFILEJUNCTIONS (0x00010000)

0x00010000. Windows 7 以降。ライブラリや .zip というファイル名拡張子を持つ圧縮ファイルなどのフォルダージャンクションを参照できるようにします。

- ulFlags.BIF_BROWSEFORCOMPUTER (0x00001000)

0x00001000. コンピューターのみを返します。ユーザーがコンピューター以外を選択した場合、OK ボタンはグレー表示になります。

- ulFlags.BIF_BROWSEFORPRINTER (0x00002000)

0x00002000. プリンターの選択のみを許可します。ユーザーがプリンター以外を選択した場合、OK ボタンはグレー表示になります。

Windows XP 以降のシステムでは、Windows XP スタイルのダイアログを使用し、ダイアログのルートを プリンタと FAX フォルダー (CSIDL_PRINTERS) に設定することがベストプラクティスです。

- ulFlags.BIF_BROWSEINCLUDEFILES (0x00004000)

0x00004000. バージョン 4.71。参照ダイアログボックスにフォルダーだけでなくファイルも表示します。

- ulFlags.BIF_BROWSEINCLUDEURLS (0x00000080)

0x00000080. バージョン 5.0。参照ダイアログボックスが URL を表示できるようにします。BIF_USENEWUI フラグと BIF_BROWSEINCLUDEFILES フラグも設定する必要があります。これら 3 つのフラグのいずれかが設定されていない場合、参照ダイアログボックスは URL を受け付けません。これらのフラグが設定されている場合でも、選択された項目を含むフォルダーが URL をサポートしている場合にのみ、参照ダイアログボックスは URL を表示します。選択された項目の属性を要求するためにフォルダーの IShellFolder::GetAttributesOf メソッドが呼び出されたとき、そのフォルダーは SFGAO_FOLDER 属性フラグを設定しなければなりません。設定されていない場合、参照ダイアログボックスは URL を表示しません。

- ulFlags.BIF_DONTGOBELOWDOMAIN (0x00000002)

0x00000002. ダイアログボックスのツリービューコントロールに、ドメインレベルより下のネットワークフォルダーを含めません。

- ulFlags.BIF_EDITBOX (0x00000010)

0x00000010. バージョン 4.71。参照ダイアログボックスに、ユーザーが項目名を入力できるエディットコントロールを含めます。

- ulFlags.BIF_NEWDIALOGSTYLE (0x00000040)

0x00000040. バージョン 5.0。新しいユーザーインターフェイスを使用します。このフラグを設定すると、サイズ変更が可能な、より大きいダイアログボックスがユーザーに表示されます。このダイアログボックスには、ダイアログボックス内でのドラッグアンドドロップ、並べ替え、ショートカットメニュー、新しいフォルダーの作成、削除、その他のショートカットメニューコマンドなど、いくつかの新しい機能があります。

注意 COINIT_MULTITHREADED フラグを設定して CoInitializeEx により COM を初期化した場合、BIF_NEWDIALOGSTYLE を渡すと SHBrowseForFolder は失敗します。
- ulFlags.BIF_NONEWFOLDERBUTTON (0x00000200)

0x00000200. バージョン 6.0。参照ダイアログボックスに 新しいフォルダー ボタンを含めません。

- ulFlags.BIF_NOTRANSLATETARGETS (0x00000400)

0x00000400. バージョン 6.0。選択された項目がショートカットである場合、そのリンク先ではなくショートカット自体の PIDL を返します。

- ulFlags.BIF_RETURNFSANCESTORS (0x00000008)

0x00000008. ファイルシステムの上位フォルダーのみを返します。上位フォルダーとは、名前空間階層でルートフォルダーの下にあるサブフォルダーのことです。ユーザーがファイルシステムに属さないルートフォルダーの上位フォルダーを選択した場合、OK ボタンはグレー表示になります。

- ulFlags.BIF_RETURNONLYFSDIRS (0x00000001)

0x00000001. ファイルシステムのディレクトリのみを返します。ユーザーがファイルシステムに属さないフォルダーを選択した場合、OK ボタンはグレー表示になります。

注意 "\\server" 項目、"\\server\share" 項目、およびディレクトリ項目については、OK ボタンは有効なままです。ただし、ユーザーが "\\server" 項目を選択した場合、SHBrowseForFolder が返した PIDL を SHGetPathFromIDList に渡すと失敗します。
- ulFlags.BIF_SHAREABLE (0x00008000)

0x00008000. バージョン 5.0。参照ダイアログボックスがリモートシステム上の共有可能なリソースを表示できるようにします。これは、ローカルシステム上にリモート共有を公開したいアプリケーションを対象としています。BIF_NEWDIALOGSTYLE フラグも設定する必要があります。

- ulFlags.BIF_STATUSTEXT (0x00000004)

0x00000004. ダイアログボックスにステータス領域を表示します。コールバック関数は、ダイアログボックスにメッセージを送信することでステータステキストを設定できます。BIF_NEWDIALOGSTYLE を指定した場合、このフラグはサポートされません。

- ulFlags.BIF_UAHINT (0x00000100)

0x00000100. バージョン 6.0BIF_NEWDIALOGSTYLE と組み合わせると、エディットボックスの代わりに使用方法のヒントをダイアログボックスに追加します。BIF_EDITBOX はこのフラグを上書きします。

- ulFlags.BIF_USENEWUI

バージョン 5.0。エディットボックスを含む新しいユーザーインターフェイスを使用します。このフラグは BIF_EDITBOX | BIF_NEWDIALOGSTYLE と同等です。

注意 COINIT_MULTITHREADED フラグを設定して CoInitializeEx により COM を初期化した場合、BIF_USENEWUI を渡すと SHBrowseForFolder は失敗します。
- ulFlags.BIF_VALIDATE (0x00000020)

0x00000020. バージョン 4.71。ユーザーがエディットボックスに無効な名前を入力した場合、参照ダイアログボックスはアプリケーションの BrowseCallbackProcBFFM_VALIDATEFAILED メッセージで呼び出します。BIF_EDITBOX が指定されていない場合、このフラグは無視されます。

公式ドキュメント

SHBrowseForFolder 関数のパラメーターを格納し、ユーザーが選択したフォルダーに関する情報を受け取ります。

解説(Remarks)

メモ

shlobj_core.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして BROWSEINFO を定義します。エンコーディング中立のエイリアスを、エンコーディング中立でないコードと混在させて使用すると、不一致が生じてコンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、関数プロトタイプの規則を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// BROWSEINFOW  (x64 64 / x86 32 バイト)
typedef struct BROWSEINFOW {
    HWND hwndOwner;
    ITEMIDLIST* pidlRoot;
    LPWSTR pszDisplayName;
    LPWSTR lpszTitle;
    DWORD ulFlags;
    BFFCALLBACK lpfn;
    LPARAM lParam;
    INT iImage;
} BROWSEINFOW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BROWSEINFOW
{
    public IntPtr hwndOwner;
    public IntPtr pidlRoot;
    public IntPtr pszDisplayName;
    public IntPtr lpszTitle;
    public uint ulFlags;
    public IntPtr lpfn;
    public IntPtr lParam;
    public int iImage;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure BROWSEINFOW
    Public hwndOwner As IntPtr
    Public pidlRoot As IntPtr
    Public pszDisplayName As IntPtr
    Public lpszTitle As IntPtr
    Public ulFlags As UInteger
    Public lpfn As IntPtr
    Public lParam As IntPtr
    Public iImage As Integer
End Structure
import ctypes
from ctypes import wintypes

class BROWSEINFOW(ctypes.Structure):
    _fields_ = [
        ("hwndOwner", ctypes.c_void_p),
        ("pidlRoot", ctypes.c_void_p),
        ("pszDisplayName", ctypes.c_void_p),
        ("lpszTitle", ctypes.c_void_p),
        ("ulFlags", wintypes.DWORD),
        ("lpfn", ctypes.c_void_p),
        ("lParam", ctypes.c_ssize_t),
        ("iImage", ctypes.c_int),
    ]
#[repr(C)]
pub struct BROWSEINFOW {
    pub hwndOwner: *mut core::ffi::c_void,
    pub pidlRoot: *mut core::ffi::c_void,
    pub pszDisplayName: *mut core::ffi::c_void,
    pub lpszTitle: *mut core::ffi::c_void,
    pub ulFlags: u32,
    pub lpfn: *mut core::ffi::c_void,
    pub lParam: isize,
    pub iImage: i32,
}
import "golang.org/x/sys/windows"

type BROWSEINFOW struct {
	hwndOwner uintptr
	pidlRoot uintptr
	pszDisplayName uintptr
	lpszTitle uintptr
	ulFlags uint32
	lpfn uintptr
	lParam uintptr
	iImage int32
}
type
  BROWSEINFOW = record
    hwndOwner: Pointer;
    pidlRoot: Pointer;
    pszDisplayName: Pointer;
    lpszTitle: Pointer;
    ulFlags: DWORD;
    lpfn: Pointer;
    lParam: NativeInt;
    iImage: Integer;
  end;
const BROWSEINFOW = extern struct {
    hwndOwner: ?*anyopaque,
    pidlRoot: ?*anyopaque,
    pszDisplayName: ?*anyopaque,
    lpszTitle: ?*anyopaque,
    ulFlags: u32,
    lpfn: ?*anyopaque,
    lParam: isize,
    iImage: i32,
};
type
  BROWSEINFOW {.bycopy.} = object
    hwndOwner: pointer
    pidlRoot: pointer
    pszDisplayName: pointer
    lpszTitle: pointer
    ulFlags: uint32
    lpfn: pointer
    lParam: int
    iImage: int32
struct BROWSEINFOW
{
    void* hwndOwner;
    void* pidlRoot;
    void* pszDisplayName;
    void* lpszTitle;
    uint ulFlags;
    void* lpfn;
    ptrdiff_t lParam;
    int iImage;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; BROWSEINFOW サイズ: 32 バイト(x86)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; hwndOwner : HWND (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pidlRoot : ITEMIDLIST* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; pszDisplayName : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpszTitle : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ulFlags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; lpfn : BFFCALLBACK (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lParam : LPARAM (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; iImage : INT (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; BROWSEINFOW サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; hwndOwner : HWND (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pidlRoot : ITEMIDLIST* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; pszDisplayName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpszTitle : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ulFlags : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpfn : BFFCALLBACK (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lParam : LPARAM (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; iImage : INT (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global BROWSEINFOW
    #field intptr hwndOwner
    #field intptr pidlRoot
    #field intptr pszDisplayName
    #field intptr lpszTitle
    #field int ulFlags
    #field intptr lpfn
    #field intptr lParam
    #field int iImage
#endstruct

stdim st, BROWSEINFOW        ; NSTRUCT 変数を確保
st->ulFlags = 100
mes "ulFlags=" + st->ulFlags