Win32 API 日本語リファレンス
ホームUI.Controls.Dialogs › OPENFILENAMEA

OPENFILENAMEA

構造体
サイズx64: 140 バイト / x86: 88 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
lStructSizeDWORD4+0+0構造体の長さ (バイト単位)。 このパラメーターには sizeof (OPENFILENAME) を使用します。
hwndOwnerHWND8/4+4+4ダイアログボックスを所有するウィンドウへのハンドル。このメンバーには任意の有効なウィンドウハンドルを指定できます。ダイアログボックスに所有者がない場合は NULL を指定できます。
hInstanceHINSTANCE8/4+12+8Flags メンバーに OFN_ENABLETEMPLATEHANDLE フラグが設定されている場合、hInstance はダイアログボックステンプレートを格納したメモリオブジェクトへのハンドルです。OFN_ENABLETEMPLATE フラグが設定されている場合、hInstancelpTemplateName メンバーで指定された名前のダイアログボックステンプレートを含むモジュールへのハンドルです。どちらのフラグも設定されていない場合、このメンバーは無視されます。OFN_EXPLORER フラグが設定されている場合、システムは指定されたテンプレートを使用して、既定のエクスプローラースタイルのダイアログボックスの子となるダイアログボックスを作成します。OFN_EXPLORER フラグが設定されていない場合、システムはそのテンプレートを使用して、既定のダイアログボックスを置き換える旧スタイルのダイアログボックスを作成します。
lpstrFilterLPSTR8/4+20+12

NULL 終端のフィルター文字列の対を格納するバッファー。バッファー内の最後の文字列は 2 つの NULL 文字で終端されていなければなりません。

各対の最初の文字列はフィルターを説明する表示用文字列 (例: "Text Files")、2 番目の文字列はフィルターパターン (例: ".TXT") を指定します。1 つの表示用文字列に対して複数のフィルターパターンを指定するには、セミコロンでパターンを区切ります (例: ".TXT;.DOC;.BAK")。パターン文字列には、有効なファイル名文字とアスタリスク (*) ワイルドカード文字を組み合わせて指定できます。パターン文字列に空白を含めないでください。

システムはフィルターの順序を変更しません。lpstrFilter で指定された順序どおりに File Types コンボボックスに表示します。

lpstrFilterNULL の場合、ダイアログボックスはフィルターを一切表示しません。

ショートカットの場合、フィルターが設定されていないと、GetOpenFileName および GetSaveFileName は、リンク先ではなく .lnk ファイル自体の名前を取得します。この動作は、Flags メンバーに OFN_NODEREFERENCELINKS フラグを設定した場合と同じです。フィルターを適用せずにショートカットのリンク先を取得するには、文字列 "All Files\0*.*\0\0" を使用します。

lpstrCustomFilterLPSTR8/4+28+16

ユーザーが選択したフィルターパターンを保持するための、NULL 終端フィルター文字列の対を格納する静的バッファー。最初の文字列はカスタムフィルターを説明するアプリケーション側の表示用文字列で、2 番目の文字列はユーザーが選択したフィルターパターンです。アプリケーションが最初にダイアログボックスを作成するときには最初の文字列を指定します。これは空でない任意の文字列で構いません。ユーザーがファイルを選択すると、ダイアログボックスは現在のフィルターパターンを 2 番目の文字列にコピーします。保持されるフィルターパターンは、lpstrFilter バッファーで指定されたパターンのいずれか、またはユーザーが入力したフィルターパターンです。システムはこれらの文字列を使用して、次回ダイアログボックスが作成されるときにユーザー定義のファイルフィルターを初期化します。nFilterIndex メンバーが 0 の場合、ダイアログボックスはカスタムフィルターを使用します。

このメンバーが NULL の場合、ダイアログボックスはユーザー定義のフィルターパターンを保持しません。

このメンバーが NULL でない場合、nMaxCustFilter メンバーの値で lpstrCustomFilter バッファーのサイズ (文字数単位) を指定しなければなりません。

nMaxCustFilterDWORD4+36+20lpstrCustomFilter で示されるバッファーのサイズ (文字数単位)。このバッファーは少なくとも 40 文字以上の長さが必要です。lpstrCustomFilterNULL であるか、NULL 文字列を指している場合、このメンバーは無視されます。
nFilterIndexDWORD4+40+24File Types コントロールで現在選択されているフィルターのインデックス。lpstrFilter が指すバッファーには、フィルターを定義する文字列の対が格納されています。最初の対のインデックス値は 1、2 番目の対は 2、というように続きます。インデックス 0 は lpstrCustomFilter で指定されたカスタムフィルターを示します。入力時にインデックスを指定して、ダイアログボックスの初期フィルターの説明とフィルターパターンを指示できます。ユーザーがファイルを選択すると、nFilterIndex には現在表示されているフィルターのインデックスが返されます。nFilterIndex が 0 で lpstrCustomFilterNULL の場合、システムは lpstrFilter バッファー内の最初のフィルターを使用します。これら 3 つのメンバーがすべて 0 または NULL の場合、システムはフィルターを使用せず、ダイアログボックスのファイル一覧コントロールにファイルを表示しません。
lpstrFileLPSTR8/4+44+28

