Files
Work/common/desktop.hpp
2024-08-07 09:09:36 -04:00

106 lines
2.4 KiB
C++

#ifndef _COMMON_DESKTOP_HPP_
#define _COMMON_DESKTOP_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
class Desktop
{
public:
enum Access{AccessCreateMenu=DESKTOP_CREATEMENU,AccessCreateWindow=DESKTOP_CREATEWINDOW,AccessEnumerate=DESKTOP_ENUMERATE,
AccessHookControl=DESKTOP_HOOKCONTROL,AccessJournalPlayback=DESKTOP_JOURNALPLAYBACK,AccessJournalRecord=DESKTOP_JOURNALRECORD,
AccessReadObjects=DESKTOP_READOBJECTS,AccessSwitchDesktop=DESKTOP_SWITCHDESKTOP,AccessWriteObjects=DESKTOP_WRITEOBJECTS};
enum Flags{None=0,AllowOtherAccountHook=DF_ALLOWOTHERACCOUNTHOOK};
Desktop(void);
Desktop(const String &strDesktop,bool inheritHandle=false,DWORD desiredAccess=AccessEnumerate,DWORD dwFlags=AllowOtherAccountHook);
virtual ~Desktop();
bool open(const String &strDesktop,bool inheritHandle=false,DWORD desiredAccess=AccessEnumerate,DWORD dwFlags=AllowOtherAccountHook);
void close(void);
const String &desktopName(void)const;
bool activate(void)const;
HDESK getHandle(void)const;
bool isOkay(void)const;
private:
Desktop(const Desktop &someDesktop);
Desktop &operator=(const Desktop &someDesktop);
String mStrDesktopName;
HDESK mhDesktop;
};
inline
Desktop::Desktop(void)
: mhDesktop(0)
{
}
inline
Desktop::Desktop(const String &strDesktop,bool inheritHandle,DWORD desiredAccess,DWORD dwFlags)
: mhDesktop(0)
{
open(strDesktop,inheritHandle,desiredAccess,dwFlags);
}
inline
Desktop::Desktop(const Desktop &/*someDesktop*/)
{ // private implementation
}
inline
Desktop::~Desktop()
{
}
inline
Desktop &Desktop::operator=(const Desktop &/*someDesktop*/)
{ // private implementation
return *this;
}
inline
bool Desktop::open(const String &strDesktop,bool inheritHandle,DWORD desiredAccess,DWORD dwFlags)
{
close();
if(strDesktop.isNull())return false;
mStrDesktopName=strDesktop;
mhDesktop=::OpenDesktop(strDesktop,dwFlags,inheritHandle,desiredAccess);
return isOkay();
}
inline
void Desktop::close(void)
{
if(!isOkay())return;
::CloseDesktop(mhDesktop);
mhDesktop=0;
}
inline
bool Desktop::activate(void)const
{
if(!isOkay())return false;
return ::SwitchDesktop(mhDesktop);
}
inline
const String &Desktop::desktopName(void)const
{
return mStrDesktopName;
}
inline
bool Desktop::isOkay(void)const
{
return mhDesktop?true:false;
}
inline
HDESK Desktop::getHandle(void)const
{
return mhDesktop;
}
#endif