172 lines
5.4 KiB
C
172 lines
5.4 KiB
C
#ifndef pack2_h__
|
|
#define pack2_h__
|
|
|
|
|
|
#define INC_OLE2 // Prevent windows.h from pulling in OLE 1
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
#include <stdlib.h>
|
|
#include <shlobj.h> // ;Internal
|
|
#include <shellapi.h> // ;Internal
|
|
#include <shlwapi.h>
|
|
#include <shlwapip.h> // ;Internal
|
|
#include <ole2.h>
|
|
|
|
|
|
#include <ole2ver.h>
|
|
// #include <crtfree.h> // don't use CRT libs
|
|
#include <ccstock.h>
|
|
// #include <shsemip.h> // in ccshell\inc
|
|
// #include <shellp.h> // in ccshell\inc
|
|
// #include <debug.h> // in ccshell\inc
|
|
// #include <shguidp.h> // in ccshell\inc
|
|
|
|
#define STRSAFE_NO_DEPRECATE
|
|
#include <strsafe.h>
|
|
|
|
#include "packutil.h"
|
|
#include "packguid.h"
|
|
#include "ids.h"
|
|
|
|
HRESULT CPackage_CreateInstance(IUnknown ** ppunk);
|
|
|
|
//////////////////////////////////
|
|
// External Variables
|
|
//
|
|
#define USE_RESOURCE_DLL 1
|
|
|
|
extern LONG g_cRefThisDll; // per-instance
|
|
extern HINSTANCE g_hinst;
|
|
extern HINSTANCE g_hinstResDLL;
|
|
extern UINT g_cfFileContents;
|
|
extern UINT g_cfFileDescriptor;
|
|
extern UINT g_cfObjectDescriptor;
|
|
extern UINT g_cfEmbedSource;
|
|
extern UINT g_cfFileNameW;
|
|
extern INT g_cxIcon;
|
|
extern INT g_cyIcon;
|
|
extern INT g_cxArrange;
|
|
extern INT g_cyArrange;
|
|
extern HFONT g_hfontTitle;
|
|
|
|
|
|
//////////////////////////////////
|
|
// Global Constants
|
|
//
|
|
#define HIMETRIC_PER_INCH 2540 // Number of HIMETRIC units per inch
|
|
#define DEF_LOGPIXELSX 96 // Default values for pixels per
|
|
#define DEF_LOGPIXELSY 96 // logical inch
|
|
#define CBCMDLINKMAX 500 // num chars in cmdline package
|
|
#define FILE_SHARE_READWRITE (FILE_SHARE_READ | FILE_SHARE_WRITE)
|
|
#define OLEIVERB_EDITPACKAGE (OLEIVERB_PRIMARY+1)
|
|
#define OLEIVERB_FIRST_CONTEXT (OLEIVERB_PRIMARY+2)
|
|
#define OLEIVERB_LAST_CONTEXT (OLEIVERB_PRIMARY+0xFFFF)
|
|
#define PACKWIZ_NUM_PAGES 2 // number of pages in our wizard
|
|
|
|
|
|
//////////////////////////////////
|
|
// Clipboard Formats
|
|
//
|
|
#define CF_FILECONTENTS g_cfFileContents
|
|
#define CF_FILEDESCRIPTOR g_cfFileDescriptor
|
|
#define CF_OBJECTDESCRIPTOR g_cfObjectDescriptor
|
|
#define CF_EMBEDSOURCE g_cfEmbedSource
|
|
#define CF_FILENAMEW g_cfFileNameW
|
|
#define CFSTR_EMBEDSOURCE TEXT("Embed Source")
|
|
#define CFSTR_OBJECTDESCRIPTOR TEXT("Object Descriptor")
|
|
|
|
|
|
//////////////////////////////////
|
|
// String constants
|
|
//
|
|
#define SZUSERTYPE L"OLE Package"
|
|
#define SZCONTENTS L"\001Ole10Native"
|
|
#define SZAPPNAME TEXT("Object Packager")
|
|
|
|
//////////////////////////////////
|
|
// Old packager junk...
|
|
//
|
|
// NOTE: This enumeration is used to determine what kind of information
|
|
// is stored in a packager object. Currently, the new packager on supports
|
|
// ICON and PEMBED. We will probably want to implement CMDLINK and PICTURE
|
|
// to remain back compatible with the old packager.
|
|
//
|
|
typedef enum
|
|
{
|
|
NOTHING,
|
|
CMDLINK,
|
|
ICON,
|
|
PEMBED,
|
|
PICTURE,
|
|
PACKAGE
|
|
} PANETYPE;
|
|
|
|
//////////////////////////////////
|
|
// Embedded File structure
|
|
//
|
|
// NOTE: This is similar to the structure used by the old packager to store
|
|
// information about the embedded file, however it is slightly different.
|
|
// Most notably, I use a FILEDESCRIPTOR structure to hold onto the filename
|
|
// and filesize so this information can be easily transferred in a GetData call
|
|
// Also, I've deleted some uncessary fields that the old packager used to
|
|
// deal with OLE 1 ways of dealing with things.
|
|
|
|
typedef struct _EMBED // embed
|
|
{
|
|
FILEDESCRIPTOR fd; // file descriptor of embedded file
|
|
LPTSTR pszTempName; // temp. file name used when shellexec'ing
|
|
HANDLE hTask; // handle to task on shellexec'ed objects
|
|
LPOLEOBJECT poo; // oleobject interface on running contents
|
|
BOOL fIsOleFile; // TRUE if OLE can activate this type of file
|
|
} EMBED, *LPEMBED;
|
|
|
|
|
|
//////////////////////////////////
|
|
// Command line structure
|
|
//
|
|
// NOTE: This is the structure the old packager used when implementing
|
|
// the command line packages. It will be best to use this structure for
|
|
// the new packager for ease of use in reading and writing old packager
|
|
// formats.
|
|
//
|
|
typedef struct _CML // cml
|
|
{
|
|
BOOL fCmdIsLink;
|
|
TCHAR szCommandLine[CBCMDLINKMAX];
|
|
} CML, *LPCML;
|
|
|
|
////////////////////////////////
|
|
// PackageInfo Structure
|
|
//
|
|
// NOTE: This structure is used by the Create New Package Wizard and the
|
|
// Edit Package dialogs. We use it to hold onto package information, so that
|
|
// the CPackage Object can initialize/reinitialize itself after one of these
|
|
// calls.
|
|
//
|
|
typedef struct _packageInfo
|
|
{
|
|
TCHAR szLabel[MAX_PATH];
|
|
TCHAR szFilename[MAX_PATH];
|
|
TCHAR szIconPath[MAX_PATH];
|
|
int iIcon; // must be an int for PickIconDlg
|
|
BOOL bUseCommandLine;
|
|
} PACKAGER_INFO, *LPPACKAGER_INFO;
|
|
|
|
|
|
////////////////////////////////
|
|
// PersistStorage enumeration
|
|
//
|
|
typedef enum
|
|
{
|
|
PSSTATE_UNINIT = 0, //Uninitialized
|
|
PSSTATE_SCRIBBLE, //Scribble
|
|
PSSTATE_ZOMBIE, //No scribble
|
|
PSSTATE_HANDSOFF //Hand-off
|
|
} PSSTATE;
|
|
|
|
#endif
|
|
|
|
#include "debug.h"
|
|
|
|
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
|