initial oogynize check in _ this actually used to work!
This commit is contained in:
65
AddIns/AddIn.Common/AddIn.Common.csproj
Normal file
65
AddIns/AddIn.Common/AddIn.Common.csproj
Normal 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>
|
||||
399
AddIns/AddIn.Common/CommonFunctions.cs
Normal file
399
AddIns/AddIn.Common/CommonFunctions.cs
Normal 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
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
31
AddIns/AddIn.Common/CommonTypes.cs
Normal file
31
AddIns/AddIn.Common/CommonTypes.cs
Normal 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
|
||||
}
|
||||
}
|
||||
37
AddIns/AddIn.Common/CommonValidations.cs
Normal file
37
AddIns/AddIn.Common/CommonValidations.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
14
AddIns/AddIn.Common/IAddIn.cs
Normal file
14
AddIns/AddIn.Common/IAddIn.cs
Normal 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
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
14
AddIns/AddIn.Common/IDynResolve.cs
Normal file
14
AddIns/AddIn.Common/IDynResolve.cs
Normal 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
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
24
AddIns/AddIn.Common/IWorkspace.cs
Normal file
24
AddIns/AddIn.Common/IWorkspace.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
36
AddIns/AddIn.Common/Properties/AssemblyInfo.cs
Normal file
36
AddIns/AddIn.Common/Properties/AssemblyInfo.cs
Normal 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")]
|
||||
324
AddIns/Addin.Office/Access.cs
Normal file
324
AddIns/Addin.Office/Access.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
13
AddIns/Addin.Office/AddIn.cs
Normal file
13
AddIns/Addin.Office/AddIn.cs
Normal 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
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
106
AddIns/Addin.Office/Addin.Office.csproj
Normal file
106
AddIns/Addin.Office/Addin.Office.csproj
Normal 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>
|
||||
383
AddIns/Addin.Office/Excel.cs
Normal file
383
AddIns/Addin.Office/Excel.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
379
AddIns/Addin.Office/PowerPoint.cs
Normal file
379
AddIns/Addin.Office/PowerPoint.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
36
AddIns/Addin.Office/Properties/AssemblyInfo.cs
Normal file
36
AddIns/Addin.Office/Properties/AssemblyInfo.cs
Normal 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")]
|
||||
361
AddIns/Addin.Office/Publisher.cs
Normal file
361
AddIns/Addin.Office/Publisher.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
320
AddIns/Addin.Office/Visio.cs
Normal file
320
AddIns/Addin.Office/Visio.cs
Normal 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
424
AddIns/Addin.Office/Word.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user