#pragma once typedef struct _DESKMONINFO { DISPLAY_DEVICE dd; struct _DESKMONINFO *Next; } DESKMONINFO, *PDESKMONINFO; typedef struct _DESKMONITOR { const struct IShellPropSheetExtVtbl *lpIShellPropSheetExtVtbl; const struct IShellExtInitVtbl *lpIShellExtInitVtbl; const struct IClassFactoryVtbl *lpIClassFactoryVtbl; DWORD ref; HWND hwndDlg; PDESK_EXT_INTERFACE DeskExtInterface; IDataObject *pdtobj; LPTSTR lpDisplayDevice; DWORD dwMonitorCount; PDESKMONINFO Monitors; PDESKMONINFO SelMonitor; PDEVMODEW lpSelDevMode; PDEVMODEW lpDevModeOnInit; union { DWORD dwFlags; struct { DWORD bModesPruned : 1; DWORD bKeyIsReadOnly : 1; DWORD bPruningOn : 1; }; }; } DESKMONITOR, *PDESKMONITOR; extern LONG dll_refs; #define impl_to_interface(impl,iface) (struct iface *)(&(impl)->lp##iface##Vtbl) #define interface_to_impl(instance,iface) ((PDESKMONITOR)((ULONG_PTR)instance - FIELD_OFFSET(DESKMONITOR,lp##iface##Vtbl))) HRESULT IDeskMonitor_Constructor(REFIID riid, LPVOID *ppv); VOID IDeskMonitor_InitIface(PDESKMONITOR This); HRESULT STDMETHODCALLTYPE IDeskMonitor_QueryInterface(PDESKMONITOR This, REFIID iid, PVOID *pvObject); ULONG IDeskMonitor_AddRef(PDESKMONITOR This); ULONG IDeskMonitor_Release(PDESKMONITOR This); HRESULT IDeskMonitor_Initialize(PDESKMONITOR This, LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID); HRESULT IDeskMonitor_AddPages(PDESKMONITOR This, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam); HRESULT IDeskMonitor_ReplacePage(PDESKMONITOR This, EXPPS uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam); static const GUID CLSID_IDeskMonitor = {0x42071713,0x76d4,0x11d1,{0x8b,0x24,0x00,0xa0,0xc9,0x06,0x8f,0xf3}}; ULONG __cdecl DbgPrint(PCCH Format,...);