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

BROWSEINFOA

構造体
サイズ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 でもかまいません。その場合は既定の位置が使用されます。
pszDisplayNameLPSTR8/4+16+8ユーザーが選択したフォルダーの表示名を受け取るバッファーへのポインターです。このバッファーのサイズは MAX_PATH 文字であることが前提とされます。
lpszTitleLPSTR8/4+24+12ダイアログボックス内のツリービューコントロールの上に表示される、NULL 終端文字列へのポインターです。この文字列は、ユーザーへの指示を指定するために使用できます。
ulFlagsDWORD4+32+16

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

BIF_RETURNONLYFSDIRS (0x00000001)

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

注意 OK ボタンは "\\server" 項目、および "\\server\share" やディレクトリ項目に対しては有効なままです。ただし、ユーザーが "\\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。新しいユーザーインターフェイスを使用します。このフラグを設定すると、サイズ変更が可能な、より大きいダイアログボックスがユーザーに提供されます。このダイアログボックスには、ダイアログボックス内でのドラッグアンドドロップ、並べ替え、ショートカットメニュー、新しいフォルダーの作成、削除、その他のショートカットメニューコマンドなど、いくつかの新しい機能があります。

注意 COM が CoInitializeExCOINIT_MULTITHREADED フラグを設定して初期化されている場合、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 と同等です。

注意 COM が CoInitializeExCOINIT_MULTITHREADED フラグを設定して初期化されている場合、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選択されたフォルダーに関連付けられた、システムイメージリストに格納されているイメージのインデックスを受け取る整数値です。

公式ドキュメント

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>

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

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BROWSEINFOA
{
    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 BROWSEINFOA
    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 BROWSEINFOA(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 BROWSEINFOA {
    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 BROWSEINFOA struct {
	hwndOwner uintptr
	pidlRoot uintptr
	pszDisplayName uintptr
	lpszTitle uintptr
	ulFlags uint32
	lpfn uintptr
	lParam uintptr
	iImage int32
}
type
  BROWSEINFOA = record
    hwndOwner: Pointer;
    pidlRoot: Pointer;
    pszDisplayName: Pointer;
    lpszTitle: Pointer;
    ulFlags: DWORD;
    lpfn: Pointer;
    lParam: NativeInt;
    iImage: Integer;
  end;
const BROWSEINFOA = extern struct {
    hwndOwner: ?*anyopaque,
    pidlRoot: ?*anyopaque,
    pszDisplayName: ?*anyopaque,
    lpszTitle: ?*anyopaque,
    ulFlags: u32,
    lpfn: ?*anyopaque,
    lParam: isize,
    iImage: i32,
};
type
  BROWSEINFOA {.bycopy.} = object
    hwndOwner: pointer
    pidlRoot: pointer
    pszDisplayName: pointer
    lpszTitle: pointer
    ulFlags: uint32
    lpfn: pointer
    lParam: int
    iImage: int32
struct BROWSEINFOA
{
    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 レイアウト)
; BROWSEINFOA サイズ: 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 : LPSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpszTitle : LPSTR (+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 レイアウト)
; BROWSEINFOA サイズ: 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 : LPSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpszTitle : LPSTR (+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 BROWSEINFOA
    #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, BROWSEINFOA        ; NSTRUCT 変数を確保
st->ulFlags = 100
mes "ulFlags=" + st->ulFlags