File Name エディットコントロールの初期化に使用されるファイル名。初期化が不要な場合は、このバッファーの最初の文字を NULL にしなければなりません。GetOpenFileName 関数または GetSaveFileName 関数が正常に戻ると、このバッファーには選択されたファイルのドライブ指定子、パス、ファイル名、および拡張子が格納されます。

OFN_ALLOWMULTISELECT フラグが設定されていて、ユーザーが複数のファイルを選択した場合、バッファーには現在のディレクトリに続いて選択されたファイルの名前が格納されます。エクスプローラースタイルのダイアログボックスでは、ディレクトリ文字列とファイル名文字列は NULL で区切られ、最後のファイル名の後にさらに NULL 文字が付きます。旧スタイルのダイアログボックスでは、これらの文字列は空白で区切られ、空白を含むファイル名には短いファイル名が使用されます。長いファイル名と短いファイル名の変換には FindFirstFile 関数を使用できます。ユーザーが 1 つのファイルだけを選択した場合、lpstrFile 文字列にはパスとファイル名の間に区切り文字は入りません。

バッファーが小さすぎる場合、関数は FALSE を返し、CommDlgExtendedError 関数は FNERR_BUFFERTOOSMALL を返します。この場合、lpstrFile バッファーの先頭 2 バイトに必要なサイズ (バイト単位または文字数単位) が格納されます。

nMaxFileDWORD4+52+32lpstrFile が指すバッファーのサイズ (文字数単位)。このバッファーは、終端の NULL 文字を含め、パスとファイル名の文字列を格納できる十分な大きさでなければなりません。バッファーがファイル情報を格納するには小さすぎる場合、GetOpenFileName 関数および GetSaveFileName 関数は FALSE を返します。バッファーは少なくとも 256 文字以上の長さにしてください。
lpstrFileTitleLPSTR8/4+56+36選択されたファイルのファイル名と拡張子 (パス情報を含まない)。このメンバーは NULL にできます。
nMaxFileTitleDWORD4+64+40lpstrFileTitle が指すバッファーのサイズ (文字数単位)。lpstrFileTitleNULL の場合、このメンバーは無視されます。
lpstrInitialDirLPSTR8/4+68+44

初期ディレクトリ。初期ディレクトリを選択するアルゴリズムはプラットフォームによって異なります。

Windows 7:

  1. lpstrInitialDir が、アプリケーションが最初に 開く または 名前を付けて保存 ダイアログボックスを使用したときに渡された値と同じ場合、ユーザーが最後に選択したパスが初期ディレクトリとして使用されます。
  2. そうでない場合、lpstrFile にパスが含まれていれば、そのパスが初期ディレクトリになります。
  3. そうでない場合、lpstrInitialDirNULL でなければ、それが初期ディレクトリを指定します。
  4. lpstrInitialDirNULL で、現在のディレクトリに指定されたフィルターの種類のファイルが含まれている場合、初期ディレクトリは現在のディレクトリになります。
  5. そうでない場合、初期ディレクトリは現在のユーザーの個人用ファイルのディレクトリになります。
  6. そうでない場合、初期ディレクトリはデスクトップフォルダーになります。
Windows 2000/XP/Vista:
  1. lpstrFile にパスが含まれている場合、そのパスが初期ディレクトリになります。
  2. そうでない場合、lpstrInitialDir が初期ディレクトリを指定します。
  3. そうでない場合、アプリケーションが過去に 開く または 名前を付けて保存 ダイアログボックスを使用していれば、最後に使用されたパスが初期ディレクトリとして選択されます。ただし、アプリケーションが長期間実行されていない場合、保存されていた選択パスは破棄されます。
  4. lpstrInitialDirNULL で、現在のディレクトリに指定されたフィルターの種類のファイルが含まれている場合、初期ディレクトリは現在のディレクトリになります。
  5. そうでない場合、初期ディレクトリは現在のユーザーの個人用ファイルのディレクトリになります。
  6. そうでない場合、初期ディレクトリはデスクトップフォルダーになります。
lpstrTitleLPSTR8/4+76+48ダイアログボックスのタイトルバーに表示する文字列。このメンバーが NULL の場合、システムは既定のタイトル (すなわち 名前を付けて保存 または 開く) を使用します。
FlagsOPEN_FILENAME_FLAGS4+84+52

ダイアログボックスの初期化に使用できるビットフラグの組み合わせ。ダイアログボックスが戻るときには、ユーザーの入力を示すようにこれらのフラグが設定されます。このメンバーには次のフラグの組み合わせを指定できます。

Value Meaning
OFN_ALLOWMULTISELECT
0x00000200
File Name リストボックスで複数選択が可能になります。OFN_EXPLORER フラグも設定した場合、ダイアログボックスはエクスプローラースタイルのユーザーインターフェイスを使用します。設定しない場合は旧スタイルのユーザーインターフェイスを使用します。

ユーザーが複数のファイルを選択した場合、lpstrFile バッファーには現在のディレクトリへのパスに続いて、選択されたファイルの名前が返されます。nFileOffset メンバーは最初のファイル名までのオフセット (バイト単位または文字数単位) であり、nFileExtension メンバーは使用されません。エクスプローラースタイルのダイアログボックスでは、ディレクトリ文字列とファイル名文字列は NULL で区切られ、最後のファイル名の後にさらに NULL 文字が付きます。この形式により、エクスプローラースタイルのダイアログボックスは空白を含む長いファイル名を返すことができます。旧スタイルのダイアログボックスでは、ディレクトリ文字列とファイル名文字列は空白で区切られ、空白を含むファイル名には短いファイル名が使用されます。長いファイル名と短いファイル名の変換には FindFirstFile 関数を使用できます。

旧スタイルのダイアログボックスにカスタムテンプレートを指定する場合、File Name リストボックスの定義に LBS_EXTENDEDSEL の値を含めなければなりません。

OFN_CREATEPROMPT
0x00002000
ユーザーが存在しないファイルを指定した場合、このフラグによってダイアログボックスはファイルを作成してよいかどうかをユーザーに確認します。ユーザーが作成を選択すると、ダイアログボックスは閉じて関数は指定された名前を返します。そうでない場合、ダイアログボックスは開いたままになります。このフラグを OFN_ALLOWMULTISELECT フラグと併用した場合、ダイアログボックスはユーザーが存在しないファイルを 1 つだけ指定することを許可します。
OFN_DONTADDTORECENT
0x02000000
ユーザーの最近使ったドキュメントを格納するファイルシステムディレクトリに、選択されたファイルへのリンクをシステムが追加しないようにします。このディレクトリの場所を取得するには、SHGetSpecialFolderLocation 関数を CSIDL_RECENT フラグとともに呼び出します。
OFN_ENABLEHOOK
0x00000020
lpfnHook メンバーで指定されたフック関数を有効にします。
OFN_ENABLEINCLUDENOTIFY
0x00400000
ユーザーがフォルダーを開いたときに、ダイアログボックスが CDN_INCLUDEITEM 通知メッセージを OFNHookProc フックプロシージャに送信するようにします。ダイアログボックスは、新しく開かれたフォルダー内の項目ごとに通知を送信します。これらのメッセージにより、ダイアログボックスがそのフォルダーの項目一覧に表示する項目を制御できます。
OFN_ENABLESIZING
0x00800000
エクスプローラースタイルのダイアログボックスを、マウスまたはキーボードでサイズ変更できるようにします。既定では、エクスプローラースタイルの 開く および 名前を付けて保存 ダイアログボックスは、このフラグが設定されているかどうかにかかわらずサイズ変更できます。このフラグが必要になるのは、フックプロシージャまたはカスタムテンプレートを提供する場合のみです。旧スタイルのダイアログボックスはサイズ変更できません。
OFN_ENABLETEMPLATE
0x00000040
lpTemplateName メンバーは、 hInstance メンバーで識別されるモジュール内のダイアログテンプレートリソースの名前へのポインターです。OFN_EXPLORER フラグが設定されている場合、システムは指定されたテンプレートを使用して、既定のエクスプローラースタイルのダイアログボックスの子となるダイアログボックスを作成します。OFN_EXPLORER フラグが設定されていない場合、システムはそのテンプレートを使用して、既定のダイアログボックスを置き換える旧スタイルのダイアログボックスを作成します。
OFN_ENABLETEMPLATEHANDLE
0x00000080
hInstance メンバーは、あらかじめ読み込まれたダイアログボックステンプレートを含むデータブロックを識別します。このフラグが指定されている場合、システムは lpTemplateName を無視します。OFN_EXPLORER フラグが設定されている場合、システムは指定されたテンプレートを使用して、既定のエクスプローラースタイルのダイアログボックスの子となるダイアログボックスを作成します。OFN_EXPLORER フラグが設定されていない場合、システムはそのテンプレートを使用して、既定のダイアログボックスを置き換える旧スタイルのダイアログボックスを作成します。
OFN_EXPLORER
0x00080000
開く または 名前を付けて保存 ダイアログボックスに加えたカスタマイズが、エクスプローラースタイルのカスタマイズ方法を使用することを示します。詳細については、Explorer-Style Hook Procedures および Explorer-Style Custom Templates を参照してください。

既定では、開く および 名前を付けて保存 ダイアログボックスは、このフラグが設定されているかどうかにかかわらずエクスプローラースタイルのユーザーインターフェイスを使用します。このフラグが必要になるのは、フックプロシージャやカスタムテンプレートを提供する場合、または OFN_ALLOWMULTISELECT フラグを設定する場合のみです。

旧スタイルのユーザーインターフェイスを使用したい場合は、OFN_EXPLORER フラグを省略し、代替となる旧スタイルのテンプレートまたはフックプロシージャを提供します。旧スタイルにしたいがカスタムテンプレートやフックプロシージャが不要な場合は、常に FALSE を返すフックプロシージャを提供するだけで済みます。

OFN_EXTENSIONDIFFERENT
0x00000400
ユーザーが lpstrDefExt で指定された拡張子とは異なるファイル名拡張子を入力しました。lpstrDefExtNULL の場合、関数はこのフラグを使用しません。
OFN_FILEMUSTEXIST
0x00001000
ユーザーは File Name 入力フィールドに既存のファイルの名前しか入力できません。このフラグが指定されていて、ユーザーが無効な名前を入力した場合、ダイアログボックスプロシージャはメッセージボックスに警告を表示します。このフラグが指定されている場合、OFN_PATHMUSTEXIST フラグも併せて使用されます。このフラグは 開く ダイアログボックスで使用できます。名前を付けて保存 ダイアログボックスでは使用できません。
OFN_FORCESHOWHIDDEN
0x10000000
隠しファイルを表示するかどうかのユーザー設定を上書きして、システムファイルおよび隠しファイルを強制的に表示します。ただし、システム属性と隠し属性の両方が設定されているファイルは表示されません。
OFN_HIDEREADONLY
0x00000004
Read Only チェックボックスを非表示にします。
OFN_LONGNAMES
0x00200000
旧スタイルのダイアログボックスにおいて、このフラグはダイアログボックスが長いファイル名を使用するようにします。このフラグが指定されていない場合、または OFN_ALLOWMULTISELECT フラグも設定されている場合、旧スタイルのダイアログボックスは空白を含むファイル名に短いファイル名 (8.3 形式) を使用します。エクスプローラースタイルのダイアログボックスはこのフラグを無視し、常に長いファイル名を表示します。
OFN_NOCHANGEDIR
0x00000008
ユーザーがファイルを検索する際にディレクトリを変更した場合、現在のディレクトリを元の値に復元します。

このフラグは GetOpenFileName では効果がありません。

OFN_NODEREFERENCELINKS
0x00100000
選択されたショートカット (.LNK) ファイルのパスとファイル名を返すようダイアログボックスに指示します。この値が指定されていない場合、ダイアログボックスはショートカットが参照するファイルのパスとファイル名を返します。
OFN_NOLONGNAMES
0x00040000
旧スタイルのダイアログボックスにおいて、このフラグはダイアログボックスが短いファイル名 (8.3 形式) を使用するようにします。エクスプローラースタイルのダイアログボックスはこのフラグを無視し、常に長いファイル名を表示します。
OFN_NONETWORKBUTTON
0x00020000
Network ボタンを非表示にし、無効化します。
OFN_NOREADONLYRETURN
0x00008000
返されるファイルは Read Only チェックボックスが選択されておらず、書き込み保護されたディレクトリにも存在しません。
OFN_NOTESTFILECREATE
0x00010000
ダイアログボックスが閉じられる前にファイルは作成されません。アプリケーションが create-nonmodify のネットワーク共有にファイルを保存する場合は、このフラグを指定してください。アプリケーションがこのフラグを指定すると、ライブラリは書き込み保護、ディスクの空き容量不足、ドライブの扉が開いていること、ネットワーク保護のチェックを行いません。ファイルはいったん閉じると再度開けないため、このフラグを使用するアプリケーションはファイル操作を慎重に行う必要があります。
OFN_NOVALIDATE
0x00000100
コモンダイアログボックスは、返されるファイル名に無効な文字を許可します。通常、呼び出し元のアプリケーションは FILEOKSTRING メッセージを使用してファイル名をチェックするフックプロシージャを使用します。エディットコントロールのテキストボックスが空であるか、空白のみを含む場合、ファイルとディレクトリの一覧が更新されます。エディットコントロールのテキストボックスにそれ以外の内容が含まれている場合、nFileOffsetnFileExtension にはテキストを解析して生成された値が設定されます。テキストには既定の拡張子は追加されず、lpstrFileTitle で指定されたバッファーへのテキストのコピーも行われません。nFileOffset で指定される値が 0 未満の場合、そのファイル名は無効です。それ以外の場合、ファイル名は有効であり、nFileExtensionnFileOffsetOFN_NOVALIDATE フラグが指定されなかった場合と同様に使用できます。
OFN_OVERWRITEPROMPT
0x00000002
選択されたファイルが既に存在する場合、名前を付けて保存 ダイアログボックスがメッセージボックスを表示するようにします。ユーザーはファイルを上書きするかどうかを確認する必要があります。
OFN_PATHMUSTEXIST
0x00000800
ユーザーは有効なパスとファイル名しか入力できません。このフラグが使用されていて、ユーザーが File Name 入力フィールドに無効なパスとファイル名を入力した場合、ダイアログボックス関数はメッセージボックスに警告を表示します。
OFN_READONLY
0x00000001
ダイアログボックスの作成時に Read Only チェックボックスを最初から選択された状態にします。このフラグは、ダイアログボックスが閉じられたときの Read Only チェックボックスの状態を示します。
OFN_SHAREAWARE
0x00004000
OpenFile 関数の呼び出しがネットワーク共有違反により失敗した場合に、そのエラーを無視してダイアログボックスが選択されたファイル名を返すことを指定します。このフラグが設定されていない場合、ユーザーが指定したファイル名についてネットワーク共有違反が発生すると、ダイアログボックスはフックプロシージャに通知します。OFN_EXPLORER フラグを設定している場合、ダイアログボックスは CDN_SHAREVIOLATION メッセージをフックプロシージャに送信します。OFN_EXPLORER を設定していない場合、ダイアログボックスは登録済みメッセージ SHAREVISTRING をフックプロシージャに送信します。
OFN_SHOWHELP
0x00000010
ダイアログボックスに Help ボタンを表示します。hwndOwner メンバーには、ユーザーが Help ボタンをクリックしたときにダイアログボックスが送信する登録済みメッセージ HELPMSGSTRING を受け取るウィンドウを指定しなければなりません。エクスプローラースタイルのダイアログボックスは、ユーザーが Help ボタンをクリックしたときに CDN_HELP 通知メッセージをフックプロシージャに送信します。
nFileOffsetWORD2+88+56lpstrFile が指す文字列において、パスの先頭からファイル名までの 0 から始まるオフセット (文字数単位)。ANSI 版ではバイト数、Unicode 版では文字数になります。たとえば lpstrFile が次の文字列 "c:\dir1\dir2\file.ext" を指している場合、このメンバーには "file.ext" 文字列のオフセットを示す値 13 が格納されます。ユーザーが複数のファイルを選択した場合、nFileOffset は最初のファイル名までのオフセットになります。
nFileExtensionWORD2+90+58lpstrFile が指す文字列において、パスの先頭からファイル名拡張子までの 0 から始まるオフセット (文字数単位)。ANSI 版ではバイト数、Unicode 版では文字数になります。通常、ファイル名拡張子は最後に出現するドット (".") 文字の後に続く部分文字列です。たとえば、ファイル名 readme.txt の拡張子は txt、readme.txt.html の拡張子は html です。したがって、lpstrFile が文字列 "c:\dir1\dir2\readme.txt" を指している場合、このメンバーには値 20 が格納されます。lpstrFile が文字列 "c:\dir1\dir2\readme.txt.html" を指している場合、このメンバーには値 24 が格納されます。lpstrFile が文字列 "c:\dir1\dir2\readme.txt.html." を指している場合、このメンバーには値 29 が格納されます。lpstrFile が "c:\dir1\dir2\readme" のように "." 文字をまったく含まない文字列を指している場合、このメンバーには 0 が格納されます。
lpstrDefExtLPSTR8/4+92+60既定の拡張子。ユーザーが拡張子を入力しなかった場合、GetOpenFileName および GetSaveFileName はこの拡張子をファイル名に付加します。この文字列の長さは任意ですが、付加されるのは先頭 3 文字のみです。文字列にピリオド (.) を含めないでください。このメンバーが NULL で、ユーザーが拡張子を入力しなかった場合、拡張子は付加されません。
lCustDataLPARAM8/4+100+64lpfnHook メンバーで識別されるフックプロシージャにシステムが渡す、アプリケーション定義のデータ。システムが WM_INITDIALOG メッセージをフックプロシージャに送信するとき、そのメッセージの lParam パラメーターは、ダイアログボックスの作成時に指定された OPENFILENAME 構造体へのポインターです。フックプロシージャはこのポインターを使用して lCustData の値を取得できます。
lpfnHookLPOFNHOOKPROC8/4+108+68

