You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
379 lines
13 KiB
379 lines
13 KiB
// MsieCtl.h : Declaration of the CMsieCtrl ActiveX Control class.
|
|
|
|
#if !defined(AFX_MSIECTL_H__25959BFC_E700_11D2_A7AF_00C04F806200__INCLUDED_)
|
|
#define AFX_MSIECTL_H__25959BFC_E700_11D2_A7AF_00C04F806200__INCLUDED_
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include <wbemprov.h>
|
|
|
|
// MSInfo views for IE extension - must match values in Registry
|
|
|
|
#define MSIVIEW_BEGIN 1
|
|
#define MSIVIEW_SUMMARY 1
|
|
#define MSIVIEW_FILE_VERSIONS 2
|
|
#define MSIVIEW_CONNECTIVITY 3
|
|
#define MSIVIEW_CACHE 4
|
|
#define MSIVIEW_OBJECT_LIST 5
|
|
#define MSIVIEW_CONTENT 6
|
|
#define MSIVIEW_PERSONAL_CERTIFICATES 7
|
|
#define MSIVIEW_OTHER_PEOPLE_CERTIFICATES 8
|
|
#define MSIVIEW_PUBLISHERS 9
|
|
#define MSIVIEW_SECURITY 10
|
|
#define MSIVIEW_END 10
|
|
|
|
#define CONNECTIVITY_BASIC_LINES 51
|
|
|
|
#define ITEM_LEN 128
|
|
#define VALUE_LEN MAX_PATH
|
|
#define VERSION_LEN 20
|
|
#define DATE_LEN 64
|
|
#define SIZE_LEN 16
|
|
#define STATUS_LEN 40
|
|
|
|
typedef struct
|
|
{
|
|
UINT uiView;
|
|
TCHAR szItem[ITEM_LEN];
|
|
TCHAR szValue[VALUE_LEN];
|
|
} LIST_ITEM;
|
|
|
|
typedef struct
|
|
{
|
|
UINT uiView;
|
|
TCHAR szItem[ITEM_LEN];
|
|
TCHAR szValue[VALUE_LEN];
|
|
BOOL bBold;
|
|
} EDIT_ITEM;
|
|
|
|
typedef struct
|
|
{
|
|
UINT uiView;
|
|
TCHAR szFile[_MAX_FNAME];
|
|
TCHAR szVersion[VERSION_LEN];
|
|
TCHAR szSize[SIZE_LEN];
|
|
TCHAR szDate[DATE_LEN];
|
|
TCHAR szPath[VALUE_LEN];
|
|
TCHAR szCompany[VALUE_LEN];
|
|
DWORD dwSize;
|
|
DATE date;
|
|
} LIST_FILE_VERSION;
|
|
|
|
typedef struct
|
|
{
|
|
UINT uiView;
|
|
TCHAR szProgramFile[_MAX_FNAME];
|
|
TCHAR szStatus[STATUS_LEN];
|
|
TCHAR szCodeBase[MAX_PATH];
|
|
} LIST_OBJECT;
|
|
|
|
typedef struct
|
|
{
|
|
UINT uiView;
|
|
TCHAR szIssuedTo[_MAX_FNAME];
|
|
TCHAR szIssuedBy[_MAX_FNAME];
|
|
TCHAR szValidity[_MAX_FNAME];
|
|
TCHAR szSignatureAlgorithm[_MAX_FNAME];
|
|
} LIST_CERT;
|
|
|
|
typedef struct
|
|
{
|
|
UINT uiView;
|
|
TCHAR szName[_MAX_FNAME];
|
|
} LIST_NAME;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMsieCtrl : See MsieCtl.cpp for implementation.
|
|
|
|
class CMsieCtrl : public COleControl
|
|
{
|
|
DECLARE_DYNCREATE(CMsieCtrl)
|
|
|
|
// Constructor
|
|
public:
|
|
CMsieCtrl();
|
|
|
|
// Overrides
|
|
// ClassWizard generated virtual function overrides
|
|
//{{AFX_VIRTUAL(CMsieCtrl)
|
|
public:
|
|
virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
|
|
virtual void DoPropExchange(CPropExchange* pPX);
|
|
virtual void OnResetState();
|
|
virtual void Serialize(CArchive& ar);
|
|
protected:
|
|
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
|
|
//}}AFX_VIRTUAL
|
|
|
|
// Implementation
|
|
protected:
|
|
~CMsieCtrl();
|
|
|
|
DECLARE_OLECREATE_EX(CMsieCtrl) // Class factory and guid
|
|
DECLARE_OLETYPELIB(CMsieCtrl) // GetTypeInfo
|
|
DECLARE_PROPPAGEIDS(CMsieCtrl) // Property page IDs
|
|
DECLARE_OLECTLTYPE(CMsieCtrl) // Type name and misc status
|
|
|
|
// Message maps
|
|
//{{AFX_MSG(CMsieCtrl)
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
void OnBasicBtnClicked();
|
|
void OnAdvancedBtnClicked();
|
|
|
|
// Dispatch maps
|
|
//{{AFX_DISPATCH(CMsieCtrl)
|
|
long m_MSInfoView;
|
|
afx_msg void OnMSInfoViewChanged();
|
|
afx_msg void MSInfoRefresh(BOOL fForSave, long FAR* pCancel);
|
|
afx_msg BOOL MSInfoLoadFile(LPCTSTR szFileName);
|
|
afx_msg void MSInfoSelectAll();
|
|
afx_msg void MSInfoCopy();
|
|
afx_msg void MSInfoUpdateView();
|
|
afx_msg long MSInfoGetData(long dwMSInfoView, long FAR* pBuffer, long dwLength);
|
|
//}}AFX_DISPATCH
|
|
DECLARE_DISPATCH_MAP()
|
|
|
|
// Interface maps
|
|
|
|
DECLARE_INTERFACE_MAP()
|
|
|
|
// IWbemProviderInit
|
|
BEGIN_INTERFACE_PART(WbemProviderInit, IWbemProviderInit)
|
|
STDMETHOD(Initialize)(
|
|
/* [in] */ LPWSTR pszUser,
|
|
/* [in] */ LONG lFlags,
|
|
/* [in] */ LPWSTR pszNamespace,
|
|
/* [in] */ LPWSTR pszLocale,
|
|
/* [in] */ IWbemServices *pNamespace,
|
|
/* [in] */ IWbemContext *pCtx,
|
|
/* [in] */ IWbemProviderInitSink *pInitSink);
|
|
STDMETHOD(GetByPath)(BSTR Path, IWbemClassObject FAR* FAR* pObj, IWbemContext *pCtx) {return WBEM_E_NOT_SUPPORTED;};
|
|
END_INTERFACE_PART(WbemProviderInit)
|
|
|
|
//IWbemServices
|
|
BEGIN_INTERFACE_PART(WbemServices, IWbemServices)
|
|
STDMETHOD(OpenNamespace)(
|
|
/* [in] */ const BSTR Namespace,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemServices __RPC_FAR *__RPC_FAR *ppWorkingNamespace,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppResult) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(CancelAsyncCall)(
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pSink) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(QueryObjectSink)(
|
|
/* [in] */ long lFlags,
|
|
/* [out] */ IWbemObjectSink __RPC_FAR *__RPC_FAR *ppResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(GetObject)(
|
|
/* [in] */ const BSTR ObjectPath,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(GetObjectAsync)(
|
|
/* [in] */ const BSTR ObjectPath,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler){return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(PutClass)(
|
|
/* [in] */ IWbemClassObject __RPC_FAR *pObject,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(PutClassAsync)(
|
|
/* [in] */ IWbemClassObject __RPC_FAR *pObject,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(DeleteClass)(
|
|
/* [in] */ const BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(DeleteClassAsync)(
|
|
/* [in] */ const BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(CreateClassEnum)(
|
|
/* [in] */ const BSTR Superclass,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(CreateClassEnumAsync)(
|
|
/* [in] */ const BSTR Superclass,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(PutInstance)(
|
|
/* [in] */ IWbemClassObject __RPC_FAR *pInst,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(PutInstanceAsync)(
|
|
/* [in] */ IWbemClassObject __RPC_FAR *pInst,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(DeleteInstance)(
|
|
/* [in] */ const BSTR ObjectPath,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(DeleteInstanceAsync)(
|
|
/* [in] */ const BSTR ObjectPath,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(CreateInstanceEnum)(
|
|
/* [in] */ const BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(CreateInstanceEnumAsync)(
|
|
/* [in] */ const BSTR Class,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
STDMETHOD(ExecQuery)(
|
|
/* [in] */ const BSTR QueryLanguage,
|
|
/* [in] */ const BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(ExecQueryAsync)(
|
|
/* [in] */ const BSTR QueryLanguage,
|
|
/* [in] */ const BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(ExecNotificationQuery)(
|
|
/* [in] */ const BSTR QueryLanguage,
|
|
/* [in] */ const BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(ExecNotificationQueryAsync)(
|
|
/* [in] */ const BSTR QueryLanguage,
|
|
/* [in] */ const BSTR Query,
|
|
/* [in] */ long lFlags,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler) {return WBEM_E_NOT_SUPPORTED;};
|
|
|
|
STDMETHOD(ExecMethod)(const BSTR, const BSTR, long, IWbemContext*,
|
|
IWbemClassObject*, IWbemClassObject**, IWbemCallResult**) {return WBEM_E_NOT_SUPPORTED;}
|
|
|
|
STDMETHOD(ExecMethodAsync)(const BSTR, const BSTR, long,
|
|
IWbemContext*, IWbemClassObject*, IWbemObjectSink*) {return WBEM_E_NOT_SUPPORTED;}
|
|
END_INTERFACE_PART(WbemServices)
|
|
|
|
// Event maps
|
|
//{{AFX_EVENT(CMsieCtrl)
|
|
//}}AFX_EVENT
|
|
DECLARE_EVENT_MAP()
|
|
|
|
// Dispatch and event IDs
|
|
public:
|
|
enum {
|
|
//{{AFX_DISP_ID(CMsieCtrl)
|
|
dispidMSInfoView = 1L,
|
|
dispidMSInfoRefresh = 2L,
|
|
dispidMSInfoLoadFile = 3L,
|
|
dispidMSInfoSelectAll = 4L,
|
|
dispidMSInfoCopy = 5L,
|
|
dispidMSInfoUpdateView = 6L,
|
|
dispidMSInfoGetData = 7L,
|
|
//}}AFX_DISP_ID
|
|
};
|
|
|
|
private:
|
|
void DrawLine();
|
|
BOOL FormatColumns();
|
|
BOOL AddColumn(int idsLabel, int nItem, int nSubItem = -1, int size = 0,
|
|
int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
|
|
int nFmt = LVCFMT_LEFT);
|
|
BOOL AddItem(int nItem,int nSubItem,LPCTSTR strItem,int nImageIndex = -1);
|
|
void RefigureColumns(CRect& rect);
|
|
void RefreshListControl(BOOL bRedraw);
|
|
void RefreshEditControl(BOOL bRedraw);
|
|
|
|
void DeleteArrayObject(void *ptrArray);
|
|
|
|
void RefreshArray(int iView, int &iListItem, CPtrArray &ptrarrayNew);
|
|
CString GetStringFromIDS(int ids);
|
|
CString GetStringFromVariant(COleVariant &var, int idsFormat = 0);
|
|
void AddToArray(CPtrArray &ptrarray, int itemNum, LPCTSTR pszItem, LPCTSTR pszValue);
|
|
void AddToArray(CPtrArray &ptrarray, int itemNum, int idsItem, LPCTSTR pszValue);
|
|
void AddBlankLineToArray(CPtrArray &ptrarray, int itemNum);
|
|
void AddEditBlankLineToArray(CPtrArray &ptrarray, int itemNum);
|
|
void AddFileVersionToArray(CPtrArray &ptrarray, int itemNum, LPCTSTR pszFile, LPCTSTR pszVersion, LPCTSTR pszSize, LPCTSTR pszDate, LPCTSTR pszPath, LPCTSTR pszCompany, DWORD dwSize, DATE date);
|
|
void AddEditToArray(CPtrArray &ptrarray, int itemNum, LPCTSTR pszItem, LPCTSTR pszValue, BOOL bBold = FALSE);
|
|
void AddEditToArray(CPtrArray &ptrarray, int itemNum, int idsItem, LPCTSTR pszValue, BOOL bBold = FALSE);
|
|
void AddObjectToArray(CPtrArray &ptrarray, int itemNum, LPCTSTR pszProgramFile, LPCTSTR pszStatus, LPCTSTR pszCodeBase);
|
|
void AddCertificateToArray(CPtrArray &ptrarray, int itemNum, LPCTSTR pszIssuedTo, LPCTSTR pszIssuedBy, LPCTSTR pszValidity, LPCTSTR pszSignatureAlgorithm);
|
|
void AddNameToArray(CPtrArray &ptrarray, int itemNum, LPCTSTR pszName);
|
|
|
|
//====================================================================
|
|
// MSInfo Specific...
|
|
//
|
|
// Add members to the control class to keep track of the currently
|
|
// displayed data. In this example, we use a flag to indicate if the
|
|
// data is current or loaded from a file.
|
|
//====================================================================
|
|
|
|
CBrush *m_pCtlBkBrush;
|
|
bool m_bCurrent;
|
|
CListCtrl m_list;
|
|
CImageList m_imageList;
|
|
CPtrArray m_ptrarray;
|
|
CStatic m_static;
|
|
CButton m_btnBasic, m_btnAdvanced;
|
|
CRichEditCtrl m_edit;
|
|
CFont m_fontStatic, m_fontBtn;
|
|
UINT m_uiView;
|
|
|
|
// The following member variables are used to keep track of the
|
|
// column sizes on the list control.
|
|
|
|
int m_cColumns;
|
|
int m_aiRequestedWidths[20];
|
|
int m_aiColumnWidths[20];
|
|
int m_aiMinWidths[20];
|
|
int m_aiMaxWidths[20];
|
|
|
|
// WMI
|
|
|
|
bool GetIEType(const BSTR classStr, IEDataType &enType);
|
|
void ConvertDateToWbemString(COleVariant &var);
|
|
void SetIEProperties(IEDataType enType, void *pIEData, IWbemClassObject *pInstance);
|
|
|
|
IWbemServices *m_pNamespace;
|
|
};
|
|
|
|
#endif // !defined(AFX_MSIECTL_H__25959BFC_E700_11D2_A7AF_00C04F806200__INCLUDED)
|