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

Windows Kernel

Development Platform:

Visual C++

  1. // CCtl.h : Declaration of the CARPCtl
  2. #ifndef __CARPCTL_H_
  3. #define __CARPCTL_H_
  4. // Globals
  5.     extern HINSTANCE g_hInst;
  6. // CAppData
  7. class CAppData
  8. {
  9. private:
  10.     IInstalledApp* m_pAppIns;
  11.     APPINFODATA m_ai;
  12.     SLOWAPPINFO m_aiSlow;
  13.     
  14. public:
  15.     CAppData(IInstalledApp* pas, APPINFODATA* pai)
  16.     {
  17.         m_pAppIns = pas;
  18.         CopyMemory(&m_ai, pai, sizeof m_ai);
  19.         ZeroMemory(&m_aiSlow, sizeof m_aiSlow);
  20.     }
  21.     ~CAppData()
  22.     {
  23.         m_pAppIns->Release();
  24.     }
  25.     APPINFODATA* GetData() { return &m_ai; }
  26.     HRESULT ReadSlowData()
  27.     {
  28.         if (m_pAppIns)
  29.             return m_pAppIns->GetSlowAppInfo(&m_aiSlow);
  30.         else
  31.             return E_FAIL;
  32.     }
  33.     SLOWAPPINFO* GetSlowData() { return &m_aiSlow; }
  34. };
  35. // CARPCtl
  36. class ATL_NO_VTABLE CARPCtl : 
  37. public CComObjectRootEx<CComSingleThreadModel>,
  38. public CComCoClass<CARPCtl, &CLSID_CARPCtl>,
  39. public IObjectWithSiteImpl<CARPCtl>,
  40. public IConnectionPointContainerImpl<CARPCtl>,
  41.     public IObjectSafetyImpl<CARPCtl>,
  42. public IDispatchImpl<IARPCtl, &IID_IARPCtl, &LIBID_ARPCTLLib>,
  43.     public CProxy_ARPCtlEvents<CARPCtl>,
  44.     public IProvideClassInfo2Impl<&CLSID_CARPCtl, &DIID__ARPCtlEvents, &LIBID_ARPCTLLib>
  45. {
  46. private:
  47.     IShellAppManager* m_pam;
  48.     DWORD m_dwCurrentIndex;
  49.     DWORD m_dwcItems;
  50.     HDPA m_hdpaList;
  51.     BOOL m_fKillWorker;
  52.     HANDLE m_hthreadWorker;
  53.     HWND m_hwndWorker;
  54.     void _FreeAppData();
  55.     void _KillWorkerThread();
  56.     HRESULT _CreateWorkerThread();
  57.     DWORD _ThreadStartProc();
  58.     static DWORD CALLBACK _ThreadStartProcWrapper(LPVOID lpParam);
  59.     LRESULT _WorkerWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  60.     static LRESULT CALLBACK _WorkerWndProcWrapper(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  61. public:
  62. CARPCtl();
  63.     void FinalRelease();
  64. DECLARE_REGISTRY_RESOURCEID(IDR_CARPCTL)
  65. DECLARE_NOT_AGGREGATABLE(CARPCtl)
  66. BEGIN_COM_MAP(CARPCtl)
  67. COM_INTERFACE_ENTRY(IARPCtl)
  68. COM_INTERFACE_ENTRY(IDispatch)
  69. COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  70. COM_INTERFACE_ENTRY_IMPL(IObjectWithSite)
  71.     COM_INTERFACE_ENTRY_IMPL(IObjectSafety)
  72.     COM_INTERFACE_ENTRY(IProvideClassInfo)
  73.     COM_INTERFACE_ENTRY(IProvideClassInfo2)
  74.     COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  75. END_COM_MAP()
  76. BEGIN_CONNECTION_POINT_MAP(CARPCtl)
  77.     CONNECTION_POINT_ENTRY(DIID__ARPCtlEvents)
  78. END_CONNECTION_POINT_MAP()
  79. // IARPCtl
  80. public:
  81. STDMETHOD(get_ItemCount)(/*[out, retval]*/ long *pVal);
  82. STDMETHOD(InitData)(DWORD dwSortOrder);
  83. STDMETHOD(MoveNext)(BOOL* pbool);
  84. STDMETHOD(MoveFirst)(BOOL* pbool);
  85. STDMETHOD(MoveTo)(DWORD dwRecNum, BOOL* pbool);
  86. STDMETHOD(get_DisplayName)(/*[out, retval]*/ BSTR *pVal);
  87. STDMETHOD(get_Version)(/*[out, retval]*/ BSTR *pVal);
  88. STDMETHOD(get_Publisher)(/*[out, retval]*/ BSTR *pVal);
  89. STDMETHOD(get_ProductID)(/*[out, retval]*/ BSTR *pVal);
  90. STDMETHOD(get_RegisteredOwner)(/*[out, retval]*/ BSTR *pVal);
  91. STDMETHOD(get_Language)(/*[out, retval]*/ BSTR *pVal);
  92. STDMETHOD(get_SupportUrl)(/*[out, retval]*/ BSTR *pVal);
  93. STDMETHOD(get_SupportTelephone)(/*[out, retval]*/ BSTR *pVal);
  94. STDMETHOD(get_HelpLink)(/*[out, retval]*/ BSTR *pVal);
  95. STDMETHOD(get_InstallLocation)(/*[out, retval]*/ BSTR *pVal);
  96. STDMETHOD(get_InstallSource)(/*[out, retval]*/ BSTR *pVal);
  97. STDMETHOD(get_InstallDate)(/*[out, retval]*/ BSTR *pVal);
  98. STDMETHOD(get_RequiredByPolicy)(/*[out, retval]*/ BSTR *pVal);
  99. STDMETHOD(get_Contact)(/*[out, retval]*/ BSTR *pVal);
  100. STDMETHOD(get_Size)(/*[out, retval]*/ BSTR *pVal);
  101. STDMETHOD(get_TimesUsed)(/*[out, retval]*/ BSTR *pVal);
  102. STDMETHOD(get_LastUsed)(/*[out, retval]*/ BSTR *pVal);
  103. };
  104. // Window messages from worker thread that cause actions on the main thread
  105. #define WORKERWIN_EXIT_WINDOW       (WM_USER + 0x0100)
  106. #define WORKERWIN_FIRE_ROW_READY    (WM_USER + 0x0101)  // wParam is row #
  107. // Helper prototypes
  108. STDAPI_(void) FileTimeToDateTimeString(LPFILETIME pft, LPTSTR pszBuf, UINT cchBuf);
  109. #endif //__CARPCTL_H_