! Copyright (C) 2006, 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.data alien.strings
-alien.syntax classes.struct combinators io.backend io.files
-io.pathnames kernel math sequences specialized-arrays
-ui.backend.windows windows windows.com windows.com.syntax
-windows.errors windows.kernel32 windows.ole32 windows.types
-windows.user32 ;
-SPECIALIZED-ARRAY: ushort
+USING: alien alien.c-types alien.data alien.strings alien.syntax
+classes.struct io.backend kernel windows windows.com
+windows.com.syntax windows.kernel32 windows.ole32 windows.types ;
IN: windows.shell32
CONSTANT: CSIDL_DESKTOP 0x00
CONSTANT: CSIDL_FLAG_CREATE 0x8000
CONSTANT: CSIDL_FLAG_MASK 0xff00
-
-CONSTANT: ERROR_FILE_NOT_FOUND 2
-
CONSTANT: SHGFP_TYPE_CURRENT 0
CONSTANT: SHGFP_TYPE_DEFAULT 1
LIBRARY: shell32
-FUNCTION: HRESULT SHGetFolderPathW ( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPTSTR pszPath ) ;
+FUNCTION: HRESULT SHGetFolderPathW ( HWND hwndOwner,
+ int nFolder,
+ HANDLE hToken,
+ DWORD dwReserved,
+ LPTSTR pszPath )
ALIAS: SHGetFolderPath SHGetFolderPathW
-FUNCTION: HINSTANCE ShellExecuteW ( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ) ;
+FUNCTION: HINSTANCE ShellExecuteW ( HWND hwnd,
+ LPCTSTR lpOperation,
+ LPCTSTR lpFile,
+ LPCTSTR lpParameters,
+ LPCTSTR lpDirectory, INT nShowCmd )
ALIAS: ShellExecute ShellExecuteW
CONSTANT: SHGFI_ICON 0x000000100
{ szDisplayName TCHAR[MAX_PATH] }
{ szTypeName TCHAR[80] } ;
-FUNCTION: DWORD_PTR SHGetFileInfoW (
- LPCTSTR pszPath,
- DWORD dwFileAttributes,
- SHFILEINFO *psfi,
- UINT cbFileInfo,
- UINT uFlags
-) ;
+FUNCTION: DWORD_PTR SHGetFileInfoW ( LPCTSTR pszPath,
+ DWORD dwFileAttributes,
+ SHFILEINFO *psfi,
+ UINT cbFileInfo,
+ UINT uFlags )
: shell32-file-info ( path -- err struct )
normalize-path
INSTANCE: +win32-vxd-executable+ windows-executable ! le
INSTANCE: +win32-os2-executable+ windows-executable ! ne
INSTANCE: +win32-nt-executable+ windows-executable ! pe
-
-: file-executable-type ( path -- executable/f )
- normalize-path
- 0
- f
- ! hi is zero means old style executable
- 0 SHGFI_EXETYPE SHGetFileInfoW >lo-hi first2 zero? [
- {
- { 0x5A4D [ +dos-executable+ ] }
- { 0x4550 [ +win32-console-executable+ ] }
- [ drop f ]
- } case
- ] [
- {
- { 0x454C [ +win32-vxd-executable+ ] }
- { 0x454E [ +win32-os2-executable+ ] }
- { 0x4550 [ +win32-nt-executable+ ] }
- [ drop f ]
- } case
- ] if ;
: shell32-directory ( n -- str )
f swap f SHGFP_TYPE_DEFAULT
: program-files-common-x86 ( -- str )
CSIDL_PROGRAM_FILES_COMMONX86 shell32-directory ;
-
+
CONSTANT: SHCONTF_FOLDERS 32
CONSTANT: SHCONTF_NONFOLDERS 64
{ fWide BOOL } ;
TYPEDEF: DROPFILES* LPDROPFILES
TYPEDEF: DROPFILES* LPCDROPFILES
-TYPEDEF: HANDLE HDROP
STRUCT: SHITEMID
{ cb USHORT }
HRESULT Clone ( IEnumIDList** ppenum ) ;
COM-INTERFACE: IShellFolder IUnknown {000214E6-0000-0000-C000-000000000046}
- HRESULT ParseDisplayName ( HWND hwndOwner, void* pbcReserved, LPOLESTR lpszDisplayName, ULONG* pchEaten, LPITEMIDLIST* ppidl, ULONG* pdwAttributes )
- HRESULT EnumObjects ( HWND hwndOwner, SHCONTF grfFlags, IEnumIDList** ppenumIDList )
- HRESULT BindToObject ( LPCITEMIDLIST pidl, void* pbcReserved, REFGUID riid, void** ppvOut )
- HRESULT BindToStorage ( LPCITEMIDLIST pidl, void* pbcReserved, REFGUID riid, void** ppvObj )
- HRESULT CompareIDs ( LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2 )
- HRESULT CreateViewObject ( HWND hwndOwner, REFGUID riid, void** ppvOut )
- HRESULT GetAttributesOf ( UINT cidl, LPCITEMIDLIST* apidl, SFGAOF* rgfInOut )
- HRESULT GetUIObjectOf ( HWND hwndOwner, UINT cidl, LPCITEMIDLIST* apidl, REFGUID riid, UINT* prgfInOut, void** ppvOut )
- HRESULT GetDisplayNameOf ( LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET* lpName )
- HRESULT SetNameOf ( HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST* ppidlOut ) ;
-
-FUNCTION: HRESULT SHGetDesktopFolder ( IShellFolder** ppshf ) ;
-
-FUNCTION: UINT DragQueryFileW ( HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch ) ;
+ HRESULT ParseDisplayName ( HWND hwndOwner,
+ void* pbcReserved,
+ LPOLESTR lpszDisplayName,
+ ULONG* pchEaten,
+ LPITEMIDLIST* ppidl,
+ ULONG* pdwAttributes )
+ HRESULT EnumObjects ( HWND hwndOwner,
+ SHCONTF grfFlags,
+ IEnumIDList** ppenumIDList )
+ HRESULT BindToObject ( LPCITEMIDLIST pidl,
+ void* pbcReserved,
+ REFGUID riid,
+ void** ppvOut )
+ HRESULT BindToStorage ( LPCITEMIDLIST pidl,
+ void* pbcReserved,
+ REFGUID riid,
+ void** ppvObj )
+ HRESULT CompareIDs ( LPARAM lParam,
+ LPCITEMIDLIST pidl1,
+ LPCITEMIDLIST pidl2 )
+ HRESULT CreateViewObject ( HWND hwndOwner,
+ REFGUID riid,
+ void** ppvOut )
+ HRESULT GetAttributesOf ( UINT cidl,
+ LPCITEMIDLIST* apidl,
+ SFGAOF* rgfInOut )
+ HRESULT GetUIObjectOf ( HWND hwndOwner,
+ UINT cidl,
+ LPCITEMIDLIST* apidl,
+ REFGUID riid,
+ UINT* prgfInOut,
+ void** ppvOut )
+ HRESULT GetDisplayNameOf ( LPCITEMIDLIST pidl,
+ SHGDNF uFlags,
+ STRRET* lpName )
+ HRESULT SetNameOf ( HWND hwnd,
+ LPCITEMIDLIST pidl,
+ LPCOLESTR lpszName,
+ SHGDNF uFlags,
+ LPITEMIDLIST* ppidlOut ) ;
+
+FUNCTION: HRESULT SHGetDesktopFolder ( IShellFolder** ppshf )
+
+FUNCTION: void DragAcceptFiles ( HWND hWnd, BOOL fAccept )
+
+FUNCTION: UINT DragQueryFileW ( HDROP hDrop,
+ UINT iFile,
+ LPWSTR lpszFile,
+ UINT cch )
ALIAS: DragQueryFile DragQueryFileW
-FUNCTION: BOOL IsUserAnAdmin ( ) ;
+FUNCTION: BOOL DragQueryPoint ( HDROP hDrop, POINT* lppt )
+
+FUNCTION: void DragFinish ( HDROP hDrop )
+
+FUNCTION: BOOL IsUserAnAdmin ( )