フックプロシージャへのポインター。Flags メンバーに OFN_ENABLEHOOK フラグが含まれていない限り、このメンバーは無視されます。

Flags メンバーに OFN_EXPLORER フラグが設定されていない場合、lpfnHook は、ダイアログボックス宛てのメッセージを受け取る OFNHookProcOldStyle フックプロシージャへのポインターです。フックプロシージャは、メッセージを既定のダイアログボックスプロシージャに渡す場合は FALSE を、メッセージを破棄する場合は TRUE を返します。

OFN_EXPLORER が設定されている場合、lpfnHookOFNHookProc フックプロシージャへのポインターです。このフックプロシージャは、ダイアログボックスから送信される通知メッセージを受け取ります。また、子ダイアログテンプレートを指定して定義した追加のコントロールに対するメッセージも受け取ります。フックプロシージャは、既定のダイアログボックスの標準コントロール宛てのメッセージは受け取りません。

lpTemplateNameLPSTR8/4+116+72hInstance メンバーで識別されるモジュール内のダイアログテンプレートリソースの名前。番号付きのダイアログボックスリソースの場合、これは MAKEINTRESOURCE マクロが返す値にできます。Flags メンバーに OFN_ENABLETEMPLATE フラグが設定されていない限り、このメンバーは無視されます。OFN_EXPLORER フラグが設定されている場合、システムは指定されたテンプレートを使用して、既定のエクスプローラースタイルのダイアログボックスの子となるダイアログボックスを作成します。OFN_EXPLORER フラグが設定されていない場合、システムはそのテンプレートを使用して、既定のダイアログボックスを置き換える旧スタイルのダイアログボックスを作成します。
pvReservedvoid*8/4+124+76このメンバーは予約済みです。
dwReservedDWORD4+132+80このメンバーは予約済みです。
FlagsExOPEN_FILENAME_FLAGS_EX4+136+84

ダイアログボックスの初期化に使用できるビットフラグの組み合わせ。現在、このメンバーには 0 または次のフラグを指定できます。

Value Meaning
OFN_EX_NOPLACESBAR
0x00000001
このフラグが設定されている場合、プレースバーは表示されません。このフラグが設定されていない場合、エクスプローラースタイルのダイアログボックスには、お気に入りやデスクトップなどのよく使われるフォルダーのアイコンを含むプレースバーが表示されます。

