/* Copyright (C) 2011 Birunthan Mohanathas This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ using System; using System.Runtime.InteropServices; namespace Rainmeter { /// /// Wrapper around the Rainmeter C API. /// public class API { private IntPtr m_Rm; public API(IntPtr rm) { m_Rm = rm; } [DllImport("Rainmeter.dll", CharSet = CharSet.Unicode)] private extern static IntPtr RmReadString(IntPtr rm, string option, string defValue, bool replaceMeasures); [DllImport("Rainmeter.dll", CharSet = CharSet.Unicode)] private extern static double RmReadFormula(IntPtr rm, string option, double defValue); [DllImport("Rainmeter.dll", CharSet = CharSet.Unicode)] private extern static IntPtr RmReplaceVariables(IntPtr rm, string str); [DllImport("Rainmeter.dll", CharSet = CharSet.Unicode)] private extern static IntPtr RmPathToAbsolute(IntPtr rm, string relativePath); [DllImport("Rainmeter.dll", EntryPoint = "RmExecute", CharSet = CharSet.Unicode)] public extern static void Execute(IntPtr skin, string command); [DllImport("Rainmeter.dll")] private extern static IntPtr RmGet(IntPtr rm, RmGetType type); [DllImport("Rainmeter.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private extern static int LSLog(LogType type, string unused, string message); private enum RmGetType { MeasureName = 0, Skin = 1, SettingsFile = 2, SkinName = 3, SkinWindowHandle = 4 } public enum LogType { Error = 1, Warning = 2, Notice = 3, Debug = 4 } public string ReadString(string option, string defValue, bool replaceMeasures = true) { return Marshal.PtrToStringUni(RmReadString(m_Rm, option, defValue, replaceMeasures)); } public string ReadPath(string option, string defValue) { return Marshal.PtrToStringUni(RmPathToAbsolute(m_Rm, ReadString(option, defValue))); } public double ReadDouble(string option, double defValue) { return RmReadFormula(m_Rm, option, defValue); } public int ReadInt(string option, int defValue) { return (int)RmReadFormula(m_Rm, option, defValue); } public string ReplaceVariables(string str) { return Marshal.PtrToStringUni(RmReplaceVariables(m_Rm, str)); } public string GetMeasureName() { return Marshal.PtrToStringUni(RmGet(m_Rm, RmGetType.MeasureName)); } public IntPtr GetSkin() { return RmGet(m_Rm, RmGetType.Skin); } public string GetSettingsFile() { return Marshal.PtrToStringUni(RmGet(m_Rm, RmGetType.SettingsFile)); } public string GetSkinName() { return Marshal.PtrToStringUni(RmGet(m_Rm, RmGetType.SkinName)); } public IntPtr GetSkinWindow() { return RmGet(m_Rm, RmGetType.SkinWindowHandle); } public static void Log(LogType type, string message) { LSLog(type, null, message); } } /// /// Dummy attribute to mark method as exported for DllExporter.exe. /// [AttributeUsage(AttributeTargets.Method)] public class DllExport : Attribute { public DllExport() { } } }