Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendeskcplx.h
Go to the documentation of this file.
00001 #ifndef __DESKCPLX__H 00002 #define __DESKCPLX__H 00003 00004 #define DESK_EXT_CALLBACK CALLBACK 00005 00006 #define DESK_EXT_EXTINTERFACE TEXT("Desk.cpl extension interface") 00007 #define DESK_EXT_PRUNINGMODE TEXT("Pruning Mode") 00008 #define DESK_EXT_DISPLAYDEVICE TEXT("Display Device") 00009 #define DESK_EXT_DISPLAYNAME TEXT("Display Name") 00010 #define DESK_EXT_DISPLAYID TEXT("Display ID") 00011 #define DESK_EXT_DISPLAYKEY TEXT("Display Key") 00012 #define DESK_EXT_DISPLAYSTATEFLAGS TEXT("Display State Flags") 00013 #define DESK_EXT_MONITORNAME TEXT("Monitor Name") 00014 #define DESK_EXT_MONITORDEVICE TEXT("Monitor Device") 00015 00016 typedef PDEVMODEW (DESK_EXT_CALLBACK *PDESK_EXT_ENUMALLMODES)(PVOID Context, DWORD Index); 00017 typedef PDEVMODEW (DESK_EXT_CALLBACK *PDESK_EXT_GETCURRENTMODE)(PVOID Context); 00018 typedef BOOL (DESK_EXT_CALLBACK *PDESK_EXT_SETCURRENTMODE)(PVOID Context, const DEVMODEW *pDevMode); 00019 typedef VOID (DESK_EXT_CALLBACK *PDESK_EXT_GETPRUNINGMODE)(PVOID Context, PBOOL pbModesPruned, PBOOL pbKeyIsReadOnly, PBOOL pbPruningOn); 00020 typedef VOID (DESK_EXT_CALLBACK *PDESK_EXT_SETPRUNINGMODE)(PVOID Context, BOOL PruningOn); 00021 00022 typedef struct _DESK_EXT_INTERFACE 00023 { 00024 /* NOTE: This structure is binary compatible to XP. The windows shell 00025 extensions rely on this structure to be properly filled! */ 00026 DWORD cbSize; 00027 00028 PVOID Context; /* This value is passed on to the callback routines */ 00029 00030 /* Callback routines called by the shell extensions */ 00031 PDESK_EXT_ENUMALLMODES EnumAllModes; 00032 PDESK_EXT_SETCURRENTMODE SetCurrentMode; 00033 PDESK_EXT_GETCURRENTMODE GetCurrentMode; 00034 PDESK_EXT_SETPRUNINGMODE SetPruningMode; 00035 PDESK_EXT_GETPRUNINGMODE GetPruningMode; 00036 00037 /* HardwareInformation.* values provided in the device registry key */ 00038 WCHAR MemorySize[128]; 00039 WCHAR ChipType[128]; 00040 WCHAR DacType[128]; 00041 WCHAR AdapterString[128]; 00042 WCHAR BiosString[128]; 00043 } DESK_EXT_INTERFACE, *PDESK_EXT_INTERFACE; 00044 00045 LONG WINAPI DisplaySaveSettings(PVOID pContext, HWND hwndPropSheet); 00046 00047 static __inline PDESK_EXT_INTERFACE 00048 QueryDeskCplExtInterface(IDataObject *pdo) 00049 { 00050 PDESK_EXT_INTERFACE pRecvBuffer, pExtIface = NULL; 00051 FORMATETC fetc; 00052 STGMEDIUM medium; 00053 00054 fetc.cfFormat = (CLIPFORMAT)RegisterClipboardFormat(DESK_EXT_EXTINTERFACE); 00055 fetc.ptd = NULL; 00056 fetc.dwAspect = DVASPECT_CONTENT; 00057 fetc.lindex = -1; 00058 fetc.tymed = TYMED_HGLOBAL; 00059 00060 if (SUCCEEDED(IDataObject_GetData(pdo, &fetc, &medium)) && medium.hGlobal != NULL) 00061 { 00062 /* We always receive the string in unicode! */ 00063 pRecvBuffer = (PDESK_EXT_INTERFACE)GlobalLock(medium.hGlobal); 00064 00065 if (pRecvBuffer->cbSize == sizeof(*pRecvBuffer)) 00066 { 00067 pExtIface = LocalAlloc(LMEM_FIXED, sizeof(*pExtIface)); 00068 if (pExtIface != NULL) 00069 { 00070 CopyMemory(pExtIface, 00071 pRecvBuffer, 00072 sizeof(*pRecvBuffer)); 00073 } 00074 } 00075 00076 GlobalUnlock(medium.hGlobal); 00077 ReleaseStgMedium(&medium); 00078 } 00079 00080 return pExtIface; 00081 } 00082 00083 static __inline LPTSTR 00084 QueryDeskCplString(IDataObject *pdo, UINT cfFormat) 00085 { 00086 FORMATETC fetc; 00087 STGMEDIUM medium; 00088 SIZE_T BufLen; 00089 LPWSTR lpRecvBuffer; 00090 LPTSTR lpStr = NULL; 00091 00092 fetc.cfFormat = (CLIPFORMAT)cfFormat; 00093 fetc.ptd = NULL; 00094 fetc.dwAspect = DVASPECT_CONTENT; 00095 fetc.lindex = -1; 00096 fetc.tymed = TYMED_HGLOBAL; 00097 00098 if (SUCCEEDED(IDataObject_GetData(pdo, &fetc, &medium)) && medium.hGlobal != NULL) 00099 { 00100 /* We always receive the string in unicode! */ 00101 lpRecvBuffer = (LPWSTR)GlobalLock(medium.hGlobal); 00102 00103 BufLen = wcslen(lpRecvBuffer) + 1; 00104 lpStr = LocalAlloc(LMEM_FIXED, BufLen * sizeof(TCHAR)); 00105 if (lpStr != NULL) 00106 { 00107 #ifdef UNICODE 00108 wcscpy(lpStr, lpRecvBuffer); 00109 #else 00110 WideCharToMultiByte(CP_ACP, 0, lpRecvBuffer, -1, lpStr, BufLen, NULL, NULL); 00111 #endif 00112 } 00113 00114 GlobalUnlock(medium.hGlobal); 00115 ReleaseStgMedium(&medium); 00116 } 00117 00118 return lpStr; 00119 } 00120 00121 static __inline LONG 00122 DeskCplExtDisplaySaveSettings(PDESK_EXT_INTERFACE DeskExtInterface, 00123 HWND hwndDlg) 00124 { 00125 typedef LONG (WINAPI *PDISPLAYSAVESETTINGS)(PVOID, HWND); 00126 HMODULE hModDeskCpl; 00127 PDISPLAYSAVESETTINGS pDisplaySaveSettings; 00128 LONG lRet = DISP_CHANGE_BADPARAM; 00129 00130 /* We could use GetModuleHandle() instead, but then this routine 00131 wouldn't work if some other application hosts the shell extension */ 00132 hModDeskCpl = LoadLibrary(TEXT("desk.cpl")); 00133 if (hModDeskCpl != NULL) 00134 { 00135 pDisplaySaveSettings = (PDISPLAYSAVESETTINGS)GetProcAddress(hModDeskCpl, 00136 "DisplaySaveSettings"); 00137 if (pDisplaySaveSettings != NULL) 00138 { 00139 lRet = pDisplaySaveSettings(DeskExtInterface->Context, 00140 hwndDlg); 00141 } 00142 00143 FreeLibrary(hModDeskCpl); 00144 } 00145 00146 return lRet; 00147 } 00148 00149 #endif /* __DESKCPLX__H */ Generated on Sun May 27 2012 04:33:07 for ReactOS by
1.7.6.1
|