initial oogynize check in _ this actually used to work!

This commit is contained in:
2016-02-14 21:16:31 -08:00
parent b183af5d55
commit 532ea133bc
337 changed files with 30692 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{D32C4454-9334-47AA-9A3F-456B8B12220A}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Foo.AddIn.Common</RootNamespace>
<AssemblyName>Foo.AddIn.Common</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Target\Debug\AddIns\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Target\Release\AddIns\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CommonTypes.cs" />
<Compile Include="CommonValidations.cs" />
<Compile Include="IDynResolve.cs" />
<Compile Include="IAddIn.cs" />
<Compile Include="IWorkspace.cs" />
<Compile Include="CommonFunctions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,399 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Diagnostics;
namespace Foo.AddIn.Common
{
#region Structs
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
public Rectangle AsRectangle
{
get
{
return new Rectangle(this.left, this.top, this.right - this.left, this.bottom - this.top);
}
}
public static RECT FromXYWH(int x, int y, int width, int height)
{
RECT rect = new RECT();
rect.left = x;
rect.top = y;
rect.right = x + width;
rect.bottom = y + height;
return rect;
}
public static RECT FromRectangle(Rectangle rectangle)
{
RECT rect = new RECT();
rect.left = rectangle.Left;
rect.top = rectangle.Top;
rect.right = rectangle.Right;
rect.bottom = rectangle.Bottom;
return rect;
}
}
#endregion
public static class Functions
{
#region Enums
public static class FuncEnum
{
public enum WindowAction : int
{
SW_HIDE = 0,
SW_SHOWNORMAL = 1,
SW_NORMAL = 1,
SW_SHOWMINIMIZED = 2,
SW_SHOWMAXIMIZED = 3,
SW_MAXIMIZE = 3,
SW_SHOWNOACTIVATE = 4,
SW_SHOW = 5,
SW_MINIMIZE = 6,
SW_SHOWMINNOACTIVE = 7,
SW_SHOWNA = 8,
SW_RESTORE = 9,
SW_SHOWDEFAULT = 10,
SW_FORCEMINIMIZE = 11,
SW_MAX = 11
}
public enum WindowMessage : int
{
WM_NULL = 0x0000,
WM_CREATE = 0x0001,
WM_DESTROY = 0x0002,
WM_MOVE = 0x0003,
WM_SIZE = 0x0005,
WM_ACTIVATE = 0x0006,
WM_SETFOCUS = 0x0007,
WM_KILLFOCUS = 0x0008,
WM_ENABLE = 0x000A,
WM_SETREDRAW = 0x000B,
WM_SETTEXT = 0x000C,
WM_GETTEXT = 0x000D,
WM_GETTEXTLENGTH = 0x000E,
WM_PAINT = 0x000F,
WM_CLOSE = 0x0010,
WM_QUERYENDSESSION = 0x0011,
WM_QUIT = 0x0012,
WM_QUERYOPEN = 0x0013,
WM_ERASEBKGND = 0x0014,
WM_SYSCOLORCHANGE = 0x0015,
WM_ENDSESSION = 0x0016,
WM_SHOWWINDOW = 0x0018,
WM_CTLCOLOR = 0x0019,
WM_WININICHANGE = 0x001A,
WM_SETTINGCHANGE = 0x001A,
WM_DEVMODECHANGE = 0x001B,
WM_ACTIVATEAPP = 0x001C,
WM_FONTCHANGE = 0x001D,
WM_TIMECHANGE = 0x001E,
WM_CANCELMODE = 0x001F,
WM_SETCURSOR = 0x0020,
WM_MOUSEACTIVATE = 0x0021,
WM_CHILDACTIVATE = 0x0022,
WM_QUEUESYNC = 0x0023,
WM_GETMINMAXINFO = 0x0024,
WM_PAINTICON = 0x0026,
WM_ICONERASEBKGND = 0x0027,
WM_NEXTDLGCTL = 0x0028,
WM_SPOOLERSTATUS = 0x002A,
WM_DRAWITEM = 0x002B,
WM_MEASUREITEM = 0x002C,
WM_DELETEITEM = 0x002D,
WM_VKEYTOITEM = 0x002E,
WM_CHARTOITEM = 0x002F,
WM_SETFONT = 0x0030,
WM_GETFONT = 0x0031,
WM_SETHOTKEY = 0x0032,
WM_GETHOTKEY = 0x0033,
WM_QUERYDRAGICON = 0x0037,
WM_COMPAREITEM = 0x0039,
WM_GETOBJECT = 0x003D,
WM_COMPACTING = 0x0041,
WM_COMMNOTIFY = 0x0044,
WM_WINDOWPOSCHANGING = 0x0046,
WM_WINDOWPOSCHANGED = 0x0047,
WM_POWER = 0x0048,
WM_COPYDATA = 0x004A,
WM_CANCELJOURNAL = 0x004B,
WM_NOTIFY = 0x004E,
WM_INPUTLANGCHANGEREQUEST = 0x0050,
WM_INPUTLANGCHANGE = 0x0051,
WM_TCARD = 0x0052,
WM_HELP = 0x0053,
WM_USERCHANGED = 0x0054,
WM_NOTIFYFORMAT = 0x0055,
WM_CONTEXTMENU = 0x007B,
WM_STYLECHANGING = 0x007C,
WM_STYLECHANGED = 0x007D,
WM_DISPLAYCHANGE = 0x007E,
WM_GETICON = 0x007F,
WM_SETICON = 0x0080,
WM_NCCREATE = 0x0081,
WM_NCDESTROY = 0x0082,
WM_NCCALCSIZE = 0x0083,
WM_NCHITTEST = 0x0084,
WM_NCPAINT = 0x0085,
WM_NCACTIVATE = 0x0086,
WM_GETDLGCODE = 0x0087,
WM_SYNCPAINT = 0x0088,
WM_NCMOUSEMOVE = 0x00A0,
WM_NCLBUTTONDOWN = 0x00A1,
WM_NCLBUTTONUP = 0x00A2,
WM_NCLBUTTONDBLCLK = 0x00A3,
WM_NCRBUTTONDOWN = 0x00A4,
WM_NCRBUTTONUP = 0x00A5,
WM_NCRBUTTONDBLCLK = 0x00A6,
WM_NCMBUTTONDOWN = 0x00A7,
WM_NCMBUTTONUP = 0x00A8,
WM_NCMBUTTONDBLCLK = 0x00A9,
WM_KEYDOWN = 0x0100,
WM_KEYUP = 0x0101,
WM_CHAR = 0x0102,
WM_DEADCHAR = 0x0103,
WM_SYSKEYDOWN = 0x0104,
WM_SYSKEYUP = 0x0105,
WM_SYSCHAR = 0x0106,
WM_SYSDEADCHAR = 0x0107,
WM_KEYLAST = 0x0108,
WM_IME_STARTCOMPOSITION = 0x010D,
WM_IME_ENDCOMPOSITION = 0x010E,
WM_IME_COMPOSITION = 0x010F,
WM_IME_KEYLAST = 0x010F,
WM_INITDIALOG = 0x0110,
WM_COMMAND = 0x0111,
WM_SYSCOMMAND = 0x0112,
WM_TIMER = 0x0113,
WM_HSCROLL = 0x0114,
WM_VSCROLL = 0x0115,
WM_INITMENU = 0x0116,
WM_INITMENUPOPUP = 0x0117,
WM_MENUSELECT = 0x011F,
WM_MENUCHAR = 0x0120,
WM_ENTERIDLE = 0x0121,
WM_MENURBUTTONUP = 0x0122,
WM_MENUDRAG = 0x0123,
WM_MENUGETOBJECT = 0x0124,
WM_UNINITMENUPOPUP = 0x0125,
WM_MENUCOMMAND = 0x0126,
WM_CTLCOLORMSGBOX = 0x0132,
WM_CTLCOLOREDIT = 0x0133,
WM_CTLCOLORLISTBOX = 0x0134,
WM_CTLCOLORBTN = 0x0135,
WM_CTLCOLORDLG = 0x0136,
WM_CTLCOLORSCROLLBAR = 0x0137,
WM_CTLCOLORSTATIC = 0x0138,
WM_MOUSEMOVE = 0x0200,
WM_LBUTTONDOWN = 0x0201,
WM_LBUTTONUP = 0x0202,
WM_LBUTTONDBLCLK = 0x0203,
WM_RBUTTONDOWN = 0x0204,
WM_RBUTTONUP = 0x0205,
WM_RBUTTONDBLCLK = 0x0206,
WM_MBUTTONDOWN = 0x0207,
WM_MBUTTONUP = 0x0208,
WM_MBUTTONDBLCLK = 0x0209,
WM_MOUSEWHEEL = 0x020A,
WM_PARENTNOTIFY = 0x0210,
WM_ENTERMENULOOP = 0x0211,
WM_EXITMENULOOP = 0x0212,
WM_NEXTMENU = 0x0213,
WM_SIZING = 0x0214,
WM_CAPTURECHANGED = 0x0215,
WM_MOVING = 0x0216,
WM_DEVICECHANGE = 0x0219,
WM_MDICREATE = 0x0220,
WM_MDIDESTROY = 0x0221,
WM_MDIACTIVATE = 0x0222,
WM_MDIRESTORE = 0x0223,
WM_MDINEXT = 0x0224,
WM_MDIMAXIMIZE = 0x0225,
WM_MDITILE = 0x0226,
WM_MDICASCADE = 0x0227,
WM_MDIICONARRANGE = 0x0228,
WM_MDIGETACTIVE = 0x0229,
WM_MDISETMENU = 0x0230,
WM_ENTERSIZEMOVE = 0x0231,
WM_EXITSIZEMOVE = 0x0232,
WM_DROPFILES = 0x0233,
WM_MDIREFRESHMENU = 0x0234,
WM_IME_SETCONTEXT = 0x0281,
WM_IME_NOTIFY = 0x0282,
WM_IME_CONTROL = 0x0283,
WM_IME_COMPOSITIONFULL = 0x0284,
WM_IME_SELECT = 0x0285,
WM_IME_CHAR = 0x0286,
WM_IME_REQUEST = 0x0288,
WM_IME_KEYDOWN = 0x0290,
WM_IME_KEYUP = 0x0291,
WM_MOUSEHOVER = 0x02A1,
WM_MOUSELEAVE = 0x02A3,
WM_CUT = 0x0300,
WM_COPY = 0x0301,
WM_PASTE = 0x0302,
WM_CLEAR = 0x0303,
WM_UNDO = 0x0304,
WM_RENDERFORMAT = 0x0305,
WM_RENDERALLFORMATS = 0x0306,
WM_DESTROYCLIPBOARD = 0x0307,
WM_DRAWCLIPBOARD = 0x0308,
WM_PAINTCLIPBOARD = 0x0309,
WM_VSCROLLCLIPBOARD = 0x030A,
WM_SIZECLIPBOARD = 0x030B,
WM_ASKCBFORMATNAME = 0x030C,
WM_CHANGECBCHAIN = 0x030D,
WM_HSCROLLCLIPBOARD = 0x030E,
WM_QUERYNEWPALETTE = 0x030F,
WM_PALETTEISCHANGING = 0x0310,
WM_PALETTECHANGED = 0x0311,
WM_HOTKEY = 0x0312,
WM_PRINT = 0x0317,
WM_PRINTCLIENT = 0x0318,
WM_HANDHELDFIRST = 0x0358,
WM_HANDHELDLAST = 0x035F,
WM_AFXFIRST = 0x0360,
WM_AFXLAST = 0x037F,
WM_PENWINFIRST = 0x0380,
WM_PENWINLAST = 0x038F,
WM_APP = 0x8000,
WM_USER = 0x0400,
WM_REFLECT = WM_USER + 0x1c00,
WM_CHANGEUISTATE = 0x0127,
WM_UPDATEUISTATE = 0x0128,
WM_QUERYUISTATE = 0x0129
}
}
#endregion
#region DLLImports
[DllImport("ole32.dll")]
public static extern int CreateBindCtx(int reserved, out IBindCtx ppbc);
[DllImport("user32.dll")]
extern public static bool GetWindowRect(IntPtr hWnd, out RECT rect);
[DllImport("user32.dll")]
extern public static bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
[DllImport("User32.dll")]
extern public static bool IsWindow(IntPtr hwnd);
[DllImport("User32.dll")]
extern public static bool IsWindowVisible(IntPtr hwnd);
[DllImport("user32.dll")]
extern public static int ShowWindow(IntPtr hwnd, FuncEnum.WindowAction nCmdShow);
[DllImport("User32.dll")]
extern public static int GetWindowThreadProcessId(IntPtr hWnd, ref int lpdwProcessId);
[DllImport("User32.dll")]
extern public static int SendMessage(IntPtr hWnd, FuncEnum.WindowMessage Msg, IntPtr wParam, IntPtr lParam);
#endregion
#region Functions
/// <summary>
/// Returns the .Net Process Object that owns the passed in hWnd
/// </summary>
public static Process GetProcessFromHandle(IntPtr hWnd)
{
int currentPid = 0;
GetWindowThreadProcessId(hWnd, ref currentPid);
Process process;
process = Process.GetProcessById(currentPid);
return process;
}
/// <summary>
/// Attaches to instance of COM object matching progid
/// and returns an object. Client must cast and know
/// expected type.
/// </summary>
public static Object GetCOMObject(string progId)
{
Object app = null;
try
{
app = Marshal.GetActiveObject(progId);
}
catch (SystemException) { /* ignore */ }
return app;
}
/// <summary>
/// Use this to Get A specific type of Object from the ROT
/// </summary>
public static List<T> GetRunningObjectsOfType<T>()
{
// Get the table.
var res = new List<T>();
IBindCtx bc;
CreateBindCtx(0, out bc);
IRunningObjectTable runningObjectTable;
bc.GetRunningObjectTable(out runningObjectTable);
IEnumMoniker monikerEnumerator;
runningObjectTable.EnumRunning(out monikerEnumerator);
monikerEnumerator.Reset();
// Enumerate and fill our nice dictionary.
IMoniker[] monikers = new IMoniker[1];
IntPtr numFetched = IntPtr.Zero;
while (monikerEnumerator.Next(1, monikers, numFetched) == 0)
{
object o;
runningObjectTable.GetObject(monikers[0], out o);
if (o is T)
{
res.Add((T)o);
}
o = null;
}
return res;
}
/// <summary>
/// Get a windows rectangle in a .NET structure
/// </summary>
/// <param name="hwnd">The window handle to look up</param>
/// <returns>The rectangle</returns>
public static Rectangle GetWindowRect(IntPtr hwnd)
{
RECT rect = new RECT();
GetWindowRect(hwnd, out rect);
return rect.AsRectangle;
}
#endregion
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Foo.AddIn.Common
{
/// <summary>
/// Common Return Value for Addins
/// </summary>
public class FuncRetVal
{
public FuncRetValEnum Type { get; set; }
public string Message { get; set; }
}
/// <summary>
/// Useful for Returns where we
/// need more information on failures
/// </summary>
public enum FuncRetValEnum
{
Action_Succeeded,
Action_Failed,
NoAction_Needed,
ParameterInvalid,
ArtifactUnavailable,
FunctionallityNotSupported,
ErrorThrown
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Foo.AddIn.Common
{
public static class Validate
{
/// <summary>
/// Validate ArtifactLocation * We could later do much more work here *
/// </summary>
/// <returns></returns>
public static bool IsValidArtifactLocation(string strArtifactLocation, ref FuncRetVal retVal)
{
// All URLs should contain that character (Files aren't allowed to contain it)
bool bIsUrl = strArtifactLocation.Contains('/');
if (String.IsNullOrEmpty(strArtifactLocation))
{
retVal.Type = FuncRetValEnum.ParameterInvalid;
return false;
}
else if (!bIsUrl && !File.Exists(strArtifactLocation))
{
// Check File existence (if it doesn't return false)
return false;
}
else
{
return true;
}
}
}
}

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Foo.AddIn.Common
{
public interface IAddIn
{
// I
}
}

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Foo.AddIn.Common
{
public interface IDynResolve
{
// I
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Foo.AddIn.Common
{
public interface IWorkspace
{
// Launchers
FuncRetVal Launch(string strArtifactLocation, int WindowHeight, int WindowWidth, int WindowTop, int WindowLeft);
FuncRetVal Launch(string strArtifactLocation);
// ShowNHiders
FuncRetVal Show(string strArtifactLocation);
FuncRetVal Hide(string strArtifactLocation);
// Closers
FuncRetVal QueryClose(string strArtifactLocation);
FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact, out int WindowHeight, out int WindowWidth, out int WindowTop, out int WindowLeft);
FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact);
FuncRetVal Close(string strArtifactLocation);
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AddIn.Common")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AddIn.Common")]
[assembly: AssemblyCopyright("Copyright © 2010")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("39d7351f-149f-4d32-a3ae-d07ec27515af")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,324 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foo.AddIn.Common;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Drawing;
// Ignore 'Ambiguity' warning message, seems like no way around those
#pragma warning disable 0467
namespace Foo.Addin.Office
{
public class Access_Workspace : IWorkspace
{
public const string Access_ProgId = "Access.Application";
public FuncRetVal Launch(string strArtifactLocation, int WindowHeight, int WindowWidth, int WindowTop, int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Access.Application app = new Microsoft.Office.Interop.Access.Application();
app.Visible = true;
// Must test the following here:
// - open both .mdb and .adp (access project files with this)
// - how does this behave when db is password protected?
app.OpenCurrentDatabase(strArtifactLocation, true, "");
// ToDo: Check if a new process got created? / or if hWnd exists???
// - Also PERFORM Window Positioning
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Launch(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Access.Application app = new Microsoft.Office.Interop.Access.Application();
app.Visible = true;
// Must test the following here:
// - open both .mdb and .adp (access project files with this)
// - how does this behave when db is password protected?
app.OpenCurrentDatabase(strArtifactLocation, true, "");
// ToDo: Check if a new process got created? / or if hWnd exists???
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Show(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningAccessApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Access.Application>();
foreach (Microsoft.Office.Interop.Access.Application app in RunningAccessApps)
{
if (app.CurrentProject.FullName.ToLower() == strArtifactLocation.ToLower())
{
IntPtr hWnd = (IntPtr)app.hWndAccessApp();
if (!Functions.IsWindowVisible(hWnd))
{
Functions.ShowWindow(hWnd, Functions.FuncEnum.WindowAction.SW_SHOW);
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Hide(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningAccessApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Access.Application>();
foreach (Microsoft.Office.Interop.Access.Application app in RunningAccessApps)
{
if (app.CurrentProject.FullName.ToLower() == strArtifactLocation.ToLower())
{
IntPtr hWnd = (IntPtr)app.hWndAccessApp();
if (Functions.IsWindowVisible(hWnd))
{
Functions.ShowWindow(hWnd, Functions.FuncEnum.WindowAction.SW_HIDE);
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal QueryClose(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningAccessApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Access.Application>();
foreach (Microsoft.Office.Interop.Access.Application app in RunningAccessApps)
{
if (app.CurrentProject.FullName.ToLower() == strArtifactLocation.ToLower())
{
IntPtr hWnd = (IntPtr) app.hWndAccessApp();
if (Functions.SendMessage(hWnd, Functions.FuncEnum.WindowMessage.WM_QUERYENDSESSION, IntPtr.Zero, IntPtr.Zero) != 0)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact, out int WindowHeight, out int WindowWidth, out int WindowTop, out int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
WindowTop = 0;
WindowLeft = 0;
WindowWidth = 0;
WindowHeight = 0;
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningAccessApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Access.Application>();
foreach (Microsoft.Office.Interop.Access.Application app in RunningAccessApps)
{
if (app.CurrentProject.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Get Handle and Process
IntPtr hWnd = (IntPtr)app.hWndAccessApp();
Process process = Functions.GetProcessFromHandle((IntPtr)hWnd);
// Get the Window properties
Rectangle rect = Functions.GetWindowRect(hWnd);
WindowHeight = rect.Height;
WindowWidth = rect.Width;
WindowLeft = rect.Left;
WindowTop = rect.Top;
// Close the database
//app.CloseCurrentDatabase();
if (bAutoSaveArtifact)
app.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveAll);
else
app.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveNone);
Marshal.FinalReleaseComObject(app); // force clean-up
// Kill the process
process.Kill();
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningAccessApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Access.Application>();
foreach (Microsoft.Office.Interop.Access.Application app in RunningAccessApps)
{
if (app.CurrentProject.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Get Handle and Process
IntPtr hWnd = (IntPtr)app.hWndAccessApp();
Process process = Functions.GetProcessFromHandle((IntPtr)hWnd);
// Close the database
//app.CloseCurrentDatabase();
if(bAutoSaveArtifact)
app.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveAll);
else
app.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveNone);
Marshal.FinalReleaseComObject(app); // force clean-up
// Kill the process
process.Kill();
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningAccessApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Access.Application>();
foreach (Microsoft.Office.Interop.Access.Application app in RunningAccessApps)
{
if (app.CurrentProject.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Get Handle and Process
IntPtr hWnd = (IntPtr)app.hWndAccessApp();
Process process = Functions.GetProcessFromHandle((IntPtr)hWnd);
// Close the database
//app.CloseCurrentDatabase();
app.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveAll);
Marshal.FinalReleaseComObject(app); // force clean-up
// Kill the process
process.Kill();
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foo.AddIn.Common;
namespace Foo.Addin.Office
{
public class AddIn : IAddIn
{
}
}

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{0CA1DD2E-2752-4587-ADB4-77194411648B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Foo.Addin.Office</RootNamespace>
<AssemblyName>Foo.Addin.Office</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Target\Debug\AddIns\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Target\Release\AddIns\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Office.Interop.Access, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Interop.PowerPoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Interop.Publisher, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Interop.Visio, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Interop.Word, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Access.cs" />
<Compile Include="AddIn.cs" />
<Compile Include="Excel.cs" />
<Compile Include="PowerPoint.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Publisher.cs" />
<Compile Include="Visio.cs" />
<Compile Include="Word.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AddIn.Common\AddIn.Common.csproj">
<Project>{D32C4454-9334-47AA-9A3F-456B8B12220A}</Project>
<Name>AddIn.Common</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>3</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,383 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;
using Foo.AddIn.Common;
using System.Drawing;
// Ignore 'Ambiguity' warning message, seems like no way around those
#pragma warning disable 0467
namespace Foo.Addin.Office
{
public class Excel_Workspace : IWorkspace
{
public const string Excel_ProgId = "Excel.Application";
public FuncRetVal Launch(string strArtifactLocation, int WindowHeight, int WindowWidth, int WindowTop, int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Excel.Application app = null;
app = new Microsoft.Office.Interop.Excel.Application();
// Mark the Application as visible
app.Visible = true;
// Position the Window
IntPtr hWnd = (IntPtr)app.Hwnd;
Functions.SetWindowPos(hWnd, IntPtr.Zero, WindowLeft, WindowTop, WindowHeight, WindowWidth, 0);
// Open/Load the Document
Microsoft.Office.Interop.Excel.Workbook workbook = app.Workbooks.Open(strArtifactLocation, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
if (workbook != null)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Launch(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Excel.Application app = null;
app = new Microsoft.Office.Interop.Excel.Application();
// Mark the Application as visible
app.Visible = true;
Microsoft.Office.Interop.Excel.Workbook workbook = app.Workbooks.Open(strArtifactLocation, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
if (workbook != null)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Show(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningExcelWorkbooks = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Excel.Workbook>();
foreach (Microsoft.Office.Interop.Excel.Workbook book in RunningExcelWorkbooks)
{
if (book.FullName.ToLower() == strArtifactLocation.ToLower())
{
var app = book.Application;
bool bIsTheOnlyDocumentInApp = (app.Workbooks.Count == 1);
// If For some reason the App is visible
if (app.Visible)
{
// Make Sure that this Workbook is activated
if (!bIsTheOnlyDocumentInApp)
{
book.Activate();
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
}
return retVal;
}
app.Visible = true;
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Hide(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningExcelWorkbooks = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Excel.Workbook>();
foreach (Microsoft.Office.Interop.Excel.Workbook book in RunningExcelWorkbooks)
{
if (book.FullName.ToLower() == strArtifactLocation.ToLower())
{
var app = book.Application;
bool bIsTheOnlyDocumentInApp = (app.Workbooks.Count == 1);
if (!app.Visible)
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
// If this is NOT the Only open workbook in this App
// ~Activate the other workbook
if (!bIsTheOnlyDocumentInApp)
{
foreach (Microsoft.Office.Interop.Excel.Workbook book2 in app.Workbooks)
{
if (book2.FullName.ToLower() != strArtifactLocation.ToLower())
{
book2.Activate();
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
}
else
{
app.Visible = false;
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal QueryClose(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningExcelWorkbooks = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Excel.Workbook>();
foreach (Microsoft.Office.Interop.Excel.Workbook book in RunningExcelWorkbooks)
{
if (book.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (book.Saved)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact, out int WindowHeight, out int WindowWidth, out int WindowTop, out int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
WindowTop = 0;
WindowLeft = 0;
WindowWidth = 0;
WindowHeight = 0;
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningExcelWorkbooks = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Excel.Workbook>();
foreach (Microsoft.Office.Interop.Excel.Workbook book in RunningExcelWorkbooks)
{
if (book.FullName.ToLower() == strArtifactLocation.ToLower())
{
// In case there is a running rogue excel process left open,
// we can always force it to close by closing the process
// int hWnd = app.Hwnd;
// Process process = Win32Functions.GetProcessFromHandle((IntPtr) hWnd);
var app = book.Application;
// Get the Window properties
IntPtr hWnd = (IntPtr)app.Hwnd;
Rectangle rect = Functions.GetWindowRect(hWnd);
WindowHeight = rect.Height;
WindowWidth = rect.Width;
WindowLeft = rect.Left;
WindowTop = rect.Top;
// Close the Workbook
book.Close(bAutoSaveArtifact, strArtifactLocation, false);
Marshal.FinalReleaseComObject(book); // force clean-up
// Close Excel if this is the last Workbook
if (app.Workbooks.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up, should clean up excel process
//process.Close();
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningExcelWorkbooks = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Excel.Workbook>();
foreach (Microsoft.Office.Interop.Excel.Workbook book in RunningExcelWorkbooks)
{
if (book.FullName.ToLower() == strArtifactLocation.ToLower())
{
// In case there is a running rogue excel process left open,
// we can always force it to close by closing the process
// int hWnd = app.Hwnd;
// Process process = Win32Functions.GetProcessFromHandle((IntPtr) hWnd);
var app = book.Application;
// Close the Workbook
book.Close(bAutoSaveArtifact, strArtifactLocation, false);
Marshal.FinalReleaseComObject(book); // force clean-up
// Close Excel if this is the last Workbook
if (app.Workbooks.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up, should clean up excel process
//process.Close();
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningExcelWorkbooks = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Excel.Workbook>();
foreach (Microsoft.Office.Interop.Excel.Workbook book in RunningExcelWorkbooks)
{
if (book.FullName.ToLower() == strArtifactLocation.ToLower())
{
// In case there is a running rogue excel process left open,
// we can always force it to close by closing the process
// int hWnd = app.Hwnd;
// Process process = Win32Functions.GetProcessFromHandle((IntPtr) hWnd);
var app = book.Application;
// Close the Workbook
book.Close(true, strArtifactLocation, false);
Marshal.FinalReleaseComObject(book); // force clean-up
// Close Excel if this is the last Workbook
if (app.Workbooks.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up, should clean up excel process
//process.Close();
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
}
}

View File

@@ -0,0 +1,379 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foo.AddIn.Common;
using System.Runtime.InteropServices;
// Ignore 'Ambiguity' warning message, seems like no way around those
#pragma warning disable 0467
namespace Foo.Addin.Office
{
public class PowerPoint_Workspace : IWorkspace
{
public const string PowerPoint_ProgId = "PowerPoint.Application";
public FuncRetVal Launch(string strArtifactLocation, int WindowHeight, int WindowWidth, int WindowTop, int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.PowerPoint.Application app = null;
app = Functions.GetCOMObject(PowerPoint_ProgId) as Microsoft.Office.Interop.PowerPoint.Application;
// If no existing PowerPoint App is open, open a new one
if (app == null)
{
app = new Microsoft.Office.Interop.PowerPoint.Application();
app.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
}
// If there is an existing presentation, don't position the window
bool bThereIsAnExistingPresentation = (app.Presentations.Count > 0);
// Open the PowerPoint Presentation
Microsoft.Office.Interop.PowerPoint.Presentation presentation = null;
presentation = app.Presentations.Open(strArtifactLocation, Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue);
if (presentation != null)
{
// Position the Window
if (!bThereIsAnExistingPresentation)
{
IntPtr hWnd = (IntPtr) app.HWND;
Functions.SetWindowPos(hWnd, IntPtr.Zero, WindowLeft, WindowTop, WindowHeight, WindowWidth, 0);
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Launch(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.PowerPoint.Application app = null;
app = Functions.GetCOMObject(PowerPoint_ProgId) as Microsoft.Office.Interop.PowerPoint.Application;
// If no existing PowerPoint App is open, open a new one
if (app == null)
{
app = new Microsoft.Office.Interop.PowerPoint.Application();
app.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
}
// Open the PowerPoint Presentation
Microsoft.Office.Interop.PowerPoint.Presentation presentation = null;
presentation = app.Presentations.Open(strArtifactLocation, Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue);
if (presentation != null)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Show(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPowerPoints = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.PowerPoint.Presentation>();
foreach (Microsoft.Office.Interop.PowerPoint.Presentation presentation in RunningPowerPoints)
{
if (presentation.FullName.ToLower() == strArtifactLocation.ToLower())
{
switch (presentation.Application.Visible)
{
case Microsoft.Office.Core.MsoTriState.msoTrue:
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
case Microsoft.Office.Core.MsoTriState.msoFalse:
{
presentation.Application.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
//Functions.ShowWindow((IntPtr)presentation.Application.HWND, (int)Functions.WindowAction.SW_SHOW);
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Hide(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPowerPoints = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.PowerPoint.Presentation>();
foreach (Microsoft.Office.Interop.PowerPoint.Presentation presentation in RunningPowerPoints)
{
if (presentation.FullName.ToLower() == strArtifactLocation.ToLower())
{
switch (presentation.Application.Visible)
{
case Microsoft.Office.Core.MsoTriState.msoTrue:
{
presentation.Application.Visible = Microsoft.Office.Core.MsoTriState.msoFalse;
//Functions.ShowWindow((IntPtr)presentation.Application.HWND, (int)Functions.WindowAction.SW_HIDE);
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
case Microsoft.Office.Core.MsoTriState.msoFalse:
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal QueryClose(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPowerPoints = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.PowerPoint.Presentation>();
foreach (Microsoft.Office.Interop.PowerPoint.Presentation presentation in RunningPowerPoints)
{
if (presentation.FullName.ToLower() == strArtifactLocation.ToLower())
{
switch (presentation.Saved)
{
case Microsoft.Office.Core.MsoTriState.msoTrue:
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
case Microsoft.Office.Core.MsoTriState.msoFalse:
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact, out int WindowHeight, out int WindowWidth, out int WindowTop, out int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
WindowTop = 0;
WindowLeft = 0;
WindowWidth = 0;
WindowHeight = 0;
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPowerPoints = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.PowerPoint.Presentation>();
foreach (Microsoft.Office.Interop.PowerPoint.Presentation presentation in RunningPowerPoints)
{
if (presentation.FullName.ToLower() == strArtifactLocation.ToLower())
{
var app = presentation.Application;
// Save this Presentation
if (bAutoSaveArtifact)
presentation.Save();
// Pass out the Window Information
WindowTop = (int) presentation.Application.Top;
WindowLeft = (int) presentation.Application.Left;
WindowHeight = (int) presentation.Application.Height;
WindowWidth = (int)presentation.Application.Width;
// Close this Presentation
presentation.Close();
Marshal.FinalReleaseComObject(presentation); // force clean-up
// Close PowerPoint if there are no more Presentations
if (app.Presentations.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up, kill application for sure
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPowerPoints = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.PowerPoint.Presentation>();
foreach (Microsoft.Office.Interop.PowerPoint.Presentation presentation in RunningPowerPoints)
{
if (presentation.FullName.ToLower() == strArtifactLocation.ToLower())
{
var app = presentation.Application;
// Save this Presentation
if(bAutoSaveArtifact)
presentation.Save();
// Close this Presentation
presentation.Close();
Marshal.FinalReleaseComObject(presentation); // force clean-up
// Close PowerPoint if there are no more Presentations
if (app.Presentations.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up, kill application for sure
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPowerPoints = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.PowerPoint.Presentation>();
foreach (Microsoft.Office.Interop.PowerPoint.Presentation presentation in RunningPowerPoints)
{
if (presentation.FullName.ToLower() == strArtifactLocation.ToLower())
{
var app = presentation.Application;
// Save this Presentation
presentation.Save();
// Close this Presentation
presentation.Close();
Marshal.FinalReleaseComObject(presentation); // force clean-up
// Close PowerPoint if there are no more Presentations
if (app.Presentations.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up, kill application for sure
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Addin.Office")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Addin.Office")]
[assembly: AssemblyCopyright("Copyright © 2010")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("79a22796-d344-456e-90a3-9e28c0f31d31")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,361 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foo.AddIn.Common;
using System.Diagnostics;
// Ignore 'Ambiguity' warning message, seems like no way around those
#pragma warning disable 0467
namespace Foo.Addin.Office
{
public class Publisher_Workspace : IWorkspace
{
public const string Publisher_ProgId = "Publisher.Application";
public FuncRetVal Launch(string strArtifactLocation, int WindowHeight, int WindowWidth, int WindowTop, int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Publisher.Application app = new Microsoft.Office.Interop.Publisher.Application();
// Opens Publisher
Microsoft.Office.Interop.Publisher.Document doc = null;
doc = app.Open(strArtifactLocation, false, false, Microsoft.Office.Interop.Publisher.PbSaveOptions.pbSaveChanges);
// Position the Window
IntPtr hWnd = (IntPtr)doc.ActiveWindow.Hwnd;
Functions.SetWindowPos(hWnd, IntPtr.Zero, WindowLeft, WindowTop, WindowHeight, WindowWidth, 0);
if (doc != null)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Launch(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Publisher.Application app = new Microsoft.Office.Interop.Publisher.Application();
// Opens Publisher
Microsoft.Office.Interop.Publisher.Document doc = null;
doc = app.Open(strArtifactLocation, false, false, Microsoft.Office.Interop.Publisher.PbSaveOptions.pbSaveChanges);
if (doc != null)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Show(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPublisherApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Publisher.Application>();
foreach (Microsoft.Office.Interop.Publisher.Application app in RunningPublisherApps)
{
foreach (Microsoft.Office.Interop.Publisher.Document pubDoc in app.Documents)
{
if (pubDoc.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (pubDoc.ActiveWindow.Visible)
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
else
{
pubDoc.ActiveWindow.Visible = true;
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Hide(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPublisherApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Publisher.Application>();
foreach (Microsoft.Office.Interop.Publisher.Application app in RunningPublisherApps)
{
foreach (Microsoft.Office.Interop.Publisher.Document pubDoc in app.Documents)
{
if (pubDoc.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (!pubDoc.ActiveWindow.Visible)
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
else
{
pubDoc.ActiveWindow.Visible = false;
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal QueryClose(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPublisherApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Publisher.Application>();
foreach (Microsoft.Office.Interop.Publisher.Application app in RunningPublisherApps)
{
foreach (Microsoft.Office.Interop.Publisher.Document pubDoc in app.Documents)
{
if (pubDoc.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (pubDoc.Saved)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact, out int WindowHeight, out int WindowWidth, out int WindowTop, out int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
WindowTop = 0;
WindowLeft = 0;
WindowWidth = 0;
WindowHeight = 0;
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPublisherApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Publisher.Application>();
foreach (Microsoft.Office.Interop.Publisher.Application app in RunningPublisherApps)
{
foreach (Microsoft.Office.Interop.Publisher.Document pubDoc in app.Documents)
{
if (pubDoc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Save the Document
if (bAutoSaveArtifact)
pubDoc.Save();
// Get the Window properties
WindowTop = pubDoc.ActiveWindow.Top;
WindowLeft = pubDoc.ActiveWindow.Left;
WindowWidth = pubDoc.ActiveWindow.Width;
WindowHeight = pubDoc.ActiveWindow.Height;
// Get the Handle
IntPtr hWnd = (IntPtr)pubDoc.ActiveWindow.Hwnd;
Process process = Functions.GetProcessFromHandle(hWnd);
// Send Close Message
if (Functions.SendMessage((IntPtr)hWnd, Functions.FuncEnum.WindowMessage.WM_CLOSE, IntPtr.Zero, IntPtr.Zero) == 0)
{
process.Kill();
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPublisherApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Publisher.Application>();
foreach (Microsoft.Office.Interop.Publisher.Application app in RunningPublisherApps)
{
foreach (Microsoft.Office.Interop.Publisher.Document pubDoc in app.Documents)
{
if (pubDoc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Save the Document
if(bAutoSaveArtifact)
pubDoc.Save();
// Get the Handle
IntPtr hWnd = (IntPtr)pubDoc.ActiveWindow.Hwnd;
Process process = Functions.GetProcessFromHandle(hWnd);
// Send Close Message
if (Functions.SendMessage((IntPtr)hWnd, Functions.FuncEnum.WindowMessage.WM_CLOSE, IntPtr.Zero, IntPtr.Zero) == 0)
{
process.Kill();
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningPublisherApps = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Publisher.Application>();
foreach (Microsoft.Office.Interop.Publisher.Application app in RunningPublisherApps)
{
foreach (Microsoft.Office.Interop.Publisher.Document pubDoc in app.Documents)
{
if (pubDoc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Save the Document
pubDoc.Save();
// Get the Handle
IntPtr hWnd = (IntPtr)pubDoc.ActiveWindow.Hwnd;
Process process = Functions.GetProcessFromHandle(hWnd);
// Send Close Message
if (Functions.SendMessage((IntPtr)hWnd, Functions.FuncEnum.WindowMessage.WM_CLOSE, IntPtr.Zero, IntPtr.Zero) == 0)
{
process.Kill();
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
}
}

View File

@@ -0,0 +1,320 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foo.AddIn.Common;
using System.Runtime.InteropServices;
// Ignore 'Ambiguity' warning message, seems like no way around those
#pragma warning disable 0467
namespace Foo.Addin.Office
{
public class Visio_Workspace : IWorkspace
{
public const string Visio_ProgId = "Visio.Application";
public FuncRetVal Launch(string strArtifactLocation, int WindowHeight, int WindowWidth, int WindowTop, int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Visio.Application app = null;
app = new Microsoft.Office.Interop.Visio.Application();
// Mark the Application as visible
app.Visible = true;
app.Documents.Open(strArtifactLocation);
// ToDo: Check if a new process got created? / or if hWnd exists???
// - Also PERFORM Window Positioning
app.ActiveWindow.SetWindowRect(WindowLeft, WindowTop, WindowWidth, WindowHeight);
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Launch(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Visio.Application app = null;
app = new Microsoft.Office.Interop.Visio.Application();
// Mark the Application as visible
app.Visible = true;
app.Documents.Open(strArtifactLocation);
// Keep Track of all our Excel Instances -- not needed in visio?
///WorkspaceState.Launched_ExcelInstances.Add(app);
retVal.Type = FuncRetValEnum.Action_Succeeded;
//if (!String.IsNullOrEmpty(strArtifactLocation) && (strArtifactLocation.Length > 3))
//{
// Process.Start(strArtifactLocation);
//}
//return FuncDepBoolType.ParametersInvalid;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Show(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningVisioDocs = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Visio.Document>();
foreach (Microsoft.Office.Interop.Visio.Document doc in RunningVisioDocs)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// TO DO - (doc.Application.Documents.Count == 1); not working, why?!?!? odd
bool bIsTrue = (doc.Application.Documents.Count == 1); // not working, why?!?!? odd
//bool bIsTheOnlyDocumentInApp = true;
if (!doc.Application.Visible) // && bIsTheOnlyDocumentInApp)
{
doc.Application.Visible = true;
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Hide(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningVisioDocs = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Visio.Document>();
foreach (Microsoft.Office.Interop.Visio.Document doc in RunningVisioDocs)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// TO DO - (doc.Application.Documents.Count == 1); not working, why?!?!? odd
bool bIsTrue = (doc.Application.Documents.Count == 1); // not working, why?!?!? odd
//bool bIsTheOnlyDocumentInApp = true;
if (doc.Application.Visible) // && bIsTheOnlyDocumentInApp)
{
doc.Application.Visible = false;
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal QueryClose(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningVisioDocs = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Visio.Document>();
foreach (Microsoft.Office.Interop.Visio.Document doc in RunningVisioDocs)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (doc.Saved)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact, out int WindowHeight, out int WindowWidth, out int WindowTop, out int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
WindowTop = 0;
WindowLeft = 0;
WindowWidth = 0;
WindowHeight = 0;
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningVisioDocs = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Visio.Document>();
foreach (Microsoft.Office.Interop.Visio.Document doc in RunningVisioDocs)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (bAutoSaveArtifact)
doc.Save();
var app = doc.Application;
// Get the Window properties
app.ActiveWindow.GetWindowRect(out WindowLeft, out WindowTop, out WindowWidth, out WindowHeight);
doc.Close();
Marshal.FinalReleaseComObject(doc); // Force Clean-up
if (app.Documents.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningVisioDocs = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Visio.Document>();
foreach (Microsoft.Office.Interop.Visio.Document doc in RunningVisioDocs)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
if(bAutoSaveArtifact)
doc.Save();
var app = doc.Application;
doc.Close();
Marshal.FinalReleaseComObject(doc); // Force Clean-up
if (app.Documents.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningVisioDocs = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Visio.Document>();
foreach (Microsoft.Office.Interop.Visio.Document doc in RunningVisioDocs)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
doc.Save();
var app = doc.Application;
doc.Close();
Marshal.FinalReleaseComObject(doc); // Force Clean-up
if (app.Documents.Count == 0)
{
app.Quit();
Marshal.FinalReleaseComObject(app); // force clean-up
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
}
}

424
AddIns/Addin.Office/Word.cs Normal file
View File

@@ -0,0 +1,424 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foo.AddIn.Common;
using System.Runtime.InteropServices;
using System.Reflection;
// Ignore 'Ambiguity' warning message, seems like no way around those
#pragma warning disable 0467
namespace Foo.Addin.Office
{
public class Word_Workspace : IWorkspace
{
public const string Word_ProgId = "Word.Application";
public FuncRetVal Launch(string strArtifactLocation, int WindowHeight, int WindowWidth, int WindowTop, int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Word.Application app = null;
app = Functions.GetCOMObject(Word_ProgId) as Microsoft.Office.Interop.Word.Application;
// If no existing Word App is open, open a new one
if (app == null)
{
app = new Microsoft.Office.Interop.Word.Application();
app.Visible = true;
}
object fileName = strArtifactLocation;
object missing = Missing.Value;
Microsoft.Office.Interop.Word.Document doc = null;
doc = app.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
if (doc != null)
{
// Find the correct Window and position it
foreach (Microsoft.Office.Interop.Word.Window window in doc.Windows)
{
if (window.Document.FullName.ToLower() == strArtifactLocation.ToLower())
{
window.Top = WindowTop;
window.Left = WindowLeft;
window.Height = WindowHeight;
window.Width = WindowWidth;
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Launch(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
Microsoft.Office.Interop.Word.Application app = null;
app = Functions.GetCOMObject(Word_ProgId) as Microsoft.Office.Interop.Word.Application;
// If no existing Word App is open, open a new one
if (app == null)
{
app = new Microsoft.Office.Interop.Word.Application();
app.Visible = true;
}
object fileName = strArtifactLocation;
object missing = Missing.Value;
Microsoft.Office.Interop.Word.Document doc = null;
doc = app.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
if (doc != null)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
}
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Show(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningWordDocuments = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Word.Document>();
foreach (Microsoft.Office.Interop.Word.Document doc in RunningWordDocuments)
{
foreach (Microsoft.Office.Interop.Word.Window window in doc.Windows)
{
if (window.Document.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (!window.Visible)
{
window.Visible = true;
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Hide(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningWordDocuments = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Word.Document>();
foreach (Microsoft.Office.Interop.Word.Document doc in RunningWordDocuments)
{
foreach (Microsoft.Office.Interop.Word.Window window in doc.Windows)
{
if (window.Document.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (window.Visible)
{
window.Visible = false;
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.NoAction_Needed;
return retVal;
}
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal QueryClose(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningWordDocuments = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Word.Document>();
foreach (Microsoft.Office.Interop.Word.Document doc in RunningWordDocuments)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
if (doc.Saved)
{
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
else
{
retVal.Type = FuncRetValEnum.Action_Failed;
return retVal;
}
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact, out int WindowHeight, out int WindowWidth, out int WindowTop, out int WindowLeft)
{
FuncRetVal retVal = new FuncRetVal();
WindowTop = 0;
WindowLeft = 0;
WindowWidth = 0;
WindowHeight = 0;
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningWordDocuments = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Word.Document>();
foreach (Microsoft.Office.Interop.Word.Document doc in RunningWordDocuments)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Found the document to close * Close it Without Prompting *
object saveOption = null;
if (bAutoSaveArtifact)
saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdSaveChanges;
else
saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdOriginalDocumentFormat;
object routeDocument = false;
var app = doc.Application;
// Let's get the Window that belongs to this document
Microsoft.Office.Interop.Word.Window docWindow = null;
foreach (Microsoft.Office.Interop.Word.Window window in doc.Windows)
{
if (window.Document.FullName.ToLower() == strArtifactLocation.ToLower())
docWindow = window;
}
// Get the Window properties
WindowTop = docWindow.Top;
WindowLeft = docWindow.Left;
WindowWidth = docWindow.Width;
WindowHeight = docWindow.Height;
//Object missing = Missing.Value;
doc.Close(ref saveOption, ref originalFormat, ref routeDocument);
Marshal.FinalReleaseComObject(doc); // force clean-up
// Close the Window
if (docWindow != null)
docWindow.Close(ref saveOption, ref routeDocument);
// Close Word if this is the Last Document Instance
if (app.Documents.Count == 0)
{
app.Quit(ref saveOption, ref originalFormat, ref routeDocument);
Marshal.FinalReleaseComObject(docWindow);
Marshal.FinalReleaseComObject(app); // force clean-up, closes Process for sure
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation, bool bAutoSaveArtifact)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningWordDocuments = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Word.Document>();
foreach (Microsoft.Office.Interop.Word.Document doc in RunningWordDocuments)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Found the document to close * Close it Without Prompting *
object saveOption = null;
if (bAutoSaveArtifact)
saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdSaveChanges;
else
saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdOriginalDocumentFormat;
object routeDocument = false;
var app = doc.Application;
// Let's get the Window that belongs to this document
Microsoft.Office.Interop.Word.Window docWindow = null;
foreach (Microsoft.Office.Interop.Word.Window window in doc.Windows)
{
if (window.Document.FullName.ToLower() == strArtifactLocation.ToLower())
docWindow = window;
}
//Object missing = Missing.Value;
doc.Close(ref saveOption, ref originalFormat, ref routeDocument);
Marshal.FinalReleaseComObject(doc); // force clean-up
// Close the Window
if (docWindow != null)
docWindow.Close(ref saveOption, ref routeDocument);
// Close Word if this is the Last Document Instance
if (app.Documents.Count == 0)
{
app.Quit(ref saveOption, ref originalFormat, ref routeDocument);
Marshal.FinalReleaseComObject(docWindow);
Marshal.FinalReleaseComObject(app); // force clean-up, closes Process for sure
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
public FuncRetVal Close(string strArtifactLocation)
{
FuncRetVal retVal = new FuncRetVal();
if (!Validate.IsValidArtifactLocation(strArtifactLocation, ref retVal))
return retVal;
try
{
var RunningWordDocuments = Functions.GetRunningObjectsOfType<Microsoft.Office.Interop.Word.Document>();
foreach (Microsoft.Office.Interop.Word.Document doc in RunningWordDocuments)
{
if (doc.FullName.ToLower() == strArtifactLocation.ToLower())
{
// Found the document to close * Close it Without Prompting *
object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdSaveChanges;
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdOriginalDocumentFormat;
object routeDocument = false;
var app = doc.Application;
// Let's get the Window that belongs to this document
Microsoft.Office.Interop.Word.Window docWindow = null;
foreach (Microsoft.Office.Interop.Word.Window window in doc.Windows)
{
if (window.Document.FullName.ToLower() == strArtifactLocation.ToLower())
docWindow = window;
}
//Object missing = Missing.Value;
doc.Close(ref saveOption, ref originalFormat, ref routeDocument);
Marshal.FinalReleaseComObject(doc); // force clean-up
// Close the Window
if (docWindow != null)
docWindow.Close(ref saveOption, ref routeDocument);
// Close Word if this is the Last Document Instance
if (app.Documents.Count == 0)
{
app.Quit(ref saveOption, ref originalFormat, ref routeDocument);
Marshal.FinalReleaseComObject(docWindow);
Marshal.FinalReleaseComObject(app); // force clean-up, closes Process for sure
}
retVal.Type = FuncRetValEnum.Action_Succeeded;
return retVal;
}
}
retVal.Type = FuncRetValEnum.ArtifactUnavailable;
}
catch (Exception e)
{
retVal.Message = e.Message;
retVal.Type = FuncRetValEnum.ErrorThrown;
}
return retVal;
}
}
}