deskstat.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 9k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef _DESKSTAT_H_
  2. #define _DESKSTAT_H_
  3. // BUGBUG: This is NOT a IE4COMPONENTA struct, it is a IE4COMPONENTT struct.
  4. // Note: This is the old COMPONENTA structure used in IE4. It is kept here for compatibility.
  5. typedef struct _tagIE4COMPONENTA
  6. {
  7.     DWORD   dwSize;
  8.     DWORD   dwID;
  9.     int     iComponentType;
  10.     BOOL    fChecked;
  11.     BOOL    fDirty;
  12.     BOOL    fNoScroll;
  13.     COMPPOS cpPos;
  14.     TCHAR   szFriendlyName[MAX_PATH];
  15.     TCHAR   szSource[INTERNET_MAX_URL_LENGTH];
  16.     TCHAR   szSubscribedURL[INTERNET_MAX_URL_LENGTH];
  17. } IE4COMPONENTA;
  18. typedef IE4COMPONENTA *LPIE4COMPONENTA;
  19. typedef const IE4COMPONENTA *LPCIE4COMPONENTA;
  20. // BUGBUG: This is NOT a COMPONENTA struct, it is a COMPONENTT struct.
  21. // Note: This is the new NT5 COMPONENT structure. The old component structure is kept at the 
  22. // begining of this struct and the new fields are added at the end. The dwSize field is used to 
  23. // distinguish between the old and new structures.
  24. //
  25. typedef struct _tagCOMPONENTA
  26. {
  27.     DWORD   dwSize;
  28.     DWORD   dwID;
  29.     int     iComponentType;
  30.     BOOL    fChecked;
  31.     BOOL    fDirty;
  32.     BOOL    fNoScroll;
  33.     COMPPOS cpPos;
  34.     TCHAR   szFriendlyName[MAX_PATH];
  35.     TCHAR   szSource[INTERNET_MAX_URL_LENGTH];
  36.     TCHAR   szSubscribedURL[INTERNET_MAX_URL_LENGTH];
  37.     // Add the new fields below this point. Everything above must exactly match the 
  38.     // old IE4COMPONENTA structure for compatibility.
  39.     DWORD           dwCurItemState;
  40.     COMPSTATEINFO   csiOriginal;
  41.     COMPSTATEINFO   csiRestored;
  42. } COMPONENTA;
  43. typedef COMPONENTA *LPCOMPONENTA;
  44. typedef const COMPONENTA *LPCCOMPONENTA;
  45. typedef struct _tagTAGENTRY
  46. {
  47.     LPCSTR pszTag;
  48.     BOOL fSkipPast;
  49. } TAGENTRY;
  50. #define c_wszNULL   (L"")
  51. class CActiveDesktop : public IActiveDesktop, IActiveDesktopP, IADesktopP2
  52. {
  53. public:
  54.     // *** IUnknown ***
  55.     virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj);
  56.     virtual STDMETHODIMP_(ULONG) AddRef(void);
  57.     virtual STDMETHODIMP_(ULONG) Release(void);
  58.     // *** IActiveDesktop ***
  59.     virtual STDMETHODIMP ApplyChanges(DWORD dwFlags);
  60.     virtual STDMETHODIMP GetWallpaper(LPWSTR pwszWallpaper, UINT cchWallpaper, DWORD dwReserved);
  61.     virtual STDMETHODIMP SetWallpaper(LPCWSTR pwszWallpaper, DWORD dwReserved);
  62.     virtual STDMETHODIMP GetWallpaperOptions(LPWALLPAPEROPT pwpo, DWORD dwReserved);
  63.     virtual STDMETHODIMP SetWallpaperOptions(LPCWALLPAPEROPT pwpo, DWORD dwReserved);
  64.     virtual STDMETHODIMP GetPattern(LPWSTR pwszPattern, UINT cchPattern, DWORD dwReserved);
  65.     virtual STDMETHODIMP SetPattern(LPCWSTR pszPattern, DWORD dwReserved);
  66.     virtual STDMETHODIMP GetDesktopItemOptions(LPCOMPONENTSOPT pco, DWORD dwReserved);
  67.     virtual STDMETHODIMP SetDesktopItemOptions(LPCCOMPONENTSOPT pco, DWORD dwReserved);
  68.     virtual STDMETHODIMP AddDesktopItem(LPCCOMPONENT pcomp, DWORD dwReserved);
  69.     virtual STDMETHODIMP AddDesktopItemWithUI(HWND hwnd, LPCOMPONENT pcomp, DWORD dwReserved);
  70.     virtual STDMETHODIMP ModifyDesktopItem(LPCCOMPONENT pcomp, DWORD dwFlags);
  71.     virtual STDMETHODIMP RemoveDesktopItem(LPCCOMPONENT pcomp, DWORD dwReserved);
  72.     virtual STDMETHODIMP GetDesktopItemCount(LPINT lpiCount, DWORD dwReserved);
  73.     virtual STDMETHODIMP GetDesktopItem(int nComponent, LPCOMPONENT pcomp, DWORD dwReserved);
  74.     virtual STDMETHODIMP GetDesktopItemByID(DWORD dwID, LPCOMPONENT pcomp, DWORD dwReserved);
  75.     virtual STDMETHODIMP GenerateDesktopItemHtml(LPCWSTR pwszFileName, LPCOMPONENT pcomp, DWORD dwReserved);
  76.     virtual STDMETHODIMP AddUrl(HWND hwnd, LPCWSTR pszSource, LPCOMPONENT pcomp, DWORD dwFlags);
  77.     virtual STDMETHODIMP GetDesktopItemBySource(LPCWSTR pszSource, LPCOMPONENT pcomp, DWORD dwReserved);
  78.     // *** IActiveDesktopP ***
  79.     virtual STDMETHODIMP SetSafeMode(DWORD dwFlags);
  80.     virtual STDMETHODIMP EnsureUpdateHTML(void);
  81.     virtual STDMETHODIMP SetScheme(LPCWSTR pwszSchemeName, DWORD dwFlags);
  82.     virtual STDMETHODIMP GetScheme(LPWSTR pwszSchemeName, LPDWORD lpdwcchBuffer, DWORD dwFlags);
  83.     // *** IADesktopP2 ***
  84.     virtual STDMETHODIMP ReReadWallpaper(void);
  85.     virtual STDMETHODIMP GetADObjectFlags(LPDWORD lpdwFlags, DWORD dwMask);
  86.     virtual STDMETHODIMP UpdateAllDesktopSubscriptions();
  87.     virtual STDMETHODIMP MakeDynamicChanges(IOleObject *pOleObj);
  88.  
  89.     //Some Ansi versions of the methods for Internal Use
  90.     BOOL AddComponentPrivate(COMPONENTA *pcomp, DWORD dwID);
  91.     BOOL UpdateComponentPrivate(int iIndex, COMPONENTA *pcomp);
  92.     BOOL RemoveComponentPrivate(int iIndex, COMPONENTA *pcomp);
  93.     BOOL GetComponentPrivate(int nComponent, COMPONENTA *pcomp);
  94.     CActiveDesktop();
  95. protected:
  96.     DWORD           _cRef;
  97.     DWORD           _dwNextID;
  98.     BOOL            _fDirty;
  99.     BOOL            _fWallpaperDirty;
  100.     BOOL            _fWallpaperChangedDuringInit;
  101.     BOOL            _fPatternDirty;
  102.     BOOL            _fSingleItem;
  103.     BOOL            _fInitialized;
  104.     BOOL            _fNeedBodyEnd;
  105.     HDSA            _hdsaComponent;
  106.     TCHAR           _szSelectedWallpaper[MAX_PATH];
  107.     TCHAR           _szBackupWallpaper[MAX_PATH];
  108.     FILETIME        _ftWallpaperFileTime;
  109.     TCHAR           _szSelectedPattern[MAX_PATH];
  110.     LPTSTR          _pszScheme;
  111.     WALLPAPEROPT    _wpo;
  112.     COMPONENTSOPT   _co;
  113.     HANDLE          _hFileHtml;
  114.     HFILE           _hfileHtmlBackground;
  115.     BOOL            _fNoDeskMovr;
  116.     BOOL            _fBackgroundHtml;
  117.     ~CActiveDesktop();
  118.     int  _FindComponentIndexByID(DWORD dwID);
  119.     int  _FindComponentBySource(LPTSTR lpszSource, COMPONENTA *pComp);
  120.     void _ReadComponent(HKEY hkey, LPCTSTR pszComp);
  121.     void _SortAndRationalize(void);
  122.     void _ReadComponents(BOOL fActiveDesktop);
  123.     void _ReadWallpaper(BOOL fActiveDesktop);
  124.     void _ReadPattern(void);
  125.     void _Initialize(void);
  126.     void _SaveComponent(HKEY hkey, int iIndex, COMPONENTA *pcomp);
  127.     void _SaveComponents(void);
  128.     void _SaveWallpaper(void);
  129.     void _SavePattern(DWORD dwFlags);
  130.     void _SaveSettings(DWORD dwFlags);
  131.     void _GenerateHtmlHeader(void);
  132.     void _GenerateHtmlPicture(COMPONENTA *pcomp);
  133.     void _GenerateHtmlDoc(COMPONENTA *pcomp);
  134.     void _GenerateHtmlSite(COMPONENTA *pcomp);
  135.     void _GenerateHtmlControl(COMPONENTA *pcomp);
  136.     void _GenerateHtmlComponent(COMPONENTA *pcomp);
  137.     void _GenerateHtmlFooter(void);
  138.     void _GenerateHtml(void);
  139.     void _WriteHtmlFromString(LPCTSTR psz);
  140.     void _WriteHtmlFromId(UINT uid);
  141.     void _WriteHtmlFromIdF(UINT uid, ...);
  142.     void _WriteHtmlFromFile(LPCTSTR pszContents);
  143.     void _WriteHtmlFromHfile(HFILE hfile, int iOffsetStart, int iOffsetEnd);
  144.     void _WriteResizeable(COMPONENTA *pcomp);
  145.     int _ScanTagEntries(HFILE hfile, int iOffsetStart, TAGENTRY *pte, int cte);
  146.     int _ScanForTag(HFILE hfile, int iOffsetStart, LPCSTR pszTagA);
  147.     HRESULT _CopyComponent(COMPONENTA *pCompDest, COMPONENTA *pCompSrc, DWORD dwFlags);
  148. private:
  149.     HRESULT _AddDTIWithUIPrivateA(HWND hwnd, LPCCOMPONENT pComp, DWORD dwFlags);
  150. };
  151. extern IActiveDesktop *g_pActiveDesk;
  152. int GetIntFromSubkey(HKEY hKey, LPCTSTR lpszValueName, int iDefault);
  153. int GetIntFromReg(HKEY hKey, LPCTSTR lpszSubkey, LPCTSTR lpszNameValue, int iDefault);
  154. BOOL GetStringFromReg(HKEY hkey, LPCTSTR lpszSubkey, LPCTSTR lpszValueName, LPCTSTR lpszDefault, LPTSTR lpszValue, DWORD cchSizeofValueBuff);
  155. STDAPI CActiveDesktop_InternalCreateInstance(LPUNKNOWN * ppunk, REFIID riid);
  156. void GetPerUserFileName(LPTSTR pszOutputFileName, DWORD dwSize, LPTSTR pszPartialFileName);
  157. STDAPI CDeskHtmlProp_RegUnReg(BOOL bReg);
  158. //Function to convert components in either direction.
  159. void ConvertCompStruct(COMPONENTA *pCompDest, COMPONENTA *pCompSrc, BOOL fPubToPriv);
  160. void SetStateInfo(COMPSTATEINFO *pCompStateInfo, COMPPOS *pCompPos, DWORD dwItemState);
  161. #define MultiCompToWideComp(MultiComp, WideComp)  ConvertCompStruct((COMPONENTA *)WideComp, MultiComp, FALSE)
  162. #define WideCompToMultiComp(WideComp, MultiComp)  ConvertCompStruct(MultiComp, (COMPONENTA *)WideComp, TRUE)
  163. #define COMPONENT_TOP_WINDOWLESS (COMPONENT_TOP / 2)
  164. #define IsWindowLessComponent(pcomp) (((pcomp)->iComponentType == COMP_TYPE_PICTURE) || ((pcomp)->iComponentType == COMP_TYPE_HTMLDOC))
  165. #define COMPONENT_DEFAULT_WIDTH   ((DWORD)-1)
  166. #define COMPONENT_DEFAULT_HEIGHT  ((DWORD)-1)
  167. #define DESKMOVR_FILENAME       TEXT("\Web\DeskMovr.htt")
  168. #define DESKTOPHTML_FILENAME    TEXT("\Microsoft\Internet Explorer\Desktop.htt")
  169. #define PATTERN_FILENAME        TEXT("\Microsoft\Internet Explorer\Pattern.bmp")
  170. #define SAVE_PATTERN_NAME       0x00000001
  171. #define GENERATE_PATTERN_FILE   0x00000002
  172. #endif // _DESKSTAT_H_