ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

deskcplx.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.