//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//--------------------------------------------------------------------------

cpp_quote("#ifndef _SHAPPMGR_H_")
cpp_quote("#define _SHAPPMGR_H_")


//
// shappmgr.idl : IDL source for shappmgr.h
//
import "oaidl.idl";
import "ocidl.idl";
import "appmgmt.h";

//
// IShellApp interface
//
[
    uuid(A3E14960-935F-11D1-B8B8-006008059382),     // IID_IShellApp
    object
]
interface IShellApp : IUnknown
{
    typedef enum _tagAppInfoFlags {
        AIM_DISPLAYNAME           = 0x00000001,
        AIM_VERSION               = 0x00000002,
        AIM_PUBLISHER             = 0x00000004,
        AIM_PRODUCTID             = 0x00000008,
        AIM_REGISTEREDOWNER       = 0x00000010,
        AIM_REGISTEREDCOMPANY     = 0x00000020,
        AIM_LANGUAGE              = 0x00000040,
        AIM_SUPPORTURL            = 0x00000080,
        AIM_SUPPORTTELEPHONE      = 0x00000100,
        AIM_HELPLINK              = 0x00000200,
        AIM_INSTALLLOCATION       = 0x00000400,
        AIM_INSTALLSOURCE         = 0x00000800,
        AIM_INSTALLDATE           = 0x00001000,
//        AIM_REQUIREDBYPOLICY      = 0x00002000,  Obsolete. Do not reuse.
        AIM_CONTACT               = 0x00004000,
        AIM_COMMENTS              = 0x00008000,
        AIM_IMAGE                 = 0x00020000,
        AIM_READMEURL             = 0x00040000,
        AIM_UPDATEINFOURL         = 0x00080000
    } APPINFODATAFLAGS;

    typedef struct _AppInfoData {
        DWORD cbSize;
        DWORD dwMask;                // APPINFODATAFLAGS, IN/OUT
        LPWSTR pszDisplayName;
        LPWSTR pszVersion;
        LPWSTR pszPublisher;
        LPWSTR pszProductID;
        LPWSTR pszRegisteredOwner;
        LPWSTR pszRegisteredCompany;
        LPWSTR pszLanguage;
        LPWSTR pszSupportUrl;
        LPWSTR pszSupportTelephone;
        LPWSTR pszHelpLink;
        LPWSTR pszInstallLocation;
        LPWSTR pszInstallSource;
        LPWSTR pszInstallDate;
        LPWSTR pszContact;
        LPWSTR pszComments;
        LPWSTR pszImage;
        LPWSTR pszReadmeUrl;
        LPWSTR pszUpdateInfoUrl;
    } APPINFODATA, *PAPPINFODATA;

    HRESULT GetAppInfo([in, out] PAPPINFODATA pai);

    typedef enum _tagAppActionFlags {
        APPACTION_INSTALL      = 0x00000001,
        APPACTION_UNINSTALL    = 0x00000002,
        APPACTION_MODIFY       = 0x00000004,
        APPACTION_REPAIR       = 0x00000008,
        APPACTION_UPGRADE      = 0x00000010,
        APPACTION_CANGETSIZE   = 0x00000020,
        APPACTION_MODIFYREMOVE = 0x00000080,
        APPACTION_ADDLATER     = 0x00000100,
        APPACTION_UNSCHEDULE   = 0x00000200
    } APPACTIONFLAGS;

    HRESULT GetPossibleActions([out] DWORD * pdwActions);
    //
    // Synchronously obtains the slow info for the app. This method call
    // can be very slow.
    //
    typedef struct _tagSlowAppInfo {
        ULONGLONG ullSize;
        FILETIME  ftLastUsed;
        int       iTimesUsed;
        LPWSTR    pszImage;
    } SLOWAPPINFO, *PSLOWAPPINFO;

    HRESULT GetSlowAppInfo([in] PSLOWAPPINFO psaid);
    //
    // Obtain the cached slow info for the app, this will be fast.
    //
    HRESULT GetCachedSlowAppInfo([in] PSLOWAPPINFO psaid);
    //
    // Returns S_OK if installed S_FALSE if not installed
    //
    HRESULT IsInstalled(void);
};


//
// IPublishedApp interface
//
[
    uuid(1BC752E0-9046-11D1-B8B3-006008059382),     // IID_IPublishedApp
    object
]
interface IPublishedApp : IShellApp
{
    typedef enum _tagPublishedAppInfoFlags {
        PAI_SOURCE        = 0x00000001,
        PAI_ASSIGNEDTIME  = 0x00000002,
        PAI_PUBLISHEDTIME = 0x00000004,
        PAI_SCHEDULEDTIME = 0x00000008,
        PAI_EXPIRETIME    = 0x00000010
    } PUBAPPINFOFLAGS;

    typedef struct _PubAppInfo {
        DWORD cbSize;
        DWORD dwMask;              // PUBAPPINFOFLAGS, IN/OUT
        LPWSTR pszSource;
        SYSTEMTIME  stAssigned;
        SYSTEMTIME  stPublished;
        SYSTEMTIME  stScheduled;
        SYSTEMTIME  stExpire;
    } PUBAPPINFO, *PPUBAPPINFO;

    HRESULT Install([in]LPSYSTEMTIME pstInstall);
    HRESULT GetPublishedAppInfo([in, out] PPUBAPPINFO ppai);
    HRESULT Unschedule(void);
};


//
// IEnumPublishedApps interface
//
[
    uuid(0B124F8C-91F0-11D1-B8B5-006008059382),     // IID_IEnumPublishedApps
    object
]
interface IEnumPublishedApps : IUnknown
{

    HRESULT Next([out] IPublishedApp** pia);
    HRESULT Reset(void);
};


//
// IAppPublisher interface
//
[
    uuid(07250A10-9CF9-11D1-9076-006008059382),     // IID_IAppPublisher
    object
]
interface IAppPublisher : IUnknown
{
    HRESULT GetNumberOfCategories(DWORD * pdwCat);
    HRESULT GetCategories(APPCATEGORYINFOLIST * pAppCategoryList);
    HRESULT GetNumberOfApps(DWORD * pdwApps);
    HRESULT EnumApps(GUID * pAppCategoryId, IEnumPublishedApps ** ppepa);
}

cpp_quote("#endif // _SHAPPMGR_H_")