公式ドキュメント

[Windows Vista 以降、開く および 名前を付けて保存 コモンダイアログボックスは Common Item Dialog に置き換えられました。コモンダイアログボックスライブラリのこれらのダイアログボックスではなく、Common Item Dialog API を使用することを推奨します。]

GetOpenFileName 関数および GetSaveFileName 関数が 開く または 名前を付けて保存 ダイアログボックスを初期化するために使用する情報を格納します。ユーザーがダイアログボックスを閉じると、システムはユーザーの選択に関する情報をこの構造体に返します。

解説(Remarks)

互換性上の理由から、FlagsOFN_ENABLEHOOK が設定され、かつ lStructSizeOPENFILENAME_SIZE_VERSION_400 である場合、プレースバーは非表示になります。

メモ

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

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

各言語での定義

#include <windows.h>

// OPENFILENAMEA  (x64 140 / x86 88 バイト)
#pragma pack(push, 1)
typedef struct OPENFILENAMEA {
    DWORD lStructSize;
    HWND hwndOwner;
    HINSTANCE hInstance;
    LPSTR lpstrFilter;
    LPSTR lpstrCustomFilter;
    DWORD nMaxCustFilter;
    DWORD nFilterIndex;
    LPSTR lpstrFile;
    DWORD nMaxFile;
    LPSTR lpstrFileTitle;
    DWORD nMaxFileTitle;
    LPSTR lpstrInitialDir;
    LPSTR lpstrTitle;
    OPEN_FILENAME_FLAGS Flags;
    WORD nFileOffset;
    WORD nFileExtension;
    LPSTR lpstrDefExt;
    LPARAM lCustData;
    LPOFNHOOKPROC lpfnHook;
    LPSTR lpTemplateName;
    void* pvReserved;
    DWORD dwReserved;
    OPEN_FILENAME_FLAGS_EX FlagsEx;
} OPENFILENAMEA;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct OPENFILENAMEA
{
    public uint lStructSize;
    public IntPtr hwndOwner;
    public IntPtr hInstance;
    public IntPtr lpstrFilter;
    public IntPtr lpstrCustomFilter;
    public uint nMaxCustFilter;
    public uint nFilterIndex;
    public IntPtr lpstrFile;
    public uint nMaxFile;
    public IntPtr lpstrFileTitle;
    public uint nMaxFileTitle;
    public IntPtr lpstrInitialDir;
    public IntPtr lpstrTitle;
    public uint Flags;
    public ushort nFileOffset;
    public ushort nFileExtension;
    public IntPtr lpstrDefExt;
    public IntPtr lCustData;
    public IntPtr lpfnHook;
    public IntPtr lpTemplateName;
    public IntPtr pvReserved;
    public uint dwReserved;
    public uint FlagsEx;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure OPENFILENAMEA
    Public lStructSize As UInteger
    Public hwndOwner As IntPtr
    Public hInstance As IntPtr
    Public lpstrFilter As IntPtr
    Public lpstrCustomFilter As IntPtr
    Public nMaxCustFilter As UInteger
    Public nFilterIndex As UInteger
    Public lpstrFile As IntPtr
    Public nMaxFile As UInteger
    Public lpstrFileTitle As IntPtr
    Public nMaxFileTitle As UInteger
    Public lpstrInitialDir As IntPtr
    Public lpstrTitle As IntPtr
    Public Flags As UInteger
    Public nFileOffset As UShort
    Public nFileExtension As UShort
    Public lpstrDefExt As IntPtr
    Public lCustData As IntPtr
    Public lpfnHook As IntPtr
    Public lpTemplateName As IntPtr
    Public pvReserved As IntPtr
    Public dwReserved As UInteger
    Public FlagsEx As UInteger
End Structure
import ctypes
from ctypes import wintypes

class OPENFILENAMEA(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("lStructSize", wintypes.DWORD),
        ("hwndOwner", ctypes.c_void_p),
        ("hInstance", ctypes.c_void_p),
        ("lpstrFilter", ctypes.c_void_p),
        ("lpstrCustomFilter", ctypes.c_void_p),
        ("nMaxCustFilter", wintypes.DWORD),
        ("nFilterIndex", wintypes.DWORD),
        ("lpstrFile", ctypes.c_void_p),
        ("nMaxFile", wintypes.DWORD),
        ("lpstrFileTitle", ctypes.c_void_p),
        ("nMaxFileTitle", wintypes.DWORD),
        ("lpstrInitialDir", ctypes.c_void_p),
        ("lpstrTitle", ctypes.c_void_p),
        ("Flags", wintypes.DWORD),
        ("nFileOffset", ctypes.c_ushort),
        ("nFileExtension", ctypes.c_ushort),
        ("lpstrDefExt", ctypes.c_void_p),
        ("lCustData", ctypes.c_ssize_t),
        ("lpfnHook", ctypes.c_void_p),
        ("lpTemplateName", ctypes.c_void_p),
        ("pvReserved", ctypes.c_void_p),
        ("dwReserved", wintypes.DWORD),
        ("FlagsEx", wintypes.DWORD),
    ]
#[repr(C, packed(1))]
pub struct OPENFILENAMEA {
    pub lStructSize: u32,
    pub hwndOwner: *mut core::ffi::c_void,
    pub hInstance: *mut core::ffi::c_void,
    pub lpstrFilter: *mut core::ffi::c_void,
    pub lpstrCustomFilter: *mut core::ffi::c_void,
    pub nMaxCustFilter: u32,
    pub nFilterIndex: u32,
    pub lpstrFile: *mut core::ffi::c_void,
    pub nMaxFile: u32,
    pub lpstrFileTitle: *mut core::ffi::c_void,
    pub nMaxFileTitle: u32,
    pub lpstrInitialDir: *mut core::ffi::c_void,
    pub lpstrTitle: *mut core::ffi::c_void,
    pub Flags: u32,
    pub nFileOffset: u16,
    pub nFileExtension: u16,
    pub lpstrDefExt: *mut core::ffi::c_void,
    pub lCustData: isize,
    pub lpfnHook: *mut core::ffi::c_void,
    pub lpTemplateName: *mut core::ffi::c_void,
    pub pvReserved: *mut core::ffi::c_void,
    pub dwReserved: u32,
    pub FlagsEx: u32,
}
import "golang.org/x/sys/windows"

type OPENFILENAMEA struct {
	lStructSize uint32
	hwndOwner uintptr
	hInstance uintptr
	lpstrFilter uintptr
	lpstrCustomFilter uintptr
	nMaxCustFilter uint32
	nFilterIndex uint32
	lpstrFile uintptr
	nMaxFile uint32
	lpstrFileTitle uintptr
	nMaxFileTitle uint32
	lpstrInitialDir uintptr
	lpstrTitle uintptr
	Flags uint32
	nFileOffset uint16
	nFileExtension uint16
	lpstrDefExt uintptr
	lCustData uintptr
	lpfnHook uintptr
	lpTemplateName uintptr
	pvReserved uintptr
	dwReserved uint32
	FlagsEx uint32
}
type
  OPENFILENAMEA = packed record
    lStructSize: DWORD;
    hwndOwner: Pointer;
    hInstance: Pointer;
    lpstrFilter: Pointer;
    lpstrCustomFilter: Pointer;
    nMaxCustFilter: DWORD;
    nFilterIndex: DWORD;
    lpstrFile: Pointer;
    nMaxFile: DWORD;
    lpstrFileTitle: Pointer;
    nMaxFileTitle: DWORD;
    lpstrInitialDir: Pointer;
    lpstrTitle: Pointer;
    Flags: DWORD;
    nFileOffset: Word;
    nFileExtension: Word;
    lpstrDefExt: Pointer;
    lCustData: NativeInt;
    lpfnHook: Pointer;
    lpTemplateName: Pointer;
    pvReserved: Pointer;
    dwReserved: DWORD;
    FlagsEx: DWORD;
  end;
const OPENFILENAMEA = extern struct {
    lStructSize: u32,
    hwndOwner: ?*anyopaque,
    hInstance: ?*anyopaque,
    lpstrFilter: ?*anyopaque,
    lpstrCustomFilter: ?*anyopaque,
    nMaxCustFilter: u32,
    nFilterIndex: u32,
    lpstrFile: ?*anyopaque,
    nMaxFile: u32,
    lpstrFileTitle: ?*anyopaque,
    nMaxFileTitle: u32,
    lpstrInitialDir: ?*anyopaque,
    lpstrTitle: ?*anyopaque,
    Flags: u32,
    nFileOffset: u16,
    nFileExtension: u16,
    lpstrDefExt: ?*anyopaque,
    lCustData: isize,
    lpfnHook: ?*anyopaque,
    lpTemplateName: ?*anyopaque,
    pvReserved: ?*anyopaque,
    dwReserved: u32,
    FlagsEx: u32,
};
type
  OPENFILENAMEA {.packed.} = object
    lStructSize: uint32
    hwndOwner: pointer
    hInstance: pointer
    lpstrFilter: pointer
    lpstrCustomFilter: pointer
    nMaxCustFilter: uint32
    nFilterIndex: uint32
    lpstrFile: pointer
    nMaxFile: uint32
    lpstrFileTitle: pointer
    nMaxFileTitle: uint32
    lpstrInitialDir: pointer
    lpstrTitle: pointer
    Flags: uint32
    nFileOffset: uint16
    nFileExtension: uint16
    lpstrDefExt: pointer
    lCustData: int
    lpfnHook: pointer
    lpTemplateName: pointer
    pvReserved: pointer
    dwReserved: uint32
    FlagsEx: uint32
align(1)
struct OPENFILENAMEA
{
    uint lStructSize;
    void* hwndOwner;
    void* hInstance;
    void* lpstrFilter;
    void* lpstrCustomFilter;
    uint nMaxCustFilter;
    uint nFilterIndex;
    void* lpstrFile;
    uint nMaxFile;
    void* lpstrFileTitle;
    uint nMaxFileTitle;
    void* lpstrInitialDir;
    void* lpstrTitle;
    uint Flags;
    ushort nFileOffset;
    ushort nFileExtension;
    void* lpstrDefExt;
    ptrdiff_t lCustData;
    void* lpfnHook;
    void* lpTemplateName;
    void* pvReserved;
    uint dwReserved;
    uint FlagsEx;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; OPENFILENAMEA サイズ: 88 バイト(x86)
dim st, 22    ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; lStructSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; hwndOwner : HWND (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; hInstance : HINSTANCE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpstrFilter : LPSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpstrCustomFilter : LPSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; nMaxCustFilter : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; nFilterIndex : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; lpstrFile : LPSTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; nMaxFile : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpstrFileTitle : LPSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; nMaxFileTitle : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpstrInitialDir : LPSTR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; lpstrTitle : LPSTR (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; Flags : OPEN_FILENAME_FLAGS (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; nFileOffset : WORD (+56, 2byte)  wpoke st,56,値  /  値 = wpeek(st,56)
; nFileExtension : WORD (+58, 2byte)  wpoke st,58,値  /  値 = wpeek(st,58)
; lpstrDefExt : LPSTR (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; lCustData : LPARAM (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; lpfnHook : LPOFNHOOKPROC (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; lpTemplateName : LPSTR (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; pvReserved : void* (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; dwReserved : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; FlagsEx : OPEN_FILENAME_FLAGS_EX (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; OPENFILENAMEA サイズ: 140 バイト(x64)
dim st, 35    ; 4byte整数×35(構造体サイズ 140 / 4 切り上げ)
; lStructSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; hwndOwner : HWND (+4, 8byte)  qpoke st,4,値 / qpeek(st,4)  ※IronHSPのみ。3.7/3.8は lpoke st,4,下位 : lpoke st,8,上位
; hInstance : HINSTANCE (+12, 8byte)  qpoke st,12,値 / qpeek(st,12)  ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; lpstrFilter : LPSTR (+20, 8byte)  qpoke st,20,値 / qpeek(st,20)  ※IronHSPのみ。3.7/3.8は lpoke st,20,下位 : lpoke st,24,上位
; lpstrCustomFilter : LPSTR (+28, 8byte)  qpoke st,28,値 / qpeek(st,28)  ※IronHSPのみ。3.7/3.8は lpoke st,28,下位 : lpoke st,32,上位
; nMaxCustFilter : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; nFilterIndex : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpstrFile : LPSTR (+44, 8byte)  qpoke st,44,値 / qpeek(st,44)  ※IronHSPのみ。3.7/3.8は lpoke st,44,下位 : lpoke st,48,上位
; nMaxFile : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; lpstrFileTitle : LPSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; nMaxFileTitle : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; lpstrInitialDir : LPSTR (+68, 8byte)  qpoke st,68,値 / qpeek(st,68)  ※IronHSPのみ。3.7/3.8は lpoke st,68,下位 : lpoke st,72,上位
; lpstrTitle : LPSTR (+76, 8byte)  qpoke st,76,値 / qpeek(st,76)  ※IronHSPのみ。3.7/3.8は lpoke st,76,下位 : lpoke st,80,上位
; Flags : OPEN_FILENAME_FLAGS (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; nFileOffset : WORD (+88, 2byte)  wpoke st,88,値  /  値 = wpeek(st,88)
; nFileExtension : WORD (+90, 2byte)  wpoke st,90,値  /  値 = wpeek(st,90)
; lpstrDefExt : LPSTR (+92, 8byte)  qpoke st,92,値 / qpeek(st,92)  ※IronHSPのみ。3.7/3.8は lpoke st,92,下位 : lpoke st,96,上位
; lCustData : LPARAM (+100, 8byte)  qpoke st,100,値 / qpeek(st,100)  ※IronHSPのみ。3.7/3.8は lpoke st,100,下位 : lpoke st,104,上位
; lpfnHook : LPOFNHOOKPROC (+108, 8byte)  qpoke st,108,値 / qpeek(st,108)  ※IronHSPのみ。3.7/3.8は lpoke st,108,下位 : lpoke st,112,上位
; lpTemplateName : LPSTR (+116, 8byte)  qpoke st,116,値 / qpeek(st,116)  ※IronHSPのみ。3.7/3.8は lpoke st,116,下位 : lpoke st,120,上位
; pvReserved : void* (+124, 8byte)  qpoke st,124,値 / qpeek(st,124)  ※IronHSPのみ。3.7/3.8は lpoke st,124,下位 : lpoke st,128,上位
; dwReserved : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; FlagsEx : OPEN_FILENAME_FLAGS_EX (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global OPENFILENAMEA, pack=1
    #field int lStructSize
    #field intptr hwndOwner
    #field intptr hInstance
    #field intptr lpstrFilter
    #field intptr lpstrCustomFilter
    #field int nMaxCustFilter
    #field int nFilterIndex
    #field intptr lpstrFile
    #field int nMaxFile
    #field intptr lpstrFileTitle
    #field int nMaxFileTitle
    #field intptr lpstrInitialDir
    #field intptr lpstrTitle
    #field int Flags
    #field short nFileOffset
    #field short nFileExtension
    #field intptr lpstrDefExt
    #field intptr lCustData
    #field intptr lpfnHook
    #field intptr lpTemplateName
    #field intptr pvReserved
    #field int dwReserved
    #field int FlagsEx
#endstruct

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