// 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
//! SHELL.DLL functions, types, and definitions
use ctypes::{__int64, c_int, c_void};
use shared::basetsd::{DWORD_PTR, UINT_PTR};
use shared::guiddef::{GUID, REFIID};
use shared::minwindef::{
BOOL, DWORD, FILETIME, HINSTANCE, HKEY, INT, LPARAM, LPVOID, MAX_PATH, UINT, ULONG, WORD,
};
use shared::windef::{HICON, HWND, POINT, RECT};
use um::minwinbase::LPSECURITY_ATTRIBUTES;
use um::processthreadsapi::{LPPROCESS_INFORMATION, LPSTARTUPINFOW};
use um::winnt::{
CHAR, HANDLE, HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCSTR, PCWSTR, PCZZSTR, PCZZWSTR, PW
STR,
PZZSTR, PZZWSTR, ULARGE_INTEGER, WCHAR,
};
use um::winuser::WM_USER;
DECLARE_HANDLE!{HDROP, HDROP__}
extern "system" {
pub fn DragQueryFileA(
hDrop: HDROP,
iFile: UINT,
lpszFile: LPSTR,
cch: UINT,
) -> UINT;
pub fn DragQueryFileW(
hDrop: HDROP,
iFile: UINT,
lpszFile: LPWSTR,
cch: UINT,
) -> UINT;
pub fn DragQueryPoint(
hDrop: HDROP,
lppt: *mut POINT,
) -> BOOL;
pub fn DragFinish(
hDrop: HDROP,
);
pub fn DragAcceptFiles(
hWnd: HWND,
fAccept: BOOL,
);
pub fn ShellExecuteA(
hwnd: HWND,
lpOperation: LPCSTR,
lpFile: LPCSTR,
lpParameters: LPCSTR,
lpDirectory: LPCSTR,
nShowCmd: c_int,
) -> HINSTANCE;
pub fn ShellExecuteW(
hwnd: HWND,
lpOperation: LPCWSTR,
lpFile: LPCWSTR,
lpParameters: LPCWSTR,
lpDirectory: LPCWSTR,
nShowCmd: c_int,
) -> HINSTANCE;
pub fn FindExecutableA(
lpFile: LPCSTR,
lpDirectory: LPCSTR,
lpResult: LPSTR,
) -> HINSTANCE;
pub fn FindExecutableW(
lpFile: LPCWSTR,
lpDirectory: LPCWSTR,
lpResult: LPWSTR,
) -> HINSTANCE;
pub fn CommandLineToArgvW(
lpCmdLine: LPCWSTR,
pNumArgs: *mut c_int,
) -> *mut LPWSTR;
pub fn ShellAboutA(
hWnd: HWND,
szApp: LPCSTR,
szOtherStuff: LPCSTR,
hIcon: HICON,
) -> INT;
pub fn ShellAboutW(
hWnd: HWND,
szApp: LPCWSTR,
szOtherStuff: LPCWSTR,
hIcon: HICON,
) -> INT;
pub fn DuplicateIcon(
hInst: HINSTANCE,
hIcon: HICON,
) -> HICON;
pub fn ExtractAssociatedIconA(
hInst: HINSTANCE,
pszIconPath: LPSTR,
piIcon: *mut WORD,
) -> HICON;
pub fn ExtractAssociatedIconW(
hInst: HINSTANCE,
pszIconPath: LPWSTR,
piIcon: *mut WORD,
) -> HICON;
pub fn ExtractAssociatedIconExA(
hInst: HINSTANCE,
pszIconPath: LPSTR,
piIconIndex: *mut WORD,
piIconId: *mut WORD,
) -> HICON;
pub fn ExtractAssociatedIconExW(
hInst: HINSTANCE,
pszIconPath: LPWSTR,
piIconIndex: *mut WORD,
piIconId: *mut WORD,
) -> HICON;
pub fn ExtractIconA(
hInst: HINSTANCE,
pszExeFileName: LPCSTR,
nIconIndex: UINT,
) -> HICON;
pub fn ExtractIconW(
hInst: HINSTANCE,
pszExeFileName: LPCWSTR,
nIconIndex: UINT,
) -> HICON;
}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct DRAGINFOA {
uSize: UINT,
pt: POINT,
fNC: BOOL,
lpFileList: PZZSTR,
grfKeyState: DWORD,
}}
pub type LPDRAGINFOA = *mut DRAGINFOA;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct DRAGINFOW {
uSize: UINT,
pt: POINT,
fNC: BOOL,
lpFileList: PZZWSTR,
grfKeyState: DWORD,
}}
pub type LPDRAGINFOW = *mut DRAGINFOW;
pub const ABM_NEW: DWORD = 0 x00000000;
pub const ABM_REMOVE: DWORD = 0 x00000001;
pub const ABM_QUERYPOS: DWORD = 0 x00000002;
pub const ABM_SETPOS: DWORD = 0 x00000003;
pub const ABM_GETSTATE: DWORD = 0 x00000004;
pub const ABM_GETTASKBARPOS: DWORD = 0 x00000005;
pub const ABM_ACTIVATE: DWORD = 0 x00000006;
pub const ABM_GETAUTOHIDEBAR: DWORD = 0 x00000007;
pub const ABM_SETAUTOHIDEBAR: DWORD = 0 x00000008;
pub const ABM_WINDOWPOSCHANGED: DWORD = 0 x0000009;
pub const ABM_SETSTATE: DWORD = 0 x0000000a;
pub const ABM_GETAUTOHIDEBAREX: DWORD = 0 x0000000b;
pub const ABM_SETAUTOHIDEBAREX: DWORD = 0 x0000000c;
pub const ABN_STATECHANGE: DWORD = 0 x0000000;
pub const ABN_POSCHANGED: DWORD = 0 x0000001;
pub const ABN_FULLSCREENAPP: DWORD = 0 x0000002;
pub const ABN_WINDOWARRANGE: DWORD = 0 x0000003;
pub const ABS_AUTOHIDE: UINT = 0 x0000001;
pub const ABS_ALWAYSONTOP: UINT = 0 x0000002;
pub const ABE_LEFT: UINT = 0 ;
pub const ABE_TOP: UINT = 1 ;
pub const ABE_RIGHT: UINT = 2 ;
pub const ABE_BOTTOM: UINT = 3 ;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct APPBARDATA {
cbSize: DWORD,
hWnd: HWND,
uCallbackMessage: UINT,
uEdge: UINT,
rc: RECT,
lParam: LPARAM,
}}
pub type PAPPBARDATA = *mut APPBARDATA;
extern "system" {
pub fn SHAppBarMessage(
dwMessage: DWORD,
pData: PAPPBARDATA,
) -> UINT_PTR;
pub fn DoEnvironmentSubstA(
pszSrc: LPSTR,
cchSrc: UINT,
) -> DWORD;
pub fn DoEnvironmentSubstW(
pszSrc: LPWSTR,
cchSrc: UINT,
) -> DWORD;
pub fn ExtractIconExA(
lpszFile: LPCSTR,
nIconIndex: c_int,
phiconLarge: *mut HICON,
phiconSmall: *mut HICON,
nIcons: UINT,
) -> UINT;
pub fn ExtractIconExW(
lpszFile: LPCWSTR,
nIconIndex: c_int,
phiconLarge: *mut HICON,
phiconSmall: *mut HICON,
nIcons: UINT,
) -> UINT;
}
pub const FO_MOVE: WORD = 0 x0001;
pub const FO_COPY: WORD = 0 x0002;
pub const FO_DELETE: WORD = 0 x0003;
pub const FO_RENAME: WORD = 0 x0004;
pub const FOF_MULTIDESTFILES: WORD = 0 x0001;
pub const FOF_CONFIRMMOUSE: WORD = 0 x0002;
pub const FOF_SILENT: WORD = 0 x0004;
pub const FOF_RENAMEONCOLLISION: WORD = 0 x0008;
pub const FOF_NOCONFIRMATION: WORD = 0 x0010;
pub const FOF_WANTMAPPINGHANDLE: WORD = 0 x0020;
pub const FOF_ALLOWUNDO: WORD = 0 x0040;
pub const FOF_FILESONLY: WORD = 0 x0080;
pub const FOF_SIMPLEPROGRESS: WORD = 0 x0100;
pub const FOF_NOCONFIRMMKDIR: WORD = 0 x0200;
pub const FOF_NOERRORUI: WORD = 0 x0400;
pub const FOF_NOCOPYSECURITYATTRIBS: WORD = 0 x0800;
pub const FOF_NORECURSION: WORD = 0 x1000;
pub const FOF_NO_CONNECTED_ELEMENTS: WORD = 0 x2000;
pub const FOF_WANTNUKEWARNING: WORD = 0 x4000;
pub const FOF_NORECURSEREPARSE: WORD = 0 x8000;
pub const FOF_NO_UI: WORD = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
pub type FILEOP_FLAGS = WORD;
pub const PO_DELETE: WORD = 0 x0013;
pub const PO_RENAME: WORD = 0 x0014;
pub const PO_PORTCHANGE: WORD = 0 x0020;
pub const PO_REN_PORT: WORD = 0 x0034;
pub type PRINTEROP_FLAGS = WORD;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHFILEOPSTRUCTA {
hwnd: HWND,
wFunc: UINT,
pFrom: PCZZSTR,
pTo: PCZZSTR,
fFlags: FILEOP_FLAGS,
fAnyOperationsAborted: BOOL,
hNameMappings: LPVOID,
lpszProgressTitle: PCSTR,
}}
pub type LPSHFILEOPSTRUCTA = *mut SHFILEOPSTRUCTA;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHFILEOPSTRUCTW {
hwnd: HWND,
wFunc: UINT,
pFrom: PCZZWSTR,
pTo: PCZZWSTR,
fFlags: FILEOP_FLAGS,
fAnyOperationsAborted: BOOL,
hNameMappings: LPVOID,
lpszProgressTitle: PCWSTR,
}}
pub type LPSHFILEOPSTRUCTW = *mut SHFILEOPSTRUCTW;
extern "system" {
pub fn SHFileOperationA(
lpFileOp: LPSHFILEOPSTRUCTA,
) -> c_int;
pub fn SHFileOperationW(
lpFileOp: LPSHFILEOPSTRUCTW,
) -> c_int;
pub fn SHFreeNameMappings(
hNameMappings: HANDLE,
);
}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHNAMEMAPPINGA {
pszOldPath: LPSTR,
pszNewPath: LPSTR,
cchOldPath: c_int,
cchNewPath: c_int,
}}
pub type LPSHNAMEMAPPINGA = *mut SHNAMEMAPPINGA;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHNAMEMAPPINGW {
pszOldPath: LPWSTR,
pszNewPath: LPWSTR,
cchOldPath: c_int,
cchNewPath: c_int,
}}
pub type LPSHNAMEMAPPINGW = *mut SHNAMEMAPPINGW;
pub const SE_ERR_FNF: DWORD = 2 ;
pub const SE_ERR_PNF: DWORD = 3 ;
pub const SE_ERR_ACCESSDENIED: DWORD = 5 ;
pub const SE_ERR_OOM: DWORD = 8 ;
pub const SE_ERR_DLLNOTFOUND: DWORD = 32 ;
pub const SE_ERR_SHARE: DWORD = 26 ;
pub const SE_ERR_ASSOCINCOMPLETE: DWORD = 27 ;
pub const SE_ERR_DDETIMEOUT: DWORD = 28 ;
pub const SE_ERR_DDEFAIL: DWORD = 29 ;
pub const SE_ERR_DDEBUSY: DWORD = 30 ;
pub const SE_ERR_NOASSOC: DWORD = 31 ;
pub const SEE_MASK_DEFAULT: DWORD = 0 x00000000;
pub const SEE_MASK_CLASSNAME: DWORD = 0 x00000001;
pub const SEE_MASK_CLASSKEY: DWORD = 0 x00000003;
pub const SEE_MASK_IDLIST: DWORD = 0 x00000004;
pub const SEE_MASK_INVOKEIDLIST: DWORD = 0 x0000000c;
pub const SEE_MASK_ICON: DWORD = 0 x00000010;
pub const SEE_MASK_HOTKEY: DWORD = 0 x00000020;
pub const SEE_MASK_NOCLOSEPROCESS: DWORD = 0 x00000040;
pub const SEE_MASK_CONNECTNETDRV: DWORD = 0 x00000080;
pub const SEE_MASK_NOASYNC: DWORD = 0 x00000100;
pub const SEE_MASK_FLAG_DDEWAIT: DWORD = SEE_MASK_NOASYNC;
pub const SEE_MASK_DOENVSUBST: DWORD = 0 x00000200;
pub const SEE_MASK_FLAG_NO_UI: DWORD = 0 x00000400;
pub const SEE_MASK_UNICODE: DWORD = 0 x00004000;
pub const SEE_MASK_NO_CONSOLE: DWORD = 0 x00008000;
pub const SEE_MASK_ASYNCOK: DWORD = 0 x00100000;
pub const SEE_MASK_HMONITOR: DWORD = 0 x00200000;
pub const SEE_MASK_NOZONECHECKS: DWORD = 0 x00800000;
pub const SEE_MASK_NOQUERYCLASSSTORE: DWORD = 0 x01000000;
pub const SEE_MASK_WAITFORINPUTIDLE: DWORD = 0 x02000000;
pub const SEE_MASK_FLAG_LOG_USAGE: DWORD = 0 x04000000;
pub const SEE_MASK_FLAG_HINST_IS_SITE: DWORD = 0 x08000000;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHELLEXECUTEINFOA {
cbSize: DWORD,
fMask: ULONG,
hwnd: HWND,
lpVerb: LPCSTR,
lpFile: LPCSTR,
lpParameters: LPCSTR,
lpDirectory: LPCSTR,
nShow: c_int,
hInstApp: HINSTANCE,
lpIDList: *mut c_void,
lpClass: LPCSTR,
hkeyClass: HKEY,
dwHotKey: DWORD,
hMonitor: HANDLE,
hProcess: HANDLE,
}}
pub type LPSHELLEXECUTEINFOA = *mut SHELLEXECUTEINFOA;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHELLEXECUTEINFOW {
cbSize: DWORD,
fMask: ULONG,
hwnd: HWND,
lpVerb: LPCWSTR,
lpFile: LPCWSTR,
lpParameters: LPCWSTR,
lpDirectory: LPCWSTR,
nShow: c_int,
hInstApp: HINSTANCE,
lpIDList: *mut c_void,
lpClass: LPCWSTR,
hkeyClass: HKEY,
dwHotKey: DWORD,
hMonitor: HANDLE,
hProcess: HANDLE,
}}
pub type LPSHELLEXECUTEINFOW = *mut SHELLEXECUTEINFOW;
extern "system" {
pub fn ShellExecuteExA(
pExecInfo: *mut SHELLEXECUTEINFOA,
) -> BOOL;
pub fn ShellExecuteExW(
pExecInfo: *mut SHELLEXECUTEINFOW,
) -> BOOL;
}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHCREATEPROCESSINFOW {
cbSize: DWORD,
fMask: ULONG,
hwnd: HWND,
pszFile: LPCWSTR,
pszParameters: LPCWSTR,
pszCurrentDirectory: LPCWSTR,
hUserToken: HANDLE,
lpProcessAttributes: LPSECURITY_ATTRIBUTES,
lpThreadAttributes: LPSECURITY_ATTRIBUTES,
bInheritHandles: BOOL,
dwCreationFlags: DWORD,
lpStartupInfo: LPSTARTUPINFOW,
lpProcessInformation: LPPROCESS_INFORMATION,
}}
pub type PSHCREATEPROCESSINFOW = *mut SHCREATEPROCESSINFOW;
extern "system" {
pub fn SHCreateProcessAsUserW(
pscpi: PSHCREATEPROCESSINFOW,
) -> BOOL;
pub fn SHEvaluateSystemCommandTemplate(
pszCmdTemplate: PCWSTR,
ppszApplication: *mut PWSTR,
ppszCommandLine: *mut PWSTR,
ppszParameters: *mut PWSTR,
) -> HRESULT;
}
ENUM !{enum ASSOCCLASS {
ASSOCCLASS_SHELL_KEY = 0 ,
ASSOCCLASS_PROGID_KEY,
ASSOCCLASS_PROGID_STR,
ASSOCCLASS_CLSID_KEY,
ASSOCCLASS_CLSID_STR,
ASSOCCLASS_APP_KEY,
ASSOCCLASS_APP_STR,
ASSOCCLASS_SYSTEM_STR,
ASSOCCLASS_FOLDER,
ASSOCCLASS_STAR,
ASSOCCLASS_FIXED_PROGID_STR,
ASSOCCLASS_PROTOCOL_STR,
}}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct ASSOCIATIONELEMENT {
ac: ASSOCCLASS,
hkClass: HKEY,
pszClass: PCWSTR,
}}
extern "system" {
pub fn AssocCreateForClasses(
rgClasses: *const ASSOCIATIONELEMENT,
cClasses: ULONG,
riid: REFIID,
ppv: *mut *mut c_void,
) -> HRESULT;
}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHQUERYRBINFO {
cbSize: DWORD,
i64Size: __int64,
i64NumItems: __int64,
}}
pub type LPSHQUERYRBINFO = *mut SHQUERYRBINFO;
pub const SHERB_NOCONFIRMATION: DWORD = 0 x00000001;
pub const SHERB_NOPROGRESSUI: DWORD = 0 x00000002;
pub const SHERB_NOSOUND: DWORD = 0 x00000004;
extern "system" {
pub fn SHQueryRecycleBinA(
pszRootPath: LPCSTR,
pSHQueryRBInfo: LPSHQUERYRBINFO,
) -> HRESULT;
pub fn SHQueryRecycleBinW(
pszRootPath: LPCWSTR,
pSHQueryRBInfo: LPSHQUERYRBINFO,
) -> HRESULT;
pub fn SHEmptyRecycleBinA(
hwnd: HWND,
pszRootPath: LPCSTR,
dwFlags: DWORD,
) -> HRESULT;
pub fn SHEmptyRecycleBinW(
hwnd: HWND,
pszRootPath: LPCWSTR,
dwFlags: DWORD,
) -> HRESULT;
}
ENUM !{enum QUERY_USER_NOTIFICATION_STATE {
QUNS_NOT_PRESENT = 1 ,
QUNS_BUSY = 2 ,
QUNS_RUNNING_D3D_FULL_SCREEN = 3 ,
QUNS_PRESENTATION_MODE = 4 ,
QUNS_ACCEPTS_NOTIFICATIONS = 5 ,
QUNS_QUIET_TIME = 6 ,
QUNS_APP = 7 ,
}}
extern "system" {
pub fn SHQueryUserNotificationState(
pquns: *mut QUERY_USER_NOTIFICATION_STATE,
) -> HRESULT;
pub fn SHGetPropertyStoreForWindow(
hwnd: HWND,
riid: REFIID,
ppv: *mut *mut c_void,
) -> HRESULT;
}
UNION!{#[ cfg_attr(target_arch = "x86" , repr(packed))] union NOTIFYICONDATAA_u {
[u32; 1 ],
uTimeout uTimeout_mut: UINT,
uVersion uVersion_mut: UINT,
}}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct NOTIFYICONDATAA {
cbSize: DWORD,
hWnd: HWND,
uID: UINT,
uFlags: UINT,
uCallbackMessage: UINT,
hIcon: HICON,
szTip: [CHAR; 128 ],
dwState: DWORD,
dwStateMask: DWORD,
szInfo: [CHAR; 256 ],
u: NOTIFYICONDATAA_u,
szInfoTitle: [CHAR; 64 ],
dwInfoFlags: DWORD,
guidItem: GUID,
hBalloonIcon: HICON,
}}
pub type PNOTIFYICONDATAA = *mut NOTIFYICONDATAA;
UNION!{#[ cfg_attr(target_arch = "x86" , repr(packed))] union NOTIFYICONDATAW_u {
[u32; 1 ],
uTimeout uTimeout_mut: UINT,
uVersion uVersion_mut: UINT,
}}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct NOTIFYICONDATAW {
cbSize: DWORD,
hWnd: HWND,
uID: UINT,
uFlags: UINT,
uCallbackMessage: UINT,
hIcon: HICON,
szTip: [WCHAR; 128 ],
dwState: DWORD,
dwStateMask: DWORD,
szInfo: [WCHAR; 256 ],
u: NOTIFYICONDATAW_u,
szInfoTitle: [WCHAR; 64 ],
dwInfoFlags: DWORD,
guidItem: GUID,
hBalloonIcon: HICON,
}}
pub type PNOTIFYICONDATAW = *mut NOTIFYICONDATAW;
pub const NIN_SELECT: DWORD = WM_USER + 0 ;
pub const NINF_KEY: DWORD = 0 x1;
pub const NIN_KEYSELECT: DWORD = NIN_SELECT | NINF_KEY;
pub const NIN_BALLOONSHOW: DWORD = WM_USER + 2 ;
pub const NIN_BALLOONHIDE: DWORD = WM_USER + 3 ;
pub const NIN_BALLOONTIMEOUT: DWORD = WM_USER + 4 ;
pub const NIN_BALLOONUSERCLICK: DWORD = WM_USER + 5 ;
pub const NIN_POPUPOPEN: DWORD = WM_USER + 6 ;
pub const NIN_POPUPCLOSE: DWORD = WM_USER + 7 ;
pub const NIM_ADD: DWORD = 0 x00000000;
pub const NIM_MODIFY: DWORD = 0 x00000001;
pub const NIM_DELETE: DWORD = 0 x00000002;
pub const NIM_SETFOCUS: DWORD = 0 x00000003;
pub const NIM_SETVERSION: DWORD = 0 x00000004;
pub const NOTIFYICON_VERSION: DWORD = 3 ;
pub const NOTIFYICON_VERSION_4: DWORD = 4 ;
pub const NIF_MESSAGE: DWORD = 0 x00000001;
pub const NIF_ICON: DWORD = 0 x00000002;
pub const NIF_TIP: DWORD = 0 x00000004;
pub const NIF_STATE: DWORD = 0 x00000008;
pub const NIF_INFO: DWORD = 0 x00000010;
pub const NIF_GUID: DWORD = 0 x00000020;
pub const NIF_REALTIME: DWORD = 0 x00000040;
pub const NIF_SHOWTIP: DWORD = 0 x00000080;
pub const NIS_HIDDEN: DWORD = 0 x00000001;
pub const NIS_SHAREDICON: DWORD = 0 x00000002;
pub const NIIF_NONE: DWORD = 0 x00000000;
pub const NIIF_INFO: DWORD = 0 x00000001;
pub const NIIF_WARNING: DWORD = 0 x00000002;
pub const NIIF_ERROR: DWORD = 0 x00000003;
pub const NIIF_USER: DWORD = 0 x00000004;
pub const NIIF_ICON_MASK: DWORD = 0 x0000000F;
pub const NIIF_NOSOUND: DWORD = 0 x00000010;
pub const NIIF_LARGE_ICON: DWORD = 0 x00000020;
pub const NIIF_RESPECT_QUIET_TIME: DWORD = 0 x00000080;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct NOTIFYICONIDENTIFIER {
cbSize: DWORD,
hWnd: HWND,
uID: UINT,
guidItem: GUID,
}}
pub type PNOTIFYICONIDENTIFIER = *mut NOTIFYICONIDENTIFIER;
extern "system" {
pub fn Shell_NotifyIconA(
dwMessage: DWORD,
lpData: PNOTIFYICONDATAA,
) -> BOOL;
pub fn Shell_NotifyIconW(
dwMessage: DWORD,
lpData: PNOTIFYICONDATAW,
) -> BOOL;
pub fn Shell_NotifyIconGetRect(
identifier: *const NOTIFYICONIDENTIFIER,
iconLocation: *mut RECT,
) -> HRESULT;
}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHFILEINFOA {
hIcon: HICON,
iIcon: c_int,
dwAttributes: DWORD,
szDisplayName: [CHAR; MAX_PATH],
szTypeName: [CHAR; 80 ],
}}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHFILEINFOW {
hIcon: HICON,
iIcon: c_int,
dwAttributes: DWORD,
szDisplayName: [WCHAR; MAX_PATH],
szTypeName: [WCHAR; 80 ],
}}
pub const SHGFI_ICON: DWORD = 0 x000000100;
pub const SHGFI_DISPLAYNAME: DWORD = 0 x000000200;
pub const SHGFI_TYPENAME: DWORD = 0 x000000400;
pub const SHGFI_ATTRIBUTES: DWORD = 0 x000000800;
pub const SHGFI_ICONLOCATION: DWORD = 0 x000001000;
pub const SHGFI_EXETYPE: DWORD = 0 x000002000;
pub const SHGFI_SYSICONINDEX: DWORD = 0 x000004000;
pub const SHGFI_LINKOVERLAY: DWORD = 0 x000008000;
pub const SHGFI_SELECTED: DWORD = 0 x000010000;
pub const SHGFI_ATTR_SPECIFIED: DWORD = 0 x000020000;
pub const SHGFI_LARGEICON: DWORD = 0 x000000000;
pub const SHGFI_SMALLICON: DWORD = 0 x000000001;
pub const SHGFI_OPENICON: DWORD = 0 x000000002;
pub const SHGFI_SHELLICONSIZE: DWORD = 0 x000000004;
pub const SHGFI_PIDL: DWORD = 0 x000000008;
pub const SHGFI_USEFILEATTRIBUTES: DWORD = 0 x000000010;
pub const SHGFI_ADDOVERLAYS: DWORD = 0 x000000020;
pub const SHGFI_OVERLAYINDEX: DWORD = 0 x000000040;
extern "system" {
pub fn SHGetFileInfoA(
pszPath: LPCSTR,
dwFileAttributes: DWORD,
psfi: *mut SHFILEINFOA,
cbFileInfo: UINT,
uFlags: UINT,
) -> DWORD_PTR;
pub fn SHGetFileInfoW(
pszPath: LPCWSTR,
dwFileAttributes: DWORD,
psfi: *mut SHFILEINFOW,
cbFileInfo: UINT,
uFlags: UINT,
) -> DWORD_PTR;
}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct SHSTOCKICONINFO {
cbSize: DWORD,
hIcon: HICON,
iSysImageIndex: c_int,
iIcon: c_int,
szPath: [WCHAR; MAX_PATH],
}}
pub const SHGSI_ICONLOCATION: DWORD = 0 ;
pub const SHGSI_ICON: DWORD = SHGFI_ICON;
pub const SHGSI_SYSICONINDEX: DWORD = SHGFI_SYSICONINDEX;
pub const SHGSI_LINKOVERLAY: DWORD = SHGFI_LINKOVERLAY;
pub const SHGSI_SELECTED: DWORD = SHGFI_SELECTED;
pub const SHGSI_LARGEICON: DWORD = SHGFI_LARGEICON;
pub const SHGSI_SMALLICON: DWORD = SHGFI_SMALLICON;
pub const SHGSI_SHELLICONSIZE: DWORD = SHGFI_SHELLICONSIZE;
ENUM !{enum SHSTOCKICONID {
SIID_DOCNOASSOC = 0 ,
SIID_DOCASSOC = 1 ,
SIID_APPLICATION = 2 ,
SIID_FOLDER = 3 ,
SIID_FOLDEROPEN = 4 ,
SIID_DRIVE525 = 5 ,
SIID_DRIVE35 = 6 ,
SIID_DRIVEREMOVE = 7 ,
SIID_DRIVEFIXED = 8 ,
SIID_DRIVENET = 9 ,
SIID_DRIVENETDISABLED = 10 ,
SIID_DRIVECD = 11 ,
SIID_DRIVERAM = 12 ,
SIID_WORLD = 13 ,
SIID_SERVER = 15 ,
SIID_PRINTER = 16 ,
SIID_MYNETWORK = 17 ,
SIID_FIND = 22 ,
SIID_HELP = 23 ,
SIID_SHARE = 28 ,
SIID_LINK = 29 ,
SIID_SLOWFILE = 30 ,
SIID_RECYCLER = 31 ,
SIID_RECYCLERFULL = 32 ,
SIID_MEDIACDAUDIO = 40 ,
SIID_LOCK = 47 ,
SIID_AUTOLIST = 49 ,
SIID_PRINTERNET = 50 ,
SIID_SERVERSHARE = 51 ,
SIID_PRINTERFAX = 52 ,
SIID_PRINTERFAXNET = 53 ,
SIID_PRINTERFILE = 54 ,
SIID_STACK = 55 ,
SIID_MEDIASVCD = 56 ,
SIID_STUFFEDFOLDER = 57 ,
SIID_DRIVEUNKNOWN = 58 ,
SIID_DRIVEDVD = 59 ,
SIID_MEDIADVD = 60 ,
SIID_MEDIADVDRAM = 61 ,
SIID_MEDIADVDRW = 62 ,
SIID_MEDIADVDR = 63 ,
SIID_MEDIADVDROM = 64 ,
SIID_MEDIACDAUDIOPLUS = 65 ,
SIID_MEDIACDRW = 66 ,
SIID_MEDIACDR = 67 ,
SIID_MEDIACDBURN = 68 ,
SIID_MEDIABLANKCD = 69 ,
SIID_MEDIACDROM = 70 ,
SIID_AUDIOFILES = 71 ,
SIID_IMAGEFILES = 72 ,
SIID_VIDEOFILES = 73 ,
SIID_MIXEDFILES = 74 ,
SIID_FOLDERBACK = 75 ,
SIID_FOLDERFRONT = 76 ,
SIID_SHIELD = 77 ,
SIID_WARNING = 78 ,
SIID_INFO = 79 ,
SIID_ERROR = 80 ,
SIID_KEY = 81 ,
SIID_SOFTWARE = 82 ,
SIID_RENAME = 83 ,
SIID_DELETE = 84 ,
SIID_MEDIAAUDIODVD = 85 ,
SIID_MEDIAMOVIEDVD = 86 ,
SIID_MEDIAENHANCEDCD = 87 ,
SIID_MEDIAENHANCEDDVD = 88 ,
SIID_MEDIAHDDVD = 89 ,
SIID_MEDIABLURAY = 90 ,
SIID_MEDIAVCD = 91 ,
SIID_MEDIADVDPLUSR = 92 ,
SIID_MEDIADVDPLUSRW = 93 ,
SIID_DESKTOPPC = 94 ,
SIID_MOBILEPC = 95 ,
SIID_USERS = 96 ,
SIID_MEDIASMARTMEDIA = 97 ,
SIID_MEDIACOMPACTFLASH = 98 ,
SIID_DEVICECELLPHONE = 99 ,
SIID_DEVICECAMERA = 100 ,
SIID_DEVICEVIDEOCAMERA = 101 ,
SIID_DEVICEAUDIOPLAYER = 102 ,
SIID_NETWORKCONNECT = 103 ,
SIID_INTERNET = 104 ,
SIID_ZIPFILE = 105 ,
SIID_SETTINGS = 106 ,
SIID_DRIVEHDDVD = 132 ,
SIID_DRIVEBD = 133 ,
SIID_MEDIAHDDVDROM = 134 ,
SIID_MEDIAHDDVDR = 135 ,
SIID_MEDIAHDDVDRAM = 136 ,
SIID_MEDIABDROM = 137 ,
SIID_MEDIABDR = 138 ,
SIID_MEDIABDRE = 139 ,
SIID_CLUSTEREDDRIVE = 140 ,
SIID_MAX_ICONS = 181 ,
}}
pub const SIID_INVALID: SHSTOCKICONID = -1 i32 as u32;
extern "system" {
pub fn SHGetStockIconInfo(
siid: SHSTOCKICONID,
uFlags: UINT,
psii: *mut SHSTOCKICONINFO,
) -> HRESULT;
pub fn SHGetDiskFreeSpaceExA(
pszDirectoryName: LPCSTR,
pulFreeBytesAvailableToCaller: *mut ULARGE_INTEGER,
pulTotalNumberOfBytes: *mut ULARGE_INTEGER,
pulTotalNumberOfFreeBytes: *mut ULARGE_INTEGER,
) -> BOOL;
pub fn SHGetDiskFreeSpaceExW(
pszDirectoryName: LPCWSTR,
pulFreeBytesAvailableToCaller: *mut ULARGE_INTEGER,
pulTotalNumberOfBytes: *mut ULARGE_INTEGER,
pulTotalNumberOfFreeBytes: *mut ULARGE_INTEGER,
) -> BOOL;
pub fn SHGetNewLinkInfoA(
pszLinkTo: LPCSTR,
pszDir: LPCSTR,
pszName: LPSTR,
pfMustCopy: *mut BOOL,
uFlags: UINT,
) -> BOOL;
pub fn SHGetNewLinkInfoW(
pszLinkTo: LPCWSTR,
pszDir: LPCWSTR,
pszName: LPWSTR,
pfMustCopy: *mut BOOL,
uFlags: UINT,
) -> BOOL;
}
pub const SHGNLI_PIDL: DWORD = 0 x000000001;
pub const SHGNLI_PREFIXNAME: DWORD = 0 x000000002;
pub const SHGNLI_NOUNIQUE: DWORD = 0 x000000004;
pub const SHGNLI_NOLNK: DWORD = 0 x000000008;
pub const SHGNLI_NOLOCNAME: DWORD = 0 x000000010;
pub const SHGNLI_USEURLEXT: DWORD = 0 x000000020;
pub const PRINTACTION_OPEN: DWORD = 0 ;
pub const PRINTACTION_PROPERTIES: DWORD = 1 ;
pub const PRINTACTION_NETINSTALL: DWORD = 2 ;
pub const PRINTACTION_NETINSTALLLINK: DWORD = 3 ;
pub const PRINTACTION_TESTPAGE: DWORD = 4 ;
pub const PRINTACTION_OPENNETPRN: DWORD = 5 ;
pub const PRINTACTION_DOCUMENTDEFAULTS: DWORD = 6 ;
pub const PRINTACTION_SERVERPROPERTIES: DWORD = 7 ;
extern "system" {
pub fn SHInvokePrinterCommandA(
hwnd: HWND,
uAction: UINT,
lpBuf1: LPCSTR,
lpBuf2: LPCSTR,
fModal: BOOL,
) -> BOOL;
pub fn SHInvokePrinterCommandW(
hwnd: HWND,
uAction: UINT,
lpBuf1: LPCWSTR,
lpBuf2: LPCWSTR,
fModal: BOOL,
) -> BOOL;
}
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct OPEN_PRINTER_PROPS_INFOA {
dwSize: DWORD,
pszSheetName: LPSTR,
uSheetIndex: UINT,
dwFlags: DWORD,
bModal: BOOL,
}}
pub type POPEN_PRINTER_PROPS_INFOA = *mut OPEN_PRINTER_PROPS_INFOA;
STRUCT !{#[ cfg_attr(target_arch = "x86" , repr(packed))] struct OPEN_PRINTER_PROPS_INFOW {
dwSize: DWORD,
pszSheetName: LPWSTR,
uSheetIndex: UINT,
dwFlags: DWORD,
bModal: BOOL,
}}
pub type POPEN_PRINTER_PROPS_INFOW = *mut OPEN_PRINTER_PROPS_INFOW;
pub const PRINT_PROP_FORCE_NAME: DWORD = 0 x01;
extern "system" {
pub fn SHLoadNonloadedIconOverlayIdentifiers() -> HRESULT;
pub fn SHIsFileAvailableOffline(
pwszPath: PCWSTR,
pdwStatus: *mut DWORD,
) -> HRESULT;
}
pub const OFFLINE_STATUS_LOCAL: DWORD = 0 x0001;
pub const OFFLINE_STATUS_REMOTE: DWORD = 0 x0002;
pub const OFFLINE_STATUS_INCOMPLETE: DWORD = 0 x0004;
extern "system" {
pub fn SHSetLocalizedName(
pszPath: PCWSTR,
pszResModule: PCWSTR,
idsRes: c_int,
) -> HRESULT;
pub fn SHRemoveLocalizedName(
pszPath: PCWSTR,
) -> HRESULT;
pub fn SHGetLocalizedName(
pszPath: PCWSTR,
pszResModule: PWSTR,
cch: UINT,
pidsRes: *mut c_int,
) -> HRESULT;
}
extern "C" {
pub fn ShellMessageBoxA(
hAppInst: HINSTANCE,
hWnd: HWND,
lpcText: LPCSTR,
lpcTitle: LPCSTR,
fuStyle: UINT,
...
) -> c_int;
pub fn ShellMessageBoxW(
hAppInst: HINSTANCE,
hWnd: HWND,
lpcText: LPCWSTR,
lpcTitle: LPCWSTR,
fuStyle: UINT,
...
) -> c_int;
}
extern "system" {
pub fn IsLFNDriveA(
pszPath: LPCSTR,
) -> BOOL;
pub fn IsLFNDriveW(
pszPath: LPCWSTR,
) -> BOOL;
pub fn SHEnumerateUnreadMailAccountsA(
hKeyUser: HKEY,
dwIndex: DWORD,
pszMailAddress: LPSTR,
cchMailAddress: c_int,
) -> HRESULT;
pub fn SHEnumerateUnreadMailAccountsW(
hKeyUser: HKEY,
dwIndex: DWORD,
pszMailAddress: LPWSTR,
cchMailAddress: c_int,
) -> HRESULT;
pub fn SHGetUnreadMailCountA(
hKeyUser: HKEY,
pszMailAddress: LPCSTR,
pdwCount: *mut DWORD,
pFileTime: *mut FILETIME,
pszShellExecuteCommand: LPSTR,
cchShellExecuteCommand: c_int,
) -> HRESULT;
pub fn SHGetUnreadMailCountW(
hKeyUser: HKEY,
pszMailAddress: LPCWSTR,
pdwCount: *mut DWORD,
pFileTime: *mut FILETIME,
pszShellExecuteCommand: LPWSTR,
cchShellExecuteCommand: c_int,
) -> HRESULT;
pub fn SHSetUnreadMailCountA(
pszMailAddress: LPCSTR,
dwCount: DWORD,
pszShellExecuteCommand: LPCSTR,
) -> HRESULT;
pub fn SHSetUnreadMailCountW(
pszMailAddress: LPCWSTR,
dwCount: DWORD,
pszShellExecuteCommand: LPCWSTR,
) -> HRESULT;
pub fn SHTestTokenMembership(
hToken: HANDLE,
ulRID: ULONG,
) -> BOOL;
pub fn SHGetImageList(
iImageList: c_int,
riid: REFIID,
ppvObj: *mut *mut c_void,
) -> HRESULT;
}
pub const SHIL_LARGE: DWORD = 0 ;
pub const SHIL_SMALL: DWORD = 1 ;
pub const SHIL_EXTRALARGE: DWORD = 2 ;
pub const SHIL_SYSSMALL: DWORD = 3 ;
pub const SHIL_JUMBO: DWORD = 4 ;
pub const SHIL_LAST: DWORD = SHIL_JUMBO;
FN !{stdcall PFNCANSHAREFOLDERW(
pszPath: PCWSTR,
) -> HRESULT}
FN !{stdcall PFNSHOWSHAREFOLDERUIW(
hwndParent: HWND,
pszPath: PCWSTR,
) -> HRESULT}
pub const WC_NETADDRESS: &'static str = "msctls_netaddress";
extern "system" {
pub fn InitNetworkAddressControl() -> BOOL;
}
// STRUCT!{struct NC_ADDRESS {
// pAddrInfo: *mut NET_ADDRESS_INFO,
// PortNumber: USHORT,
// PrefixLength: BYTE,
// }}
// pub type PNC_ADDRESS = *mut NC_ADDRESS;
extern "system" {
pub fn SHGetDriveMedia(
pszDrive: PCWSTR,
pdwMediaContent: *mut DWORD,
) -> HRESULT;
}
Messung V0.5 in Prozent C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland