248 lines
8.4 KiB
C#
248 lines
8.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
namespace Foo.Platform
|
|
{
|
|
/// <summary>
|
|
/// Oogy Environment Class for getting OS, Application, and Theme Settings
|
|
/// </summary>
|
|
public class Env
|
|
{
|
|
private static int m_dwMajorVersion = 0;
|
|
private static int m_dwMinorVersion = 0;
|
|
private static Themes m_Theme = Themes.Classic;
|
|
private static AssemblyRunTimePath m_RunTimePath = null;
|
|
|
|
/// <summary>
|
|
/// Public Properties
|
|
/// </summary>
|
|
public static int MajorVersion {get{return m_dwMajorVersion;}}
|
|
public static int MinorVersion {get{return m_dwMinorVersion;}}
|
|
public static Themes Theme {get{return m_Theme;}}
|
|
|
|
/// <summary>
|
|
/// This is our versioning system, does not correspond to Windows
|
|
/// </summary>
|
|
public enum OSVersions : int
|
|
{
|
|
OS_WINDOWS_VISTA = 1,
|
|
OS_WINDOWS_2000 = 2, /*incl. Server OSes*/
|
|
OS_WINDOWS_2003 = 3, /*incl. Server OSes and Windows XP*/
|
|
OS_WINDOWS_SE7EN = 7, /*for future use ?*/
|
|
OS_NOT_SUPPORTED = 99
|
|
}
|
|
|
|
/// <summary>
|
|
/// This are our Theme Configurations for ButtonHook/GUI components.
|
|
/// </summary>
|
|
public enum Themes : int
|
|
{
|
|
Classic = 0,
|
|
XPtheme = 1,
|
|
AeroTheme = 2,
|
|
VistaNoAero = 3
|
|
}
|
|
|
|
/// <summary>
|
|
/// Static Constructor, immediatly sets our environment variables
|
|
/// </summary>
|
|
static Env()
|
|
{
|
|
ObtainEnvInformation();
|
|
m_RunTimePath = new AssemblyRunTimePath();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Call this function first - before querying for themes, etc
|
|
/// </summary>
|
|
private static void ObtainEnvInformation()
|
|
{
|
|
GetSystemInformation(out m_dwMajorVersion, out m_dwMinorVersion);
|
|
CheckWindowsXPTheme();
|
|
CheckWindowsVistaTheme();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Use to get the Oogy Application path. Creates folder if none exists
|
|
/// </summary>
|
|
/// <returns>Path to Ooganizer Application Folder</returns>
|
|
public static string GetAppdirectory()
|
|
{
|
|
string appDataFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
|
|
string oogyAppData = appDataFolder + @"\Ooganizer";
|
|
|
|
if (!Directory.Exists(oogyAppData))
|
|
{
|
|
// create oogy app data folder
|
|
Directory.CreateDirectory(oogyAppData);
|
|
}
|
|
|
|
return oogyAppData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Use to get the Oogy artifact snapshot image path. Creates folder if none exists
|
|
/// </summary>
|
|
/// <returns>Path to Ooganizer artifact snapshot data folder</returns>
|
|
public static string GetSnapshotDirectory()
|
|
{
|
|
string path = Platform.Env.GetAppdirectory() + @"\Snapshots";
|
|
|
|
if (!Directory.Exists(path))
|
|
{
|
|
// create snapshot data folder
|
|
Directory.CreateDirectory(path);
|
|
}
|
|
|
|
return path;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Use to get the Oogy log path. Creates folder if none exists
|
|
/// </summary>
|
|
/// <returns>Path to Ooganizer log folder</returns>
|
|
public static string GetLogDirectory()
|
|
{
|
|
string path = Platform.Env.GetAppdirectory() + @"\Logs";
|
|
|
|
if (!Directory.Exists(path))
|
|
{
|
|
// create snapshot data folder
|
|
Directory.CreateDirectory(path);
|
|
}
|
|
|
|
return path;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Use this to query the current running assembly path
|
|
/// </summary>
|
|
/// <returns>Path of assembly location</returns>
|
|
public static string GetRunTimePath()
|
|
{
|
|
return m_RunTimePath.strPath;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Quickly Check if the current OS Environment is supported by Oogy
|
|
/// </summary>
|
|
/// <returns>true if it is supported, false otherwise</returns>
|
|
public static bool IsWindowsOSSupported()
|
|
{
|
|
OSVersions version = OSVersionCheck();
|
|
|
|
if ((version == OSVersions.OS_WINDOWS_2003) ||
|
|
(version == OSVersions.OS_WINDOWS_VISTA) ||
|
|
(version == OSVersions.OS_WINDOWS_SE7EN))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves Windows OS specific information
|
|
/// </summary>
|
|
/// <param name="dwMajorVersion">dwMajorVersion[out]</param>
|
|
/// <param name="dwMinorVersion">dwMinorVersion[out]</param>
|
|
/// <param name="is32bitNT">is32bitNT[out] = supports 32-bit Windows NT</param>
|
|
/// <returns>true, if succesfully retrieved, false otherwise</returns>
|
|
private static void GetSystemInformation(out int dwMajorVersion, out int dwMinorVersion)
|
|
{
|
|
dwMajorVersion = System.Environment.OSVersion.Version.Major;
|
|
dwMinorVersion = System.Environment.OSVersion.Version.Minor;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Use this function to obtain the current OS version information
|
|
/// </summary>
|
|
/// <returns>Returns the Current OSVersion Enum of this Environment</returns>
|
|
private static OSVersions OSVersionCheck()
|
|
{
|
|
switch(m_dwMajorVersion) // we ignore minor version for now
|
|
{
|
|
case 4: // Windows 2000?
|
|
return (OSVersions.OS_WINDOWS_2000);
|
|
case 5: // Windows XP && Windows 2003
|
|
return (OSVersions.OS_WINDOWS_2003);
|
|
case 6:
|
|
return (OSVersions.OS_WINDOWS_VISTA);
|
|
case 7:
|
|
return (OSVersions.OS_WINDOWS_SE7EN);
|
|
default:
|
|
return (OSVersions.OS_NOT_SUPPORTED);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Vista Specific Theme Checking is done here
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static void CheckWindowsVistaTheme()
|
|
{
|
|
if(OSVersionCheck() == OSVersions.OS_WINDOWS_VISTA)
|
|
{
|
|
bool bIsAero = false;
|
|
if(Win32.Win32Functions.DwmIsCompositionEnabled(ref bIsAero) < 0)
|
|
return; //Call Failed
|
|
|
|
if (bIsAero)
|
|
m_Theme = Themes.AeroTheme;
|
|
else
|
|
m_Theme = Themes.VistaNoAero;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// XP Specific Theme Checking is done here
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private static void CheckWindowsXPTheme()
|
|
{
|
|
if (OSVersionCheck() == OSVersions.OS_WINDOWS_2003)
|
|
{
|
|
if (Win32.Win32Functions.IsAppThemed())
|
|
m_Theme = Themes.XPtheme;
|
|
else
|
|
m_Theme = Themes.Classic;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Since we only can query the Assembly path by instantiation,
|
|
/// we have a class that handles it
|
|
/// </summary>
|
|
internal class AssemblyRunTimePath
|
|
{
|
|
public string strPath;
|
|
public AssemblyRunTimePath(){strPath = Path.GetDirectoryName(GetType().Assembly.Location);}
|
|
}
|
|
|
|
/// <summary>
|
|
/// EnvironmentCCW is a wrapper around Env - specifically made to be non-static
|
|
/// as to be able to be called from COM (ButtonHook/C++ code can now use Environment as well
|
|
/// </summary>
|
|
[Guid("85E2E5F6-877F-4edd-B7D1-D52C431F0AFC")]
|
|
[ClassInterface(ClassInterfaceType.AutoDual)]
|
|
[ComVisible(true)]
|
|
public class EnvironmentCCW
|
|
{
|
|
public bool IsWindowsOSSupported()
|
|
{
|
|
return Env.IsWindowsOSSupported();
|
|
}
|
|
public int GetCurWindowsTheme()
|
|
{
|
|
return (int)Env.Theme;
|
|
}
|
|
}
|
|
|
|
}
|