1 #pragma once 2 3 typedef struct _DESKMONINFO 4 { 5 DISPLAY_DEVICE dd; 6 struct _DESKMONINFO *Next; 7 } DESKMONINFO, *PDESKMONINFO; 8 9 typedef struct _DESKMONITOR 10 { 11 const struct IShellPropSheetExtVtbl *lpIShellPropSheetExtVtbl; 12 const struct IShellExtInitVtbl *lpIShellExtInitVtbl; 13 const struct IClassFactoryVtbl *lpIClassFactoryVtbl; 14 DWORD ref; 15 16 HWND hwndDlg; 17 PDESK_EXT_INTERFACE DeskExtInterface; 18 IDataObject *pdtobj; 19 LPTSTR lpDisplayDevice; 20 DWORD dwMonitorCount; 21 PDESKMONINFO Monitors; 22 PDESKMONINFO SelMonitor; 23 PDEVMODEW lpSelDevMode; 24 PDEVMODEW lpDevModeOnInit; 25 union 26 { 27 DWORD dwFlags; 28 struct 29 { 30 DWORD bModesPruned : 1; 31 DWORD bKeyIsReadOnly : 1; 32 DWORD bPruningOn : 1; 33 }; 34 }; 35 36 } DESKMONITOR, *PDESKMONITOR; 37 38 extern LONG dll_refs; 39 40 #define impl_to_interface(impl,iface) (struct iface *)(&(impl)->lp##iface##Vtbl) 41 #define interface_to_impl(instance,iface) ((PDESKMONITOR)((ULONG_PTR)instance - FIELD_OFFSET(DESKMONITOR,lp##iface##Vtbl))) 42 43 HRESULT 44 IDeskMonitor_Constructor(REFIID riid, 45 LPVOID *ppv); 46 47 VOID 48 IDeskMonitor_InitIface(PDESKMONITOR This); 49 50 HRESULT STDMETHODCALLTYPE 51 IDeskMonitor_QueryInterface(PDESKMONITOR This, 52 REFIID iid, 53 PVOID *pvObject); 54 55 ULONG 56 IDeskMonitor_AddRef(PDESKMONITOR This); 57 58 ULONG 59 IDeskMonitor_Release(PDESKMONITOR This); 60 61 HRESULT 62 IDeskMonitor_Initialize(PDESKMONITOR This, 63 LPCITEMIDLIST pidlFolder, 64 IDataObject *pdtobj, 65 HKEY hkeyProgID); 66 67 HRESULT 68 IDeskMonitor_AddPages(PDESKMONITOR This, 69 LPFNADDPROPSHEETPAGE pfnAddPage, 70 LPARAM lParam); 71 72 HRESULT 73 IDeskMonitor_ReplacePage(PDESKMONITOR This, 74 EXPPS uPageID, 75 LPFNADDPROPSHEETPAGE pfnReplacePage, 76 LPARAM lParam); 77 78 static const GUID CLSID_IDeskMonitor = {0x42071713,0x76d4,0x11d1,{0x8b,0x24,0x00,0xa0,0xc9,0x06,0x8f,0xf3}}; 79 80 ULONG __cdecl DbgPrint(PCCH Format,...); 81