///---------------------------------------------------------------------------- /// /// Copyright (c) 2008 AOL LLC /// /// All rights reserved. /// /// Redistribution and use in source and binary forms, with or without modification, are permitted /// provided that the following conditions are met: /// /// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. /// /// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and /// the following disclaimer in the documentation and/or other materials provided with the distribution. /// /// Neither the name of the AOL LLC nor the names of its contributors may be used to endorse or /// promote products derived from this software without specific prior written permission. /// /// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS /// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT /// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR /// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR /// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, /// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, /// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR /// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF /// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING /// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS /// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// ///---------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.Windows.Forms; using Microsoft.Win32; using AccCoreLib; namespace MyPlugin { /// /// Summary description for Class1. /// /// /// Important! Replace the lines below with your own key strings! /// Keys can be obtained from http://developer.aim.com. #if DEBUG [GuidAttribute("your-development-key-here")] #else [GuidAttribute("your-deployment-key-here")] #endif public class Class1 : IAccPlugin, IAccCommandTarget { const int kCommandId = 0; private AccSession m_session; public Class1() { // // TODO: Add constructor logic here // } #region IAccPlugin Members public void Init(AccSession session, IAccPluginInfo pluginInfo) { m_session = session; m_session.OnStateChange += new DAccEvents_OnStateChangeEventHandler(m_session_OnStateChange); IAccCommand command = pluginInfo.AddCommand(kCommandId); command.set_Property(AccCommandProp.AccCommandProp_Text, "My Command"); } public void Shutdown() { m_session = null; } #endregion #region Plugin Registration [ComRegisterFunctionAttribute] public static void RegisterFunction(Type t) { RegistryKey key = Registry.LocalMachine.CreateSubKey(PluginKeyName(t)); key.SetValue("Name", t.Name); } [ComUnregisterFunctionAttribute] public static void UnregisterFunction(Type t) { Registry.LocalMachine.DeleteSubKey(PluginKeyName(t)); } private static string PluginKeyName(Type t) { return "Software\\America Online\\AIM\\Plugins\\" + '{' + t.GUID.ToString() + '}'; } #endregion private void m_session_OnStateChange(AccSession session, AccSessionState State, AccResult hr) { } #region IAccCommandTarget Members public void Exec(int command, object users) { if (command == kCommandId) MessageBox.Show("Hi I am a command"); else if (command == (int)AccCommandId.AccCommandId_Preferences) { Form MyForm = new Form(); MyForm.Text = "My Plugin Settings"; MyForm.Show(); } } public bool QueryStatus(int command, object users) { if (command == (int)AccCommandId.AccCommandId_Preferences || command == kCommandId) return true; else return false; } #endregion } }