// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0 > or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT >, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
use shared::guiddef::REFGUID;
use shared::minwindef::{BOOL, DWORD, UINT};
use shared::windef::HWND;
use um::propsys::{IPropertyDescriptionList, IPropertyStore};
use um::shobjidl_core::{IModalWindow, IModalWindowVtbl, IShellItem, IShellItemFilter
};
use um::shtypes::COMDLG_FILTERSPEC;
use um::unknwnbase::{IUnknown, IUnknownVtbl};
use um::winnt::{HRESULT, LPCWSTR, LPWSTR, WCHAR};
pub type IFileOperationProgressSink = IUnknown; // TODO
pub use um::shobjidl_core::{IShellItemArray, SIATTRIBFLAGS}; // FIXME: Remove these in the next major release
ENUM !{enum FDE_OVERWRITE_RESPONSE {
FDEOR_DEFAULT = 0 ,
FDEOR_ACCEPT = 1 ,
FDEOR_REFUSE = 2 ,
}}
ENUM !{enum FDE_SHAREVIOLATION_RESPONSE {
FDESVR_DEFAULT = 0 ,
FDESVR_ACCEPT = 1 ,
FDESVR_REFUSE = 2 ,
}}
ENUM !{enum FDAP {
FDAP_BOTTOM = 0 ,
FDAP_TOP = 1 ,
}}
RIDL!{#[ uuid(0 x973510db, 0 x7d7f, 0 x452b, 0 x89, 0 x75, 0 x74, 0 xa8, 0 x58, 0 x28, 0 xd3, 0 x54)]
interface IFileDialogEvents(IFileDialogEventsVtbl): IUnknown(IUnknownVtbl) {
fn OnFileOk(
pfd: *mut IFileDialog,
) -> HRESULT,
fn OnFolderChanging(
pfd: *mut IFileDialog,
psiFolder: *mut IShellItem,
) -> HRESULT,
fn OnFolderChange(
pfd: *mut IFileDialog,
) -> HRESULT,
fn OnSelectionChange(
pfd: *mut IFileDialog,
) -> HRESULT,
fn OnShareViolation(
pfd: *mut IFileDialog,
psi: *mut IShellItem,
pResponse: *mut FDE_SHAREVIOLATION_RESPONSE,
) -> HRESULT,
fn OnTypeChange(
pfd: *mut IFileDialog,
) -> HRESULT,
fn OnOverwrite(
pfd: *mut IFileDialog,
psi: *mut IShellItem,
pResponse: *mut FDE_OVERWRITE_RESPONSE,
) -> HRESULT,
}}
ENUM !{enum FILEOPENDIALOGOPTIONS {
FOS_OVERWRITEPROMPT = 0 x2,
FOS_STRICTFILETYPES = 0 x4,
FOS_NOCHANGEDIR = 0 x8,
FOS_PICKFOLDERS = 0 x20,
FOS_FORCEFILESYSTEM = 0 x40,
FOS_ALLNONSTORAGEITEMS = 0 x80,
FOS_NOVALIDATE = 0 x100,
FOS_ALLOWMULTISELECT = 0 x200,
FOS_PATHMUSTEXIST = 0 x800,
FOS_FILEMUSTEXIST = 0 x1000,
FOS_CREATEPROMPT = 0 x2000,
FOS_SHAREAWARE = 0 x4000,
FOS_NOREADONLYRETURN = 0 x8000,
FOS_NOTESTFILECREATE = 0 x10000,
FOS_HIDEMRUPLACES = 0 x20000,
FOS_HIDEPINNEDPLACES = 0 x40000,
FOS_NODEREFERENCELINKS = 0 x100000,
FOS_DONTADDTORECENT = 0 x2000000,
FOS_FORCESHOWHIDDEN = 0 x10000000,
FOS_DEFAULTNOMINIMODE = 0 x20000000,
FOS_FORCEPREVIEWPANEON = 0 x40000000,
FOS_SUPPORTSTREAMABLEITEMS = 0 x80000000,
}}
RIDL!{#[ uuid(0 x42f85136, 0 xdb7e, 0 x439c, 0 x85, 0 xf1, 0 xe4, 0 x07, 0 x5d, 0 x13, 0 x5f, 0 xc8)]
interface IFileDialog(IFileDialogVtbl): IModalWindow(IModalWindowVtbl) {
fn SetFileTypes(
cFileTypes: UINT,
rgFilterSpec: *const COMDLG_FILTERSPEC,
) -> HRESULT,
fn SetFileTypeIndex(
iFileType: UINT,
) -> HRESULT,
fn GetFileTypeIndex(
piFileType: *mut UINT,
) -> HRESULT,
fn Advise(
pfde: *mut IFileDialogEvents,
pdwCookie: *mut DWORD,
) -> HRESULT,
fn Unadvise(
dwCookie: DWORD,
) -> HRESULT,
fn SetOptions(
fos: FILEOPENDIALOGOPTIONS,
) -> HRESULT,
fn GetOptions(
pfos: *mut FILEOPENDIALOGOPTIONS,
) -> HRESULT,
fn SetDefaultFolder(
psi: *mut IShellItem,
) -> HRESULT,
fn SetFolder(
psi: *mut IShellItem,
) -> HRESULT,
fn GetFolder(
ppsi: *mut *mut IShellItem,
) -> HRESULT,
fn GetCurrentSelection(
ppsi: *mut *mut IShellItem,
) -> HRESULT,
fn SetFileName(
pszName: LPCWSTR,
) -> HRESULT,
fn GetFileName(
pszName: *mut LPWSTR,
) -> HRESULT,
fn SetTitle(
pszTitle: LPCWSTR,
) -> HRESULT,
fn SetOkButtonLabel(
pszText: LPCWSTR,
) -> HRESULT,
fn SetFileNameLabel(
pszLabel: LPCWSTR,
) -> HRESULT,
fn GetResult(
ppsi: *mut *mut IShellItem,
) -> HRESULT,
fn AddPlace(
psi: *mut IShellItem,
fdap: FDAP,
) -> HRESULT,
fn SetDefaultExtension(
pszDefaultExtension: LPCWSTR,
) -> HRESULT,
fn Close(
hr: HRESULT,
) -> HRESULT,
fn SetClientGuid(
guid: REFGUID,
) -> HRESULT,
fn ClearClientData() -> HRESULT,
fn SetFilter(
pFilter: *mut IShellItemFilter,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 x84bccd23, 0 x5fde, 0 x4cdb, 0 xae, 0 xa4, 0 xaf, 0 x64, 0 xb8, 0 x3d, 0 x78, 0 xab)]
interface IFileSaveDialog(IFileSaveDialogVtbl): IFileDialog(IFileDialogVtbl) {
fn SetSaveAsItem(
psi: *mut IShellItem,
) -> HRESULT,
fn SetProperties(
pStore: *mut IPropertyStore,
) -> HRESULT,
fn SetCollectedProperties(
pList: *mut IPropertyDescriptionList,
fAppendDefault: BOOL,
) -> HRESULT,
fn GetProperties(
ppStore: *mut *mut IPropertyStore,
) -> HRESULT,
fn ApplyProperties(
psi: *mut IShellItem,
pStore: *mut IPropertyStore,
hwnd: HWND,
pSink: *mut IFileOperationProgressSink,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 xd57c7288, 0 xd4ad, 0 x4768, 0 xbe, 0 x02, 0 x9d, 0 x96, 0 x95, 0 x32, 0 xd9, 0 x60)]
interface IFileOpenDialog(IFileOpenDialogVtbl): IFileDialog(IFileDialogVtbl) {
fn GetResults(
ppenum: *mut *mut IShellItemArray,
) -> HRESULT,
fn GetSelectedItems(
ppsai: *mut *mut IShellItemArray,
) -> HRESULT,
}}
ENUM !{enum CDCONTROLSTATEF {
CDCS_INACTIVE = 0 ,
CDCS_ENABLED = 0 x1,
CDCS_VISIBLE = 0 x2,
CDCS_ENABLEDVISIBLE = 0 x3,
}}
RIDL!{#[ uuid(0 xe6fdd21a, 0 x163f, 0 x4975, 0 x9c, 0 x8c, 0 xa6, 0 x9f, 0 x1b, 0 xa3, 0 x70, 0 x34)]
interface IFileDialogCustomize(IFileDialogCustomizeVtbl): IUnknown(IUnknownVtbl) {
fn EnableOpenDropDown(
dwIDCtl: DWORD,
) -> HRESULT,
fn AddMenu(
dwIDCtl: DWORD,
pszLabel: LPCWSTR,
) -> HRESULT,
fn AddPushButton(
dwIDCtl: DWORD,
pszLabel: LPCWSTR,
) -> HRESULT,
fn AddComboBox(
dwIDCtl: DWORD,
) -> HRESULT,
fn AddRadioButtonList(
dwIDCtl: DWORD,
) -> HRESULT,
fn AddCheckButton(
dwIDCtl: DWORD,
pszLabel: LPCWSTR,
bChecked: BOOL,
) -> HRESULT,
fn AddEditBox(
dwIDCtl: DWORD,
pszText: LPCWSTR,
) -> HRESULT,
fn AddSeparator(
dwIDCtl: DWORD,
) -> HRESULT,
fn AddText(
dwIDCtl: DWORD,
pszText: LPCWSTR,
) -> HRESULT,
fn SetControlLabel(
dwIDCtl: DWORD,
pszLabel: LPCWSTR,
) -> HRESULT,
fn GetControlState(
dwIDCtl: DWORD,
pdwState: *mut CDCONTROLSTATEF,
) -> HRESULT,
fn SetControlState(
dwIDCtl: DWORD,
dwState: CDCONTROLSTATEF,
) -> HRESULT,
fn GetEditBoxText(
dwIDCtl: DWORD,
ppszText: *mut *mut WCHAR,
) -> HRESULT,
fn SetEditBoxText(
dwIDCtl: DWORD,
pszText: LPCWSTR,
) -> HRESULT,
fn GetCheckButtonState(
dwIDCtl: DWORD,
pbChecked: *mut BOOL,
) -> HRESULT,
fn SetCheckButtonState(
dwIDCtl: DWORD,
bChecked: BOOL,
) -> HRESULT,
fn AddControlItem(
dwIDCtl: DWORD,
dwIDItem: DWORD,
pszLabel: LPCWSTR,
) -> HRESULT,
fn RemoveControlItem(
dwIDCtl: DWORD,
dwIDItem: DWORD,
) -> HRESULT,
fn RemoveAllControlItems(
dwIDCtl: DWORD,
) -> HRESULT,
fn GetControlItemState(
dwIDCtl: DWORD,
dwIDItem: DWORD,
pdwState: *mut CDCONTROLSTATEF,
) -> HRESULT,
fn SetControlItemState(
dwIDCtl: DWORD,
dwIDItem: DWORD,
dwState: CDCONTROLSTATEF,
) -> HRESULT,
fn GetSelectedControlItem(
dwIDCtl: DWORD,
pdwIDItem: *mut DWORD,
) -> HRESULT,
fn SetSelectedControlItem(
dwIDCtl: DWORD,
dwIDItem: DWORD,
) -> HRESULT,
fn StartVisualGroup(
dwIDCtl: DWORD,
pszLabel: LPCWSTR,
) -> HRESULT,
fn EndVisualGroup() -> HRESULT,
fn MakeProminent(
dwIDCtl: DWORD,
) -> HRESULT,
fn SetControlItemText(
dwIDCtl: DWORD,
dwIDItem: DWORD,
pszLabel: LPCWSTR,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 x36116642, 0 xd713, 0 x4b97, 0 x9b, 0 x83, 0 x74, 0 x84, 0 xa9, 0 xd0, 0 x04, 0 x33)]
interface IFileDialogControlEvents(IFileDialogControlEventsVtbl): IUnknown(IUnknownVtbl) {
fn OnItemSelected(
pfdc: *mut IFileDialogCustomize,
dwIDCtl: DWORD,
dwIDItem: DWORD,
) -> HRESULT,
fn OnButtonClicked(
pfdc: *mut IFileDialogCustomize,
dwIDCtl: DWORD,
) -> HRESULT,
fn OnCheckButtonToggled(
pfdc: *mut IFileDialogCustomize,
dwIDCtl: DWORD,
bChecked: BOOL,
) -> HRESULT,
fn OnControlActivating(
pfdc: *mut IFileDialogCustomize,
dwIDCtl: DWORD,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 x61744fc7, 0 x85b5, 0 x4791, 0 xa9, 0 xb0, 0 x27, 0 x22, 0 x76, 0 x30, 0 x9b, 0 x13)]
interface IFileDialog2(IFileDialog2Vtbl): IFileDialog(IFileDialogVtbl) {
fn SetCancelButtonLabel(
pszLabel: LPCWSTR,
) -> HRESULT,
fn SetNavigationRoot(
psi: IShellItem,
) -> HRESULT,
}}
Messung V0.5 in Prozent C=95 H=100 G=97
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland