From 29afbd883e8e894a365c5ee73dd677564925d3f7 Mon Sep 17 00:00:00 2001 From: Rom Walton Date: Mon, 13 Aug 2007 19:41:09 +0000 Subject: [PATCH] Copied remotely svn path=/trunk/boinc/; revision=13306 --- clientscr/win_screensaver.h | 238 ++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 clientscr/win_screensaver.h diff --git a/clientscr/win_screensaver.h b/clientscr/win_screensaver.h new file mode 100644 index 0000000000..9325e4cc0c --- /dev/null +++ b/clientscr/win_screensaver.h @@ -0,0 +1,238 @@ +// +// Contributor(s): +// DirectX 8.1 Screen Saver Framework from Microsoft. +// Microsoft Knowledge Base Article - 79212 +// + +#ifndef _BOINC_H +#define _BOINC_H + +#include "gui_rpc_client.h" + + +//----------------------------------------------------------------------------- +// Error codes +//----------------------------------------------------------------------------- + +#define SCRAPPERR_BOINCNOTDETECTED 0x82000001 +#define SCRAPPERR_BOINCNOTDETECTEDSTARTUP 0x82000002 +#define SCRAPPERR_BOINCSUSPENDED 0x82000003 +#define SCRAPPERR_BOINCNOTGRAPHICSCAPABLE 0x82000004 +#define SCRAPPERR_BOINCNOAPPSEXECUTING 0x82000005 +#define SCRAPPERR_BOINCNOPROJECTSDETECTED 0x82000006 +#define SCRAPPERR_BOINCNOGRAPHICSAPPSEXECUTING 0x82000007 +#define SCRAPPERR_BOINCSCREENSAVERLOADING 0x82000008 +#define SCRAPPERR_BOINCAPPFOUNDGRAPHICSLOADING 0x82000009 +#define SCRAPPERR_BOINCSHUTDOWNEVENT 0x8200000a +#define SCRAPPERR_NOPREVIEW 0x8200000f +#define SCRAPPERR_DAEMONALLOWSNOGRAPHICS 0x82000010 + + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- +#define MAX_DISPLAYS 9 +#define NO_ADAPTER 0xffffffff +#define NO_MONITOR 0xffffffff + +#define BSF_ALLOWSFW 0x00000080 + +#define BOINC_WINDOW_CLASS_NAME _T("BOINC_app") + + +//*************************************************************************************** +// Modes of operation for screensaver +enum SaverMode +{ + sm_config, // Config dialog box + sm_preview, // Mini preview window in Display Properties dialog + sm_full, // Full-on screensaver mode + sm_test, // Test mode + sm_passwordchange // Change password +}; + + +//----------------------------------------------------------------------------- +// Name: struct INTERNALMONITORINFO +// Desc: Structure for holding information about a monitor +//----------------------------------------------------------------------------- +struct INTERNALMONITORINFO +{ + TCHAR strDeviceName[128]; + TCHAR strMonitorName[128]; + HMONITOR hMonitor; + RECT rcScreen; + HWND hWnd; + + DWORD dwTimeLastUpdate; + + // Error message state + FLOAT xError; + FLOAT yError; + FLOAT widthError; + FLOAT heightError; + FLOAT xVelError; + FLOAT yVelError; +}; + + +//----------------------------------------------------------------------------- +// Name: struct LASTINPUTINFO +// Desc: Structure for holding input idle detection values on Win2k+ +// systems. +//----------------------------------------------------------------------------- +typedef struct tagLASTINPUTINFO { + UINT cbSize; + DWORD dwTime; +} LASTINPUTINFO, *PLASTINPUTINFO; + + +//----------------------------------------------------------------------------- +// Name: struct INTERNALMONITORINFO +// Desc: Use the following structure rather than DISPLAY_DEVICE, since some +// old versions of DISPLAY_DEVICE are missing the last two fields and +// this can cause problems with EnumDisplayDevices on Windows 2000. +//----------------------------------------------------------------------------- +struct DISPLAY_DEVICE_FULL +{ + DWORD cb; + TCHAR DeviceName[32]; + TCHAR DeviceString[128]; + DWORD StateFlags; + TCHAR DeviceID[128]; + TCHAR DeviceKey[128]; +}; + + +// Prototype for VerifyScreenSavePwd() in password.cpl, used on Win9x +typedef BOOL (WINAPI *VERIFYPWDPROC)(HWND); + +// Prototype for GetLastInputInto() in user32.dll, used on Win2k or better. +typedef BOOL (WINAPI *MYGETLASTINPUTINFO)(PLASTINPUTINFO); + +// Prototype for GetLastInputInto() in user32.dll, used on Win2k or better. +typedef BOOL (WINAPI *MYISHUNGAPPWINDOW)(HWND hWnd); + +// Prototype for BroadcastSystemMessage() in user32.dll. +typedef long (WINAPI *MYBROADCASTSYSTEMMESSAGE)(DWORD dwFlags, LPDWORD lpdwRecipients, UINT uiMessage, WPARAM wParam, LPARAM lParam); + +// Prototype for SHGetFolderPath() in shlwapi.dll. +typedef HRESULT (WINAPI *MYSHGETFOLDERPATH)(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath); + + +//----------------------------------------------------------------------------- +// Name: class CScreensaver +// Desc: Screensaver class +//----------------------------------------------------------------------------- +class CScreensaver +{ +public: + CScreensaver(); + + virtual HRESULT Create( HINSTANCE hInstance ); + virtual INT Run(); + HRESULT DisplayErrorMsg( HRESULT hr ); + + + // + // Infrastructure layer + // +protected: + SaverMode ParseCommandLine( TCHAR* pstrCommandLine ); + VOID EnumMonitors( VOID ); + + int UtilGetRegKey(LPCTSTR name, DWORD &keyval); + int UtilSetRegKey(LPCTSTR name, DWORD value); + int UtilGetRegStartupStr(LPCTSTR name, LPTSTR str); + + BOOL IsConfigStartupBOINC(); + + BOOL CreateInfrastructureMutexes(); + + BOOL GetError( BOOL& bErrorMode, HRESULT& hrError, TCHAR* pszError, size_t iErrorSize ); + BOOL SetError( BOOL bErrorMode, HRESULT hrError ); + VOID UpdateErrorBoxText(); + virtual BOOL GetTextForError( HRESULT hr, TCHAR* pszError, DWORD dwNumChars ); + + + // Variables for non-fatal error management + HANDLE m_hErrorManagementMutex; + BOOL m_bErrorMode; // Whether to display an error + HRESULT m_hrError; // Error code to display + TCHAR m_szError[400]; // Error message text + + BOOL m_bBOINCConfigChecked; + BOOL m_bBOINCStartupConfigured; + DWORD m_dwBlankScreen; + DWORD m_dwBlankTime; + + + // + // Data management layer + // +protected: + BOOL CreateDataManagementThread(); + BOOL DestoryDataManagementThread(); + + DWORD WINAPI DataManagementProc(); + static DWORD WINAPI DataManagementProcStub( LPVOID lpParam ); + + VOID StartupBOINC(); + VOID ShutdownBOINC(); + + RPC_CLIENT rpc; + CC_STATE state; + + HANDLE m_hDataManagementThread; + + BOOL m_bCoreNotified; + BOOL m_bResetCoreState; + int m_iStatus; + + + // + // Presentation layer + // +protected: + HRESULT CreateSaverWindow(); + VOID UpdateErrorBox(); + VOID InterruptSaver(); + VOID ShutdownSaver(); + VOID ChangePassword(); + + VOID DoConfig(); + HRESULT DoSaver(); + VOID DoPaint( HWND hwnd, HDC hdc, LPPAINTSTRUCT lpps ); + + void DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, LONG xStart, LONG yStart, COLORREF cTransparentColor); + + LRESULT SaverProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); + INT_PTR ConfigureDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); + + static LRESULT CALLBACK SaverProcStub( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); + static INT_PTR CALLBACK ConfigureDialogProcStub( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); + +protected: + SaverMode m_SaverMode; // sm_config, sm_full, sm_preview, etc. + BOOL m_bAllScreensSame; // If TRUE, show same image on all screens + HWND m_hWnd; // Focus window and device window on primary + HWND m_hWndParent; + HINSTANCE m_hInstance; + BOOL m_bWaitForInputIdle; // Used to pause when preview starts + DWORD m_dwSaverMouseMoveCount; + BOOL m_bIs9x; + BOOL m_bCheckingSaverPassword; + BOOL m_bWindowed; + + INTERNALMONITORINFO m_Monitors[MAX_DISPLAYS]; + DWORD m_dwNumMonitors; + RECT m_rcRenderTotal; // Rect of entire area to be rendered + RECT m_rcRenderCurDevice; // Rect of render area of current device + BOOL m_bPaintingInitialized; + + TCHAR m_strWindowTitle[200]; // Title for the app's window + + DWORD m_dwLastInputTimeAtStartup; +}; + +#endif