Может, поможет. Это опробованные куски кода. Handle родительского окна или 0, nIndex - выбранный фильтр (индексация с 1), lpFilter - сам фильтр, lpFileName - буффер на 260 (MAX_PATH) откуда будет взято имя файла, и куда будет помещено новое. lpExtension - расширение по-умолчанию вместе с точкой, lpTitle - заголовок окна. Code (Text): OpenDlg proc Handle:DWORD, nIndex:DWORD, lpFilter:DWORD, lpFileName:DWORD, lpExtension:DWORD, lpTitle:DWORD MOV EAX, ESP ; ---------------------- OPENFILENAME struct stack PUSH nil ; lpTemplateName PUSH nil ; lpfnHook PUSH 0 ; lCustData PUSH lpExtension ; lpstrDefExt PUSH 0 ; nFileExtension, nFileOffset PUSH ofnFlags ; Flags PUSH lpTitle ; lpstrTitle PUSH OFFSET szInitialDir ; lpstrInitialDir PUSH 0 ; nMaxFileTitle PUSH nil ; lpstrFileTitle PUSH MAX_PATH ; nMaxFile PUSH lpFileName ; lpstrFile PUSH nIndex ; nFilterIndex PUSH 0 ; nMaxCustFilter PUSH nil ; lpstrCustomFilter PUSH lpFilter ; lpstrFilter PUSH hInstance ; hInstance PUSH Handle ; hwndOwner PUSH SIZEOF OPENFILENAME ; lStructSize MOV EDX, ESP PUSH EAX ; ---------------------- OPENFILENAME ends INVOKE GetOpenFileName, EDX TEST EAX, EAX JZ @F MOV EAX, (OPENFILENAME PTR [ESP+4]).nFilterIndex @@: POP ESP RET OpenDlg Endp Максимально забитая процедура обработки сообщений для диалога с поддержкой горячих клавиш. Code (Text): Start proc INVOKE InitCommonControls INVOKE GetModuleHandle, 0 MOV hInstance, EAX INVOKE LoadCursor, 0, IDC_ARROW MOV hCursor, EAX INVOKE LoadIcon, hInstance, ICON_TRAY MOV hIcon, EAX INVOKE Init_classes ; Создание и отображение окна ... INVOKE CreateDialogParam, hInstance, DIALOG_MAIN, HWND_DESKTOP, OFFSET MainProc, 0 TEST EAX, EAX JE @Exit MOV ESI, EAX INVOKE ShowWindow, ESI, SW_SHOWNORMAL ; Message loop ... INVOKE LoadAccelerators, hInstance, ACCEL_MAIN MOV EBX, EAX ADD ESP, -(SIZEOF MSG) MOV EDI, ESP @@: INVOKE GetMessage, EDI, 0, 0, 0 TEST EAX, EAX JZ @F INVOKE IsDialogMessage, ESI, EDI TEST EAX, EAX JNE @B INVOKE TranslateAccelerator, ESI, EBX, EDI TEST EAX, EAX JNE @B INVOKE TranslateMessage, EDI INVOKE DispatchMessage, EDI JMP @B @@: INVOKE DestroyWindow, ESI MOV EAX, (MSG PTR [EDI]).wParam ADD ESP, SIZEOF MSG @Exit: INVOKE ExitProcess, EAX Start Endp
p.s. забыл парочку констант Code (Text): OFN_ENABLESIZING EQU 800000h ofnFlags EQU OFN_HIDEREADONLY or OFN_NOVALIDATE or \ OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_NONETWORKBUTTON or \ OFN_ENABLESIZING or OFN_NOCHANGEDIR or OFN_HIDEREADONLY or \ OFN_FILEMUSTEXIST xor OFN_EXPLORER sfnFlags EQU OFN_OVERWRITEPROMPT or OFN_HIDEREADONLY or \ OFN_NOVALIDATE or OFN_PATHMUSTEXIST or OFN_NONETWORKBUTTON or \ OFN_ENABLESIZING or OFN_EXTENSIONDIFFERENT or OFN_NOCHANGEDIR xor OFN_EXPLORER