windows-nt/Source/XPSP1/NT/ds/security/winsafer/test/desktops/desktop.h
2020-09-26 16:20:57 +08:00

179 lines
5.3 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
// File: Desktop.h
// Created: Jan 1996
// By: Ryan Marshall (a-ryanm) and Martin Holladay (a-martih)
//
// Project: Resource Kit Desktop Switcher (MultiDesk)
//
//
// Revision History:
//
// March 1997 - Add external icon capability
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __MULTIDESK_DESKTOP_H__
#define __MULTIDESK_DESKTOP_H__
//
// Constants
//
#define MAX_NAME_LENGTH 255
#define DEFAULT_NUM_DESKTOPS 1
#define MAX_DESKTOPS 6
#define NUM_BUILTIN_ICONS 27
//
// MUST match the number of elements in nColorElements[]
// and the number of #define COLOR_ constants in Registry.Cpp
//
#define NUM_COLOR_ELEMENTS 23
//
// Error Codes
//
#define ERROR_CANNOT_DELETE_DESKTOP_ZERO 1
#define ERROR_INVALID_DESKTOP_NUMBER 2
#define ERROR_OPEN_PROCESSES 3
#define ERROR_CANNOT_DELETE_ACTIVE_DESKTOP 4
#define SUCCESS_THREAD_TERMINATION 5
#define SUCCESS_VIRTUAL_MOVE 6
//
// Messages
//
#define WM_THREAD_TERMINATE (WM_USER + 301)
#define WM_PUMP_TERMINATE (WM_USER + 302)
#define WM_THREAD_SCHEME_UPDATE (WM_USER + 303)
#define WM_KILL_APPS (WM_USER + 304)
#define WM_NO_CLOSE (WM_USER + 305)
#define WM_UPDATEMINIMIZE (WM_USER + 306)
//
// Dispatch function pointer prototype
//
typedef VOID (* DispatchFnType) ( VOID ) ;
//
// Data Structures
//
typedef struct _DESKTOP_SCHEME
{
BOOL Initialized;
DWORD dwColor[NUM_COLOR_ELEMENTS];
TCHAR szWallpaper[MAX_NAME_LENGTH + 1];
TCHAR szTile[MAX_NAME_LENGTH + 1];
TCHAR szPattern[MAX_NAME_LENGTH + 1];
TCHAR szScreenSaver[MAX_PATH + 1];
TCHAR szSecure[MAX_NAME_LENGTH + 1];
TCHAR szTimeOut[MAX_NAME_LENGTH + 1];
TCHAR szActive[MAX_NAME_LENGTH + 1];
} DESKTOP_SCHEME, * PDESKTOP_SCHEME;
typedef struct _DESKTOP_NODE
{
HWND hWnd;
HDESK hDesktop;
BOOL bThread;
BOOL bShellStarted;
DWORD ThreadId;
UINT nIconID;
LPSECURITY_ATTRIBUTES lpSA;
DESKTOP_SCHEME DS;
struct _DESKTOP_NODE* nextDN;
TCHAR DesktopName[MAX_NAME_LENGTH];
TCHAR SaiferName[MAX_NAME_LENGTH];
TCHAR RealDesktopName[MAX_NAME_LENGTH];
} DESKTOP_NODE, * PDESKTOP_NODE;
typedef struct _THREAD_DATA
{
HDESK hDesktop;
HDESK hDefaultDesktop;
TCHAR RealDesktopName[MAX_NAME_LENGTH];
DispatchFnType CreateDisplayFn;
} THREAD_DATA, * PTHREAD_DATA;
//
// Function Prototypes
//
VOID ThreadInit(LPVOID hData);
//
// The Class
//
class CDesktop
{
public:
// Construction, destruction, and initialization.
CDesktop();
~CDesktop();
UINT InitializeDesktops(DispatchFnType CreateDisplayFn, HINSTANCE hInstance);
public:
UINT GetNumDesktops(VOID) const;
UINT GetActiveDesktop(VOID) const;
UINT AddDesktop(DispatchFnType CreateDisplayFn,
LPSECURITY_ATTRIBUTES lpSA, UINT uTemplate = 0);
UINT RemoveDesktop(UINT DesktopNumber);
BOOL ActivateDesktop(UINT DesktopNumber);
BOOL SetDesktopName(UINT DesktopNumber, LPCTSTR DesktopName);
BOOL GetDesktopName(UINT DesktopNumber, LPTSTR DesktopName, UINT size) const;
BOOL SetSaiferName(UINT DesktopNumber, LPCTSTR SaiferName);
BOOL GetSaiferName(UINT DesktopNumber, LPTSTR SaiferName, UINT size) const;
BOOL SetDesktopIconID(UINT DesktopNumber, UINT nIconID);
HICON GetDesktopIcon(UINT DesktopNumber) const;
UINT GetDesktopIconID(UINT DesktopNumber) const;
HICON GetBuiltinIcon(UINT IconNumber) const;
public:
// the functions are public, but have limited.
DESKTOP_NODE *GetDesktopNode(UINT uNode);
BOOL SaveCurrentDesktopScheme();
HDESK GetDefaultDesktop(VOID) const;
BOOL SetThreadWindow(DWORD ThreadId, HWND hWnd);
HWND GetThreadWindow(DWORD ThreadId) const;
UINT GetThreadDesktopID(DWORD ThreadId) const;
HWND GetWindowDesktop(UINT DesktopNumber) const;
BOOL GetRealDesktopName(HWND hWnd, LPTSTR szRealDesktopName) const;
BOOL FindSchemeAndSet(VOID);
BOOL KillAppsOnDesktop(HDESK hDesk, HWND hWnd);
BOOL RegSaveSettings(VOID);
BOOL RunDown(VOID);
private:
HINSTANCE hDeskInstance;
BOOL BeginRundown;
UINT NumOfDesktops;
UINT CurrentDesktop;
HICON DefaultIconArray[NUM_BUILTIN_ICONS];
HDESK DefaultDesktop;
PDESKTOP_NODE m_DesktopList; // List of desktop nodes
private:
BOOL DuplicateDefaultScheme(UINT DesktopNumber);
BOOL GetRegColorStruct(UINT DesktopNumber);
BOOL GetDesktopSchemeRegistry(UINT DesktopNumber, PDESKTOP_SCHEME pDS);
BOOL SetDesktopSchemeRegistry(UINT DesktopNumber, PDESKTOP_SCHEME pDS);
};
#endif