diff --git a/GreenshotInterop/GreenshotInterop.csproj b/GreenshotInterop/GreenshotInterop.csproj
deleted file mode 100644
index 0e22ab292..000000000
--- a/GreenshotInterop/GreenshotInterop.csproj
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
- Debug
- AnyCPU
- 8.0.30703
- 2.0
- {ADD4E400-56E1-4E31-A5C2-070BEB238A0F}
- Library
- Properties
- GreenshotInterop
- GreenshotInterop
- v2.0
- 512
-
-
-
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
- 3
- false
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
- Off
- 3
- false
-
-
-
-
- ..\Greenshot\Lib\log4net.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/GreenshotInterop/GreenshotInterop.csproj.user b/GreenshotInterop/GreenshotInterop.csproj.user
deleted file mode 100644
index b099bcb03..000000000
--- a/GreenshotInterop/GreenshotInterop.csproj.user
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/GreenshotInterop/OfficeExport/ExcelExporter.cs b/GreenshotInterop/OfficeExport/ExcelExporter.cs
deleted file mode 100644
index d9e077df0..000000000
--- a/GreenshotInterop/OfficeExport/ExcelExporter.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Reflection;
-
-using Greenshot.Interop;
-
-namespace Greenshot.Interop.Office {
- public class ExcelExporter {
- private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ExcelExporter));
-
- public static List GetWorkbooks() {
- List currentWorkbooks = new List();
- using (IExcelApplication excelApplication = COMWrapper.GetInstance()) {
- if (excelApplication != null) {
- for (int i = 1; i <= excelApplication.Workbooks.Count; i++) {
- IWorkbook workbook = excelApplication.Workbooks[i];
- if (workbook != null) {
- currentWorkbooks.Add(workbook.Name);
- }
- }
- }
- }
- return currentWorkbooks;
- }
-
- ///
- /// Insert image from supplied tmp file into the give excel workbook
- ///
- ///
- ///
- public static void InsertIntoExistingWorkbook(string workbookName, string tmpFile) {
- using (IExcelApplication excelApplication = COMWrapper.GetInstance()) {
- if (excelApplication != null) {
- for (int i = 1; i <= excelApplication.Workbooks.Count; i++) {
- IWorkbook workbook = excelApplication.Workbooks[i];
- if (workbook != null && workbook.Name.StartsWith(workbookName)) {
- InsertIntoExistingWorkbook(workbook, tmpFile);
- }
- }
- }
- }
- }
-
- private static void InsertIntoExistingWorkbook(IWorkbook workbook, string tmpFile) {
- IWorksheet sheet = workbook.ActiveSheet;
- if (sheet != null) {
- if (sheet.Pictures != null) {
- sheet.Pictures.Insert(tmpFile);
- }
- } else {
- LOG.Error("No pictures found");
- }
- }
-
- public static void InsertIntoNewWorkbook(string tmpFile) {
- using (IExcelApplication excelApplication = COMWrapper.GetOrCreateInstance()) {
- if (excelApplication != null) {
- excelApplication.Visible = true;
- object template = Missing.Value;
- IWorkbook workbook = excelApplication.Workbooks.Add(template);
- InsertIntoExistingWorkbook(workbook, tmpFile);
- }
- }
- }
- }
-
-}
diff --git a/GreenshotInterop/OfficeExport/OneNoteExporter.cs b/GreenshotInterop/OfficeExport/OneNoteExporter.cs
deleted file mode 100644
index 6a6f14e0e..000000000
--- a/GreenshotInterop/OfficeExport/OneNoteExporter.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-using Greenshot.Interop;
-using System.Reflection;
-using System.Xml;
-using System.IO;
-using System.Drawing;
-using System.Drawing.Imaging;
-using Greenshot.Plugin;
-using GreenshotPlugin.Core;
-
-namespace Greenshot.Interop.Office {
- public class OneNotePage {
- public string PageName { get; set; }
- public string PageID { get; set; }
- }
- public class OneNoteExporter {
- private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(OneNoteExporter));
- private const string XML_IMAGE_CONTENT = "{0}";
- private const string XML_OUTLINE = "{0}";
- private const string ONENOTE_NAMESPACE_2007 = "http://schemas.microsoft.com/office/onenote/2007/onenote";
- private const string ONENOTE_NAMESPACE_2010 = "http://schemas.microsoft.com/office/onenote/2010/onenote";
-
- public static void ExportToPage(Bitmap imageToExport, OneNotePage page) {
- using (MemoryStream pngStream = new MemoryStream()) {
- OutputSettings pngOutputSettings = new OutputSettings(OutputFormat.png, 100, false);
- ImageOutput.SaveToStream(imageToExport, pngStream, pngOutputSettings);
- string base64String = Convert.ToBase64String(pngStream.GetBuffer());
- string imageXmlStr = string.Format(XML_IMAGE_CONTENT, base64String, imageToExport.Width, imageToExport.Height);
- string pageChangesXml = string.Format(XML_OUTLINE, new object[] { imageXmlStr, page.PageID, ONENOTE_NAMESPACE_2010, page.PageName });
- using (IOneNoteApplication oneNoteApplication = COMWrapper.GetOrCreateInstance()) {
- LOG.InfoFormat("Sending XML: {0}", pageChangesXml);
- oneNoteApplication.UpdatePageContent(pageChangesXml, DateTime.MinValue, XMLSchema.xs2010, false);
- }
- }
- }
-
- ///
- /// Get the captions of all the open word documents
- ///
- ///
- public static List GetPages() {
- List pages = new List();
- try {
- using (IOneNoteApplication oneNoteApplication = COMWrapper.GetOrCreateInstance()) {
- if (oneNoteApplication != null) {
- string notebookXml = "";
- oneNoteApplication.GetHierarchy("", HierarchyScope.hsPages, out notebookXml, XMLSchema.xs2010);
- if (!string.IsNullOrEmpty(notebookXml)) {
- LOG.Debug(notebookXml);
- using (StringReader reader = new StringReader(notebookXml)) {
- using (XmlTextReader xmlReader = new XmlTextReader(reader)) {
- while (xmlReader.Read()) {
- if ("one:Page".Equals(xmlReader.Name)) {
- if ("true".Equals(xmlReader.GetAttribute("isCurrentlyViewed"))) {
- OneNotePage page = new OneNotePage();
- page.PageName = xmlReader.GetAttribute("name");
- page.PageID = xmlReader.GetAttribute("ID");
- pages.Add(page);
- // For debugging
- //string pageXml = "";
- //oneNoteApplication.GetPageContent(page.PageID, out pageXml, PageInfo.piAll, XMLSchema.xs2010);
- //LOG.DebugFormat("Page XML: {0}", pageXml);
- }
- }
- }
- }
- }
- }
- }
- }
- } catch (Exception ex) {
- LOG.Warn("Problem retrieving onenote destinations, ignoring: ", ex);
- }
- return pages;
- }
- }
-}
diff --git a/GreenshotInterop/OfficeExport/OutlookEmailExporter.cs b/GreenshotInterop/OfficeExport/OutlookEmailExporter.cs
deleted file mode 100644
index 1004ea439..000000000
--- a/GreenshotInterop/OfficeExport/OutlookEmailExporter.cs
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.IO;
-
-using Microsoft.Win32;
-
-using Greenshot.Interop;
-using Greenshot.Interop.IE;
-using System.Threading;
-
-namespace Greenshot.Interop.Office {
- ///
- /// Outlook exporter has all the functionality to export to outlook
- ///
- public class OutlookEmailExporter {
- private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(OutlookEmailExporter));
- private static readonly string SIGNATURE_PATH = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Microsoft\Signatures");
- private static Version outlookVersion = null;
- private static string currentUser = null;
- private const int OUTLOOK_2003 = 11;
- private const int OUTLOOK_2007 = 12;
- private const int OUTLOOK_2010 = 14;
-
- // The signature key can be found at:
- // HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\\9375CFF0413111d3B88A00104B2A6676\ [New Signature]
- private const string PROFILES_KEY = @"Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\";
- private const string ACCOUNT_KEY = "9375CFF0413111d3B88A00104B2A6676";
- private const string NEW_SIGNATURE_VALUE = "New Signature";
- private const string DEFAULT_PROFILE_VALUE = "DefaultProfile";
-
- ///
- /// A method to retrieve all inspectors which can act as an export target
- ///
- /// bool true if also exporting to meetings
- /// List with inspector captions (window title)
- public static Dictionary RetrievePossibleTargets(bool allowMeetingAsTarget) {
- Dictionary inspectorCaptions = new Dictionary();
- try {
- using (IOutlookApplication outlookApplication = GetOutlookApplication()) {
- if (outlookApplication == null) {
- return null;
- }
-
- using (Inspectors inspectors = outlookApplication.Inspectors) {
- if (inspectors != null && inspectors.Count > 0) {
- for (int i = 1; i <= inspectors.Count; i++) {
- using (Inspector inspector = outlookApplication.Inspectors[i]) {
- string inspectorCaption = inspector.Caption;
- using (Item currentItem = inspector.CurrentItem) {
- if (canExportToInspector(currentItem, allowMeetingAsTarget)) {
- OlObjectClass currentItemClass = currentItem.Class;
- inspectorCaptions.Add(inspector.Caption, currentItemClass);
- }
- }
- }
- }
- }
- }
- }
- } catch (Exception ex) {
- LOG.Warn("Problem retrieving word destinations, ignoring: ", ex);
- }
- return inspectorCaptions;
- }
-
- ///
- /// Return true if we can export to the supplied inspector
- ///
- /// the Item to check
- /// bool true if also exporting to meetings
- ///
- private static bool canExportToInspector(Item currentItem, bool allowMeetingAsTarget) {
- try {
- if (currentItem != null) {
- OlObjectClass currentItemClass = currentItem.Class;
- if (OlObjectClass.olMail.Equals(currentItemClass)) {
- MailItem mailItem = (MailItem)currentItem;
- //MailItem mailItem = COMWrapper.Cast(currentItem);
- LOG.DebugFormat("Mail sent: {0}", mailItem.Sent);
- if (!mailItem.Sent) {
- return true;
- }
- } else if (outlookVersion.Major >= OUTLOOK_2010 && allowMeetingAsTarget && OlObjectClass.olAppointment.Equals(currentItemClass)) {
- //AppointmentItem appointmentItem = COMWrapper.Cast(currentItem);
- AppointmentItem appointmentItem = (AppointmentItem)currentItem;
- if (string.IsNullOrEmpty(appointmentItem.Organizer) || (currentUser != null && currentUser.Equals(appointmentItem.Organizer))) {
- return true;
- } else {
- LOG.DebugFormat("Not exporting, as organizer is {1} and currentuser {2}", appointmentItem.Organizer, currentUser);
- }
- }
- }
- } catch (Exception ex) {
- LOG.WarnFormat("Couldn't process item due to: {0}", ex.Message);
- }
- return false;
- }
-
-
- ///
- /// Export the image stored in tmpFile to the Inspector with the caption
- ///
- /// Caption of the inspector
- /// Path to image file
- /// name of the attachment (used as the tooltip of the image)
- /// true if it worked
- public static bool ExportToInspector(string inspectorCaption, string tmpFile, string attachmentName) {
- // Assume true, although this might cause issues.
- bool allowMeetingAsTarget = true;
- using (IOutlookApplication outlookApplication = GetOrCreateOutlookApplication()) {
- if (outlookApplication != null) {
- Inspectors inspectors = outlookApplication.Inspectors;
- if (inspectors != null && inspectors.Count > 0) {
- LOG.DebugFormat("Got {0} inspectors to check", inspectors.Count);
- for (int i = 1; i <= inspectors.Count; i++) {
- using (Inspector inspector = outlookApplication.Inspectors[i]) {
- string currentCaption = inspector.Caption;
- if (currentCaption.StartsWith(inspectorCaption)) {
- using (Item currentItem = inspector.CurrentItem) {
- if (canExportToInspector(currentItem, allowMeetingAsTarget)) {
- try {
- return ExportToInspector(inspector, currentItem, tmpFile, attachmentName);
- } catch (Exception exExport) {
- LOG.Error("Export to " + currentCaption + " failed.", exExport);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- ///
- /// Export the file to the supplied inspector
- ///
- /// Inspector
- /// Item
- ///
- ///
- ///
- private static bool ExportToInspector(Inspector inspector, Item currentItem, string tmpFile, string attachmentName) {
- if (currentItem == null) {
- LOG.Warn("No current item.");
- return false;
- }
- OlObjectClass itemClass = currentItem.Class;
- bool isMail = OlObjectClass.olMail.Equals(itemClass);
- bool isAppointment = OlObjectClass.olAppointment.Equals(itemClass);
- if (!isMail && !isAppointment) {
- LOG.Warn("Item is no mail or appointment.");
- return false;
- }
- MailItem mailItem = null;
- try {
- if (isMail) {
- //mailItem = COMWrapper.Cast(currentItem);
- mailItem = (MailItem)currentItem;
- if (mailItem.Sent) {
- LOG.WarnFormat("Item already sent, can't export to {0}", currentItem.Subject);
- return false;
- }
- }
-
- // Make sure the inspector is activated, only this way the word editor is active!
- // This also ensures that the window is visible!
- inspector.Activate();
- bool isTextFormat = OlBodyFormat.olFormatPlain.Equals(mailItem.BodyFormat);
- if (isAppointment || !isTextFormat) {
- // Check for wordmail, if so use the wordexporter
- // http://msdn.microsoft.com/en-us/library/dd492012%28v=office.12%29.aspx
- // Earlier versions of Outlook also supported an Inspector.HTMLEditor object property, but since Internet Explorer is no longer the rendering engine for HTML messages and posts, HTMLEditor is no longer supported.
- if (inspector.IsWordMail() && inspector.WordEditor != null) {
- try {
- if (WordExporter.InsertIntoExistingDocument(inspector.WordEditor.Application, inspector.WordEditor, tmpFile)) {
- LOG.Info("Inserted into Wordmail");
-
- // check the format afterwards, otherwise we lose the selection
- //if (!OlBodyFormat.olFormatHTML.Equals(currentMail.BodyFormat)) {
- // LOG.Info("Changing format to HTML.");
- // currentMail.BodyFormat = OlBodyFormat.olFormatHTML;
- //}
- return true;
- }
- } catch (Exception exportException) {
- LOG.Error("Error exporting to the word editor, trying to do it via another method", exportException);
- }
- } else if (isAppointment) {
- LOG.Info("Can't export to an appointment if no word editor is used");
- return false;
- } else {
- LOG.Info("Trying export for outlook < 2007.");
- }
- }
- // Only use mailitem as it should be filled!!
- LOG.InfoFormat("Item '{0}' has format: {1}", mailItem.Subject, mailItem.BodyFormat);
-
- string contentID;
- if (outlookVersion.Major >= OUTLOOK_2007) {
- contentID = Guid.NewGuid().ToString();
- } else {
- LOG.Info("Older Outlook (<2007) found, using filename as contentid.");
- contentID = Path.GetFileName(tmpFile);
- }
-
- // Use this to change the format, it will probably lose the current selection.
- //if (!OlBodyFormat.olFormatHTML.Equals(currentMail.BodyFormat)) {
- // LOG.Info("Changing format to HTML.");
- // currentMail.BodyFormat = OlBodyFormat.olFormatHTML;
- //}
-
- bool inlinePossible = false;
- if (OlBodyFormat.olFormatHTML.Equals(mailItem.BodyFormat)) {
- // if html we can try to inline it
- // The following might cause a security popup... can't ignore it.
- try {
- IHTMLDocument2 document2 = inspector.HTMLEditor as IHTMLDocument2;
- if (document2 != null) {
- IHTMLSelectionObject selection = document2.selection;
- if (selection != null) {
- IHTMLTxtRange range = selection.createRange();
- if (range != null) {
- // First paste, than attach (otherwise the range is wrong!)
- range.pasteHTML("

");
- inlinePossible = true;
- } else {
- LOG.DebugFormat("No range for '{0}'", inspector.Caption);
- }
- } else {
- LOG.DebugFormat("No selection for '{0}'", inspector.Caption);
- }
- } else {
- LOG.DebugFormat("No HTML editor for '{0}'", inspector.Caption);
- }
- } catch (Exception e) {
- // Continue with non inline image
- LOG.Warn("Error pasting HTML, most likely due to an ACCESS_DENIED as the user clicked no.", e);
- }
- }
-
- // Create the attachment (if inlined the attachment isn't visible as attachment!)
- using (Attachment attachment = mailItem.Attachments.Add(tmpFile, OlAttachmentType.olByValue, inlinePossible ? 0 : 1, attachmentName)) {
- if (outlookVersion.Major >= OUTLOOK_2007) {
- // Add the content id to the attachment, this only works for Outlook >= 2007
- try {
- PropertyAccessor propertyAccessor = attachment.PropertyAccessor;
- propertyAccessor.SetProperty(PropTag.ATTACHMENT_CONTENT_ID, contentID);
- } catch {
- }
- }
- }
- } catch (Exception ex) {
- LOG.WarnFormat("Problem while trying to add attachment to Item '{0}' : {1}", inspector.Caption, ex);
- return false;
- }
- LOG.Debug("Finished!");
- return true;
- }
- ///
- /// Export image to a new email
- ///
- ///
- ///
- ///
- private static void ExportToNewEmail(IOutlookApplication outlookApplication, EmailFormat format, string tmpFile, string subject, string attachmentName, string to, string CC, string BCC) {
- Item newItem = outlookApplication.CreateItem(OlItemType.olMailItem);
- if (newItem == null) {
- return;
- }
- //MailItem newMail = COMWrapper.Cast(newItem);
- MailItem newMail = (MailItem)newItem;
- newMail.Subject = subject;
- if (!string.IsNullOrEmpty(to)) {
- newMail.To = to;
- }
- if (!string.IsNullOrEmpty(CC)) {
- newMail.CC = CC;
- }
- if (!string.IsNullOrEmpty(BCC)) {
- newMail.BCC = BCC;
- }
- newMail.BodyFormat = OlBodyFormat.olFormatHTML;
- string bodyString = null;
- // Read the default signature, if nothing found use empty email
- try {
- bodyString = GetOutlookSignature(format);
- } catch (Exception e) {
- LOG.Error("Problem reading signature!", e);
- }
- switch (format) {
- case EmailFormat.Text:
- newMail.Attachments.Add(tmpFile, OlAttachmentType.olByValue, 1, attachmentName);
- newMail.BodyFormat = OlBodyFormat.olFormatPlain;
- if (bodyString == null) {
- bodyString = "";
- }
- newMail.Body = bodyString;
- break;
- case EmailFormat.HTML:
- default:
- string contentID = Path.GetFileName(tmpFile);
- // Create the attachment
- using (Attachment attachment = newMail.Attachments.Add(tmpFile, OlAttachmentType.olByValue, 0, attachmentName)) {
- // add content ID to the attachment
- if (outlookVersion.Major >= OUTLOOK_2007) {
- try {
- contentID = Guid.NewGuid().ToString();
- PropertyAccessor propertyAccessor = attachment.PropertyAccessor;
- propertyAccessor.SetProperty(PropTag.ATTACHMENT_CONTENT_ID, contentID);
- } catch {
- LOG.Info("Error working with the PropertyAccessor, using filename as contentid");
- contentID = Path.GetFileName(tmpFile);
- }
- }
- }
-
- newMail.BodyFormat = OlBodyFormat.olFormatHTML;
- string htmlImgEmbedded = "

";
- string fallbackBody = "" + htmlImgEmbedded + "";
- if (bodyString == null) {
- bodyString = fallbackBody;
- } else {
- int bodyIndex = bodyString.IndexOf("= 0) {
- bodyIndex = bodyString.IndexOf(">", bodyIndex) + 1;
- if (bodyIndex >= 0) {
- bodyString = bodyString.Insert(bodyIndex, htmlImgEmbedded);
- } else {
- bodyString = fallbackBody;
- }
- } else {
- bodyString = fallbackBody;
- }
- }
- newMail.HTMLBody = bodyString;
- break;
- }
- // So not save, otherwise the email is always stored in Draft folder.. (newMail.Save();)
- try {
- newMail.Display(false);
- newMail.GetInspector().Activate();
- } catch (Exception ex) {
- LOG.Warn("Problem displaying the new email, retrying to display it. Problem:", ex);
- Thread retryDisplayEmail = new Thread(delegate() {
- int retries = 10;
- int retryInXSeconds = 5;
- while (retries-- > 0) {
- Thread.Sleep(retryInXSeconds * 1000);
- try {
- newMail.Display(false);
- newMail.GetInspector().Activate();
- LOG.InfoFormat("Managed to display the message.");
- return;
- } catch (Exception displayEx) {
- LOG.WarnFormat("Error displaying message: {0}, retrying to show email in {1} seconds... Retries left: {2}", displayEx, retryInXSeconds, retries);
- }
- }
- LOG.WarnFormat("Retry failed, saving message to draft.");
- try {
- newMail.Save();
- } catch (Exception saveEx) {
- LOG.WarnFormat("Saving message to draft failed: {0}", saveEx);
- }
- });
- retryDisplayEmail.Name = "Retry to display email";
- retryDisplayEmail.IsBackground = true;
- retryDisplayEmail.Start();
- }
- if (newItem != null) {
- newItem.Dispose();
- }
- }
-
- ///
- /// Helper method to create an outlook mail item with attachment
- ///
- /// The file to send, do not delete the file right away!
- /// true if it worked, false if not
- public static bool ExportToOutlook(EmailFormat format, string tmpFile, string subject, string attachmentName, string to, string CC, string BCC) {
- bool exported = false;
- try {
- using (IOutlookApplication outlookApplication = GetOrCreateOutlookApplication()) {
- if (outlookApplication != null) {
- ExportToNewEmail(outlookApplication, format, tmpFile, subject, attachmentName, to, CC, BCC);
- exported = true;
- }
- }
- return exported;
- } catch (Exception e) {
- LOG.Error("Error while creating an outlook mail item: ", e);
- }
- return exported;
- }
-
- ///
- /// Helper method to get the Outlook signature
- ///
- ///
- private static string GetOutlookSignature(EmailFormat format) {
- using (RegistryKey profilesKey = Registry.CurrentUser.OpenSubKey(PROFILES_KEY, false)) {
- if (profilesKey == null) {
- return null;
- }
- string defaultProfile = (string)profilesKey.GetValue(DEFAULT_PROFILE_VALUE);
- LOG.DebugFormat("defaultProfile={0}", defaultProfile);
- using (RegistryKey profileKey = profilesKey.OpenSubKey(defaultProfile + @"\" + ACCOUNT_KEY, false)) {
- if (profilesKey == null) {
- return null;
- }
- string[] numbers = profileKey.GetSubKeyNames();
- foreach (string number in numbers) {
- LOG.DebugFormat("Found subkey {0}", number);
- using (RegistryKey numberKey = profileKey.OpenSubKey(number, false)) {
- byte[] val = (byte[])numberKey.GetValue(NEW_SIGNATURE_VALUE);
- if (val == null) {
- continue;
- }
- string signatureName = "";
- foreach (byte b in val) {
- if (b != 0) {
- signatureName += (char)b;
- }
- }
- LOG.DebugFormat("Found email signature: {0}", signatureName);
- string extension;
- switch (format) {
- case EmailFormat.Text:
- extension = ".txt";
- break;
- case EmailFormat.HTML:
- default:
- extension = ".htm";
- break;
- }
- string signatureFile = Path.Combine(SIGNATURE_PATH, signatureName + extension);
- if (File.Exists(signatureFile)) {
- LOG.DebugFormat("Found email signature file: {0}", signatureFile);
- return File.ReadAllText(signatureFile, Encoding.Default);
- }
- }
- }
- }
- }
- return null;
- }
-
- ///
- /// Initialize static outlook variables like version and currentuser
- ///
- ///
- private static void InitializeVariables(IOutlookApplication outlookApplication) {
- if (outlookApplication == null || outlookVersion != null) {
- return;
- }
- try {
- outlookVersion = new Version(outlookApplication.Version);
- LOG.InfoFormat("Using Outlook {0}", outlookVersion);
- } catch (Exception exVersion) {
- LOG.Error(exVersion);
- LOG.Warn("Assuming outlook version 1.");
- outlookVersion = new Version(1, 1, 1, 1);
- }
- // Preventing retrieval of currentUser if Outlook is older than 2007
- if (outlookVersion.Major >= OUTLOOK_2007) {
- try {
- INameSpace mapiNamespace = outlookApplication.GetNameSpace("MAPI");
- currentUser = mapiNamespace.CurrentUser.Name;
- LOG.InfoFormat("Current user: {0}", currentUser);
- } catch (Exception exNS) {
- LOG.Error(exNS);
- }
- }
- }
-
- ///
- /// Call this to get the running outlook application, returns null if there isn't any.
- ///
- /// IOutlookApplication or null
- private static IOutlookApplication GetOutlookApplication() {
- IOutlookApplication outlookApplication = COMWrapper.GetInstance();
- InitializeVariables(outlookApplication);
- return outlookApplication;
- }
-
- ///
- /// Call this to get the running outlook application, or create a new instance
- ///
- /// IOutlookApplication
- private static IOutlookApplication GetOrCreateOutlookApplication() {
- IOutlookApplication outlookApplication = COMWrapper.GetOrCreateInstance();
- InitializeVariables(outlookApplication);
- return outlookApplication;
- }
- }
-
-}
diff --git a/GreenshotInterop/OfficeExport/PowerpointExporter.cs b/GreenshotInterop/OfficeExport/PowerpointExporter.cs
deleted file mode 100644
index f99a2a012..000000000
--- a/GreenshotInterop/OfficeExport/PowerpointExporter.cs
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Text;
-
-using Greenshot.Interop;
-
-namespace Greenshot.Interop.Office {
- public class PowerpointExporter {
- private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(PowerpointExporter));
- private static string version = null;
-
- public static bool isAfter2003() {
- if (version != null) {
- return !version.StartsWith("11");
- }
- return false;
- }
- ///
- /// Get the captions of all the open powerpoint presentations
- ///
- ///
- public static System.Collections.Generic.List GetPowerpointPresentations() {
- System.Collections.Generic.List presentations = new System.Collections.Generic.List();
- try {
- using (IPowerpointApplication powerpointApplication = COMWrapper.GetInstance()) {
- if (powerpointApplication != null) {
- if (version == null) {
- version = powerpointApplication.Version;
- }
- LOG.DebugFormat("Open Presentations: {0}", powerpointApplication.Presentations.Count);
- for (int i = 1; i <= powerpointApplication.Presentations.Count; i++) {
- IPresentation presentation = powerpointApplication.Presentations.item(i);
- if (presentation != null && presentation.ReadOnly != MsoTriState.msoTrue) {
- if (isAfter2003()) {
- if (presentation.Final) {
- continue;
- }
- }
- presentations.Add(presentation.Name);
- }
- }
- }
- }
- } catch (Exception ex) {
- LOG.Warn("Problem retrieving word destinations, ignoring: ", ex);
- }
-
- return presentations;
- }
-
- ///
- /// Export the image from the tmpfile to the presentation with the supplied name
- ///
- /// Name of the presentation to insert to
- /// Filename of the image file to insert
- /// Size of the image
- /// A string with the image title
- ///
- public static bool ExportToPresentation(string presentationName, string tmpFile, Size imageSize, string title) {
- using (IPowerpointApplication powerpointApplication = COMWrapper.GetInstance()) {
- if (powerpointApplication != null) {
- LOG.DebugFormat("Open Presentations: {0}", powerpointApplication.Presentations.Count);
- for (int i = 1; i <= powerpointApplication.Presentations.Count; i++) {
- IPresentation presentation = powerpointApplication.Presentations.item(i);
- if (presentation != null && presentation.Name.StartsWith(presentationName)) {
- try {
- AddPictureToPresentation(presentation, tmpFile, imageSize, title);
- return true;
- } catch (Exception e) {
- LOG.Error(e);
- }
- }
- }
- }
- }
- return false;
- }
-
- private static void AddPictureToPresentation(IPresentation presentation, string tmpFile, Size imageSize, string title) {
- if (presentation != null) {
- //ISlide slide = presentation.Slides.AddSlide( presentation.Slides.Count + 1, PPSlideLayout.ppLayoutPictureWithCaption);
- ISlide slide;
- float left = (presentation.PageSetup.SlideWidth / 2) - (imageSize.Width / 2) ;
- float top = (presentation.PageSetup.SlideHeight / 2) - (imageSize.Height / 2);
- float width = imageSize.Width;
- float height = imageSize.Height;
- bool isLayoutPictureWithCaption = false;
- IShape shapeForCaption = null;
- bool hasScaledWidth = false;
- bool hasScaledHeight = false;
- try {
- slide = presentation.Slides.Add(presentation.Slides.Count + 1, (int)PPSlideLayout.ppLayoutPictureWithCaption);
- isLayoutPictureWithCaption = true;
- // Shapes[2] is the image shape on this layout.
- shapeForCaption = slide.Shapes.item(1);
- IShape shapeForLocation = slide.Shapes.item(2);
-
- if (width > shapeForLocation.Width) {
- width = shapeForLocation.Width;
- left = shapeForLocation.Left;
- hasScaledWidth = true;
- } else {
- shapeForLocation.Left = left;
- }
- shapeForLocation.Width = imageSize.Width;
-
- if (height > shapeForLocation.Height) {
- height = shapeForLocation.Height;
- top = shapeForLocation.Top;
- hasScaledHeight = true;
- } else {
- top = (shapeForLocation.Top + (shapeForLocation.Height / 2)) - (imageSize.Height / 2);
- }
- shapeForLocation.Height = imageSize.Height;
- } catch (Exception e) {
- LOG.Error(e);
- slide = presentation.Slides.Add(presentation.Slides.Count + 1, (int)PPSlideLayout.ppLayoutBlank);
- }
- IShape shape = slide.Shapes.AddPicture(tmpFile, MsoTriState.msoFalse, MsoTriState.msoTrue, 0, 0, width, height);
- shape.LockAspectRatio = MsoTriState.msoTrue;
- shape.ScaleHeight(1, MsoTriState.msoTrue, MsoScaleFrom.msoScaleFromMiddle);
- shape.ScaleWidth(1, MsoTriState.msoTrue, MsoScaleFrom.msoScaleFromMiddle);
- if (hasScaledWidth) {
- shape.Width = width;
- }
- if (hasScaledHeight) {
- shape.Height = height;
- }
- shape.Left = left;
- shape.Top = top;
- shape.AlternativeText = title;
- if (isLayoutPictureWithCaption && shapeForCaption != null) {
- try {
- // Using try/catch to make sure problems with the text range don't give an exception.
- ITextFrame textFrame = shapeForCaption.TextFrame;
- textFrame.TextRange.Text = title;
- } catch (Exception ex) {
- LOG.Warn("Problem setting the title to a text-range", ex);
- }
- }
- presentation.Application.ActiveWindow.View.GotoSlide(slide.SlideNumber);
- presentation.Application.Activate();
- }
- }
-
- public static bool InsertIntoNewPresentation(string tmpFile, Size imageSize, string title) {
- bool isPictureAdded = false;
- using (IPowerpointApplication powerpointApplication = COMWrapper.GetOrCreateInstance()) {
- if (powerpointApplication != null) {
- powerpointApplication.Visible = true;
- IPresentation presentation = powerpointApplication.Presentations.Add(MsoTriState.msoTrue);
- try {
- AddPictureToPresentation(presentation, tmpFile, imageSize, title);
- isPictureAdded = true;
- presentation.Application.Activate();
- } catch (Exception e) {
- LOG.Error(e);
- }
- }
- }
- return isPictureAdded;
- }
- }
-}
diff --git a/GreenshotInterop/OfficeExport/WordExporter.cs b/GreenshotInterop/OfficeExport/WordExporter.cs
deleted file mode 100644
index ed22f0221..000000000
--- a/GreenshotInterop/OfficeExport/WordExporter.cs
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-using Greenshot.Interop;
-
-namespace Greenshot.Interop.Office {
- public class WordExporter {
- private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(WordExporter));
- private static string version = null;
-
- public static bool isAfter2003() {
- if (version != null) {
- return !version.StartsWith("11");
- }
- return false;
- }
- ///
- /// Insert the bitmap stored under the tempfile path into the word document with the supplied caption
- ///
- ///
- ///
- ///
- public static bool InsertIntoExistingDocument(string wordCaption, string tmpFile) {
- using (IWordApplication wordApplication = COMWrapper.GetInstance()) {
- if (wordApplication != null) {
- for (int i = 1; i <= wordApplication.Documents.Count; i++) {
- using (IWordDocument wordDocument = wordApplication.Documents.item(i)) {
- if (wordDocument.ActiveWindow.Caption.StartsWith(wordCaption)) {
- return InsertIntoExistingDocument(wordApplication, wordDocument, tmpFile);
- }
- }
- }
- }
- }
- return false;
- }
-
- ///
- /// Internal method for the insert
- ///
- ///
- ///
- ///
- ///
- internal static bool InsertIntoExistingDocument(IWordApplication wordApplication, IWordDocument wordDocument, string tmpFile) {
- if (wordApplication.Selection != null) {
- AddPictureToSelection(wordApplication.Selection, tmpFile);
- try {
- wordDocument.ActiveWindow.ActivePane.View.Zoom.Percentage = 100;
- } catch (Exception e) {
- if (e.InnerException != null) {
- LOG.WarnFormat("Couldn't set zoom to 100, error: {0}", e.InnerException.Message);
- } else {
- LOG.WarnFormat("Couldn't set zoom to 100, error: {0}", e.Message);
- }
- }
- try {
- wordApplication.Activate();
- } catch {}
- try {
- wordDocument.Activate();
- } catch {}
- try {
- wordDocument.ActiveWindow.Activate();
- } catch {}
- return true;
- }
- return false;
- }
-
- private static void AddPictureToSelection(ISelection selection, string tmpFile) {
- selection.InlineShapes.AddPicture(tmpFile, false, true, Type.Missing);
- selection.InsertAfter("\r\n");
- }
-
- public static void InsertIntoNewDocument(string tmpFile) {
- using (IWordApplication wordApplication = COMWrapper.GetOrCreateInstance()) {
- if (wordApplication != null) {
- wordApplication.Visible = true;
- wordApplication.Activate();
- // Create new Document
- object template = string.Empty;
- object newTemplate = false;
- object documentType = 0;
- object documentVisible = true;
- IWordDocument wordDocument = wordApplication.Documents.Add(ref template, ref newTemplate, ref documentType, ref documentVisible);
- // Add Picture
- AddPictureToSelection(wordApplication.Selection, tmpFile);
- wordDocument.Activate();
- wordDocument.ActiveWindow.Activate();
- }
- }
- }
-
- ///
- /// Get the captions of all the open word documents
- ///
- ///
- public static List GetWordDocuments() {
- List documents = new List();
- try {
- using (IWordApplication wordApplication = COMWrapper.GetInstance()) {
- if (wordApplication != null) {
- if (version == null) {
- version = wordApplication.Version;
- }
- for (int i = 1; i <= wordApplication.Documents.Count; i++) {
- IWordDocument document = wordApplication.Documents.item(i);
- if (document.ReadOnly) {
- continue;
- }
- if (isAfter2003()) {
- if (document.Final) {
- continue;
- }
- }
- documents.Add(document.ActiveWindow.Caption);
- }
- }
- }
- } catch (Exception ex) {
- LOG.Warn("Problem retrieving word destinations, ignoring: ", ex);
- }
- return documents;
- }
- }
-}
diff --git a/GreenshotInterop/OfficeInterop/ExcelInterop.cs b/GreenshotInterop/OfficeInterop/ExcelInterop.cs
deleted file mode 100644
index 4134d1952..000000000
--- a/GreenshotInterop/OfficeInterop/ExcelInterop.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-namespace Greenshot.Interop.Office {
- // See http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.application.aspx
- [ComProgId("Excel.Application")]
- public interface IExcelApplication : Common {
- IWorkbook ActiveWorkbook { get; }
- //ISelection Selection {get;}
- IWorkbooks Workbooks { get; }
- bool Visible { get; set; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.aspx
- public interface IWorkbooks : Common, Collection {
- IWorkbook Add(object template);
- // Use index + 1!!
- IWorkbook this[object Index] { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbook.aspx
- public interface IWorkbook : Common {
- IWorksheet ActiveSheet { get; }
- string Name { get; }
- void Activate();
- IWorksheets Worksheets { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._worksheet_members.aspx
- public interface IWorksheet : Common {
- IPictures Pictures { get; }
- string Name { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.iworksheets_members.aspx
- public interface IWorksheets : Common, Collection {
- // Use index + 1!!
- IWorksheet this[object Index] { get; }
- }
-
- public interface IPictures : Common, Collection {
- // Use index + 1!!
- //IPicture this[object Index] { get; }
- void Insert(string file);
- }
-}
diff --git a/GreenshotInterop/OfficeInterop/OfficeCommunicator.cs b/GreenshotInterop/OfficeInterop/OfficeCommunicator.cs
deleted file mode 100644
index f659d12b3..000000000
--- a/GreenshotInterop/OfficeInterop/OfficeCommunicator.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Greenshot.Interop;
-using Greenshot.Interop.Office;
-
-namespace GreenshotInterop.OfficeInterop {
- // See: http://msdn.microsoft.com/en-us/library/bb758788%28v=office.12%29
- [ComProgId("Communicator.UIAutomation")]
- public interface IMessenger : Common {
- void AutoSignin();
- string MyServiceId {
- get;
- }
- IMessengerContact GetContact(string signinName, string serviceId);
- IMessengerWindow InstantMessage(string contact);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/bb787250%28v=office.12%29
- public interface IMessengerContact : Common {
- string FriendlyName {
- get;
- }
- string ServiceName {
- get;
- }
- string ServiceId {
- get;
- }
- string SigninName {
- get;
- }
- MISTATUS Status {
- get;
- }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/bb787207%28v=office.12%29
- public enum MISTATUS {
- MISTATUS_UNKNOWN = 0x0000,
- MISTATUS_OFFLINE = 0x0001,
- MISTATUS_ONLINE = 0x0002,
- MISTATUS_INVISIBLE = 0x0006,
- MISTATUS_BUSY = 0x000A,
- MISTATUS_BE_RIGHT_BACK = 0x000E,
- MISTATUS_IDLE = 0x0012,
- MISTATUS_AWAY = 0x0022,
- MISTATUS_ON_THE_PHONE = 0x0032,
- MISTATUS_OUT_TO_LUNCH = 0x0042,
- MISTATUS_IN_A_MEETING = 0x0052,
- MISTATUS_OUT_OF_OFFICE = 0x0062,
- MISTATUS_DO_NOT_DISTURB = 0x0072,
- MISTATUS_IN_A_CONFERENCE = 0x0082,
- MISTATUS_ALLOW_URGENT_INTERRUPTIONS = 0x0092,
- MISTATUS_MAY_BE_AVAILABLE = 0x00A2,
- MISTATUS_CUSTOM = 0x00B2,
- MISTATUS_LOCAL_FINDING_SERVER = 0x0100,
- MISTATUS_LOCAL_CONNECTING_TO_SERVER = 0x0200,
- MISTATUS_LOCAL_SYNCHRONIZING_WITH_SERVER = 0x0300,
- MISTATUS_LOCAL_DISCONNECTING_FROM_SERVER = 0x0400
- } ;
-
- // See: http://msdn.microsoft.com/en-us/library/bb758816%28v=office.12%29
- public interface IMessengerWindow : Common {
- bool IsClosed {
- get;
- }
- void Show();
- }
-
-}
diff --git a/GreenshotInterop/OfficeInterop/OfficeInterop.cs b/GreenshotInterop/OfficeInterop/OfficeInterop.cs
deleted file mode 100644
index b69ca3045..000000000
--- a/GreenshotInterop/OfficeInterop/OfficeInterop.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System.Collections;
-
-namespace Greenshot.Interop.Office {
- ///
- /// If the "type" this[object index] { get; } is implemented, use index + 1!!! (starts at 1)
- ///
- public interface Collection : Common, IEnumerable {
- int Count { get; }
- void Remove(int index);
- }
-}
diff --git a/GreenshotInterop/OfficeInterop/OneNoteInterop.cs b/GreenshotInterop/OfficeInterop/OneNoteInterop.cs
deleted file mode 100644
index 9b3d1ad91..000000000
--- a/GreenshotInterop/OfficeInterop/OneNoteInterop.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-
-namespace Greenshot.Interop.Office {
- // More details about OneNote: http://msdn.microsoft.com/en-us/magazine/ff796230.aspx
-
- // See http://msdn.microsoft.com/de-de/library/microsoft.office.interop.word.applicationclass_members%28v=Office.11%29.aspx
- [ComProgId("OneNote.Application")]
- public interface IOneNoteApplication : Common {
- ///
- /// Make sure that the notebookXml is of type string, e.g. "", otherwise a type error occurs.
- /// For more info on the methods: http://msdn.microsoft.com/en-us/library/gg649853.aspx
- ///
- void GetHierarchy(string startNode, HierarchyScope scope, out string notebookXml, XMLSchema schema);
- void UpdatePageContent(string pageChangesXml, DateTime dateExpectedLastModified, XMLSchema schema, bool force);
- void GetPageContent(string pageId, out string pageXml, PageInfo pageInfoToExport, XMLSchema schema);
- }
-
- public enum PageInfo {
- piBasic = 0, // Returns only basic page content, without selection markup and binary data objects. This is the standard value to pass.
- piBinaryData = 1, // Returns page content with no selection markup, but with all binary data.
- piSelection = 2, // Returns page content with selection markup, but no binary data.
- piBinaryDataSelection = 3, // Returns page content with selection markup and all binary data.
- piAll = 3 // Returns all page content.
- }
-
- public enum HierarchyScope {
- hsSelf = 0, // Gets just the start node specified and no descendants.
- hsChildren = 1, //Gets the immediate child nodes of the start node, and no descendants in higher or lower subsection groups.
- hsNotebooks = 2, // Gets all notebooks below the start node, or root.
- hsSections = 3, //Gets all sections below the start node, including sections in section groups and subsection groups.
- hsPages = 4 //Gets all pages below the start node, including all pages in section groups and subsection groups.
- }
-
- public enum XMLSchema {
- xs2007 = 0,
- xs2010 = 1,
- xsCurrent= xs2010
- }
-}
diff --git a/GreenshotInterop/OfficeInterop/OutlookInterop.cs b/GreenshotInterop/OfficeInterop/OutlookInterop.cs
deleted file mode 100644
index fc33fb0a5..000000000
--- a/GreenshotInterop/OfficeInterop/OutlookInterop.cs
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-using System.Collections;
-
-///
-/// This utils class should help setting the content-id on the attachment for Outlook < 2007
-/// But this somehow doesn't work yet
-///
-namespace Greenshot.Interop.Office {
- ///
- /// See: http://msdn.microsoft.com/en-us/library/bb208387%28v=office.12%29.aspx
- ///
- public interface Items : Collection, IEnumerable {
- Item this[object index] { get; }
- Item GetFirst();
- Item GetNext();
- Item GetLast();
- Item GetPrevious();
-
- bool IncludeRecurrences {
- get;
- set;
- }
-
- Items Restrict(string filter);
- void Sort(string property, object descending);
-
- // Actual definition is "object Add( object )", just making it convenient
- object Add(OlItemType type);
- }
-
- // Common attributes of all the Items (MailItem, AppointmentItem)
- // See: http://msdn.microsoft.com/en-us/library/ff861252.aspx
- public interface Item : Common {
- Attachments Attachments { get; }
- string Body { get; set; }
- OlObjectClass Class { get; }
- DateTime CreationTime { get; }
- string EntryID { get; }
- DateTime LastModificationTime { get; }
- string MessageClass { get; set; }
- bool NoAging { get; set; }
- int OutlookInternalVersion { get; }
- string OutlookVersion { get; }
- bool Saved { get; }
- OlSensitivity Sensitivity { get; set; }
- int Size { get; }
- string Subject { get; set; }
- bool UnRead { get; set; }
- object Copy();
- void Display(bool Modal);
- void Save();
- PropertyAccessor PropertyAccessor { get; }
- Inspector GetInspector();
- }
-
- // See: http://msdn.microsoft.com/en-us/library/ff861252.aspx
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.mailitem.aspx
- public interface MailItem : Item, Common {
- bool Sent { get; }
- object MAPIOBJECT { get; }
- string HTMLBody { get; set; }
- DateTime ExpiryTime { get; set; }
- DateTime ReceivedTime { get; }
- string SenderName { get; }
- DateTime SentOn { get; }
- OlBodyFormat BodyFormat { get; set; }
- string To { get; set; }
- string CC { get; set; }
- string BCC { get; set; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/ff869026.aspx
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.appointmentitem.aspx
- public interface AppointmentItem : Item, Common {
- string Organizer { get; set; }
- string SendUsingAccount { get; }
- string Categories { get; }
- DateTime Start { get; }
- DateTime End { get; }
- OlReoccurenceState RecurrenceState { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.contactitem.aspx
- public interface ContactItem : Item, Common {
- bool HasPicture {
- get;
- }
- void SaveBusinessCardImage(string path);
- void AddPicture(string path);
- void RemovePicture();
- string FirstName {
- get;
- set;
- }
- string LastName {
- get;
- set;
- }
- }
-
- public interface Attachments : Collection {
- Attachment Add(object source, object type, object position, object displayName);
- // Use index+1!!!!
- Attachment this[object index] { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.attachment_members.aspx
- public interface Attachment : Common {
- string DisplayName { get; set; }
- string FileName { get; }
- OlAttachmentType Type { get; }
- PropertyAccessor PropertyAccessor { get; }
- object MAPIOBJECT { get; }
- void SaveAsFile(string path);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.propertyaccessor_members.aspx
- public interface PropertyAccessor : Common {
- void SetProperty(string SchemaName, Object Value);
- Object GetProperty(string SchemaName);
- }
-
- // Schema definitions for the MAPI properties
- // See: http://msdn.microsoft.com/en-us/library/aa454438.aspx
- // and see: http://msdn.microsoft.com/en-us/library/bb446117.aspx
- public static class PropTag {
- public const string ATTACHMENT_CONTENT_ID = @"http://schemas.microsoft.com/mapi/proptag/0x3712001E";
- }
- ///
- /// Wrapper for Outlook.Application, see: http://msdn.microsoft.com/en-us/library/aa210897%28v=office.11%29.aspx
- ///
- [ComProgId("Outlook.Application")]
- public interface IOutlookApplication : Common {
- string Name { get; }
- string Version { get; }
- Item CreateItem(OlItemType ItemType);
- object CreateItemFromTemplate(string TemplatePath, object InFolder);
- object CreateObject(string ObjectName);
- Inspector ActiveInspector();
- Inspectors Inspectors { get; }
- INameSpace GetNameSpace(string type);
- }
-
- ///
- /// See: http://msdn.microsoft.com/en-us/library/bb176693%28v=office.12%29.aspx
- ///
- public interface INameSpace : Common {
- IRecipient CurrentUser { get; }
- IFolder GetDefaultFolder(OlDefaultFolders defaultFolder);
- }
-
- ///
- /// See: http://msdn.microsoft.com/en-us/library/bb176362%28v=office.12%29.aspx
- ///
- public interface IFolder : Common {
- Items Items {get;}
- }
-
- public interface IRecipient : Common {
- string Name { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.inspector_members.aspx
- public interface Inspector : Common {
- Item CurrentItem { get; }
- OlEditorType EditorType { get; }
- object ModifiedFormPages { get; }
- void Close(OlInspectorClose SaveMode);
- void Display(object Modal);
- void HideFormPage(string PageName);
- bool IsWordMail();
- void SetCurrentFormPage(string PageName);
- void ShowFormPage(string PageName);
- object HTMLEditor { get; }
- IWordDocument WordEditor { get; }
- string Caption { get; }
- int Height { get; set; }
- int Left { get; set; }
- int Top { get; set; }
- int Width { get; set; }
- OlWindowState WindowState { get; set; }
- void Activate();
- void SetControlItemProperty(object Control, string PropertyName);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook._application.inspectors.aspx
- public interface Inspectors : Common, Collection, IEnumerable {
- // Use index + 1!!
- Inspector this[Object Index] { get; }
- }
-
- ///
- /// Specifies which EmailFormat the email needs to use
- ///
- public enum EmailFormat {
- Text, HTML
- }
- public enum OlBodyFormat {
- // Fields
- olFormatHTML = 2,
- olFormatPlain = 1,
- olFormatRichText = 3,
- olFormatUnspecified = 0
- }
-
- public enum OlAttachmentType {
- // Fields
- olByReference = 4,
- olByValue = 1,
- olEmbeddeditem = 5,
- olOLE = 6
- }
-
- public enum OlSensitivity {
- // Fields
- olConfidential = 3,
- olNormal = 0,
- olPersonal = 1,
- olPrivate = 2
- }
-
- // See: http://msdn.microsoft.com/en-us/library/ff863329.aspx
- public enum OlObjectClass {
- olAccount = 105, // Represents an Account object.
- olAccountRuleCondition = 135, // Represents an AccountRuleCondition object.
- olAccounts = 106, // Represents an Accounts object.
- olAction = 32, // Represents an Action object.
- olActions = 33, // Represents an Actions object.
- olAddressEntries = 21, // Represents an AddressEntries object.
- olAddressEntry = 8, // Represents an AddressEntry object.
- olAddressList = 7, // Represents an AddressList object.
- olAddressLists = 20, // Represents an AddressLists object.
- olAddressRuleCondition = 170, // Represents an AddressRuleCondition object.
- olApplication = 0, // Represents an Application object.
- olAppointment = 26, // Represents an AppointmentItem object.
- olAssignToCategoryRuleAction = 122, // Represents an AssignToCategoryRuleAction object.
- olAttachment = 5, // Represents an Attachment object.
- olAttachments = 18, // Represents an Attachments object.
- olAttachmentSelection = 169, // Represents an AttachmentSelection object.
- olAutoFormatRule = 147, // Represents an AutoFormatRule object.
- olAutoFormatRules = 148, // Represents an AutoFormatRules object.
- olCalendarModule = 159, // Represents a CalendarModule object.
- olCalendarSharing = 151, // Represents a CalendarSharing object.
- olCategories = 153, // Represents a Categories object.
- olCategory = 152, // Represents a Category object.
- olCategoryRuleCondition = 130, // Represents a CategoryRuleCondition object.
- olClassBusinessCardView = 168, // Represents a BusinessCardView object.
- olClassCalendarView = 139, // Represents a CalendarView object.
- olClassCardView = 138, // Represents a CardView object.
- olClassIconView = 137, // Represents a IconView object.
- olClassNavigationPane = 155, // Represents a NavigationPane object.
- olClassTableView = 136, // Represents a TableView object.
- olClassTimeLineView = 140, // Represents a TimelineView object.
- olClassTimeZone = 174, // Represents a TimeZone object.
- olClassTimeZones = 175, // Represents a TimeZones object.
- olColumn = 154, // Represents a Column object.
- olColumnFormat = 149, // Represents a ColumnFormat object.
- olColumns = 150, // Represents a Columns object.
- olConflict = 102, // Represents a Conflict object.
- olConflicts = 103, // Represents a Conflicts object.
- olContact = 40, // Represents a ContactItem object.
- olContactsModule = 160, // Represents a ContactsModule object.
- olDistributionList = 69, // Represents a ExchangeDistributionList object.
- olDocument = 41, // Represents a DocumentItem object.
- olException = 30, // Represents an Exception object.
- olExceptions = 29, // Represents an Exceptions object.
- olExchangeDistributionList = 111, // Represents an ExchangeDistributionList object.
- olExchangeUser = 110, // Represents an ExchangeUser object.
- olExplorer = 34, // Represents an Explorer object.
- olExplorers = 60, // Represents an Explorers object.
- olFolder = 2, // Represents a Folder object.
- olFolders = 15, // Represents a Folders object.
- olFolderUserProperties = 172, // Represents a UserDefinedProperties object.
- olFolderUserProperty = 171, // Represents a UserDefinedProperty object.
- olFormDescription = 37, // Represents a FormDescription object.
- olFormNameRuleCondition = 131, // Represents a FormNameRuleCondition object.
- olFormRegion = 129, // Represents a FormRegion object.
- olFromRssFeedRuleCondition = 173, // Represents a FromRssFeedRuleCondition object.
- olFromRuleCondition = 132, // Represents a ToOrFromRuleCondition object.
- olImportanceRuleCondition = 128, // Represents an ImportanceRuleCondition object.
- olInspector = 35, // Represents an Inspector object.
- olInspectors = 61, // Represents an Inspectors object.
- olItemProperties = 98, // Represents an ItemProperties object.
- olItemProperty = 99, // Represents an ItemProperty object.
- olItems = 16, // Represents an Items object.
- olJournal = 42, // Represents a JournalItem object.
- olJournalModule = 162, // Represents a JournalModule object.
- olLink = 75, // Represents a Link object.
- olLinks = 76, // Represents a Links object.
- olMail = 43, // Represents a MailItem object.
- olMailModule = 158, // Represents a MailModule object.
- olMarkAsTaskRuleAction = 124, // Represents a MarkAsTaskRuleAction object.
- olMeetingCancellation = 54, // Represents a MeetingItem object that is a meeting cancellation notice.
- olMeetingRequest = 53, // Represents a MeetingItem object that is a meeting request.
- olMeetingResponseNegative = 55, // Represents a MeetingItem object that is a refusal of a meeting request.
- olMeetingResponsePositive = 56, // Represents a MeetingItem object that is an acceptance of a meeting request.
- olMeetingResponseTentative = 57, // Represents a MeetingItem object that is a tentative acceptance of a meeting request.
- olMoveOrCopyRuleAction = 118, // Represents a MoveOrCopyRuleAction object.
- olNamespace = 1, // Represents a NameSpace object.
- olNavigationFolder = 167, // Represents a NavigationFolder object.
- olNavigationFolders = 166, // Represents a NavigationFolders object.
- olNavigationGroup = 165, // Represents a NavigationGroup object.
- olNavigationGroups = 164, // Represents a NavigationGroups object.
- olNavigationModule = 157, // Represents a NavigationModule object.
- olNavigationModules = 156, // Represents a NavigationModules object.
- olNewItemAlertRuleAction = 125, // Represents a NewItemAlertRuleAction object.
- olNote = 44, // Represents a NoteItem object.
- olNotesModule = 163, // Represents a NotesModule object.
- olOrderField = 144, // Represents an OrderField object.
- olOrderFields = 145, // Represents an OrderFields object.
- olOutlookBarGroup = 66, // Represents an OutlookBarGroup object.
- olOutlookBarGroups = 65, // Represents an OutlookBarGroups object.
- olOutlookBarPane = 63, // Represents an OutlookBarPane object.
- olOutlookBarShortcut = 68, // Represents an OutlookBarShortcut object.
- olOutlookBarShortcuts = 67, // Represents an OutlookBarShortcuts object.
- olOutlookBarStorage = 64, // Represents an OutlookBarStorage object.
- olPages = 36, // Represents a Pages object.
- olPanes = 62, // Represents a Panes object.
- olPlaySoundRuleAction = 123, // Represents a PlaySoundRuleAction object.
- olPost = 45, // Represents a PostItem object.
- olPropertyAccessor = 112, // Represents a PropertyAccessor object.
- olPropertyPages = 71, // Represents a PropertyPages object.
- olPropertyPageSite = 70, // Represents a PropertyPageSite object.
- olRecipient = 4, // Represents a Recipient object.
- olRecipients = 17, // Represents a Recipients object.
- olRecurrencePattern = 28, // Represents a RecurrencePattern object.
- olReminder = 101, // Represents a Reminder object.
- olReminders = 100, // Represents a Reminders object.
- olRemote = 47, // Represents a RemoteItem object.
- olReport = 46, // Represents a ReportItem object.
- olResults = 78, // Represents a Results object.
- olRow = 121, // Represents a Row object.
- olRule = 115, // Represents a Rule object.
- olRuleAction = 117, // Represents a RuleAction object.
- olRuleActions = 116, // Represents a RuleAction object.
- olRuleCondition = 127, // Represents a RuleCondition object.
- olRuleConditions = 126, // Represents a RuleConditions object.
- olRules = 114, // Represents a Rules object.
- olSearch = 77, // Represents a Search object.
- olSelection = 74, // Represents a Selection object.
- olSelectNamesDialog = 109, // Represents a SelectNamesDialog object.
- olSenderInAddressListRuleCondition = 133, // Represents a SenderInAddressListRuleCondition object.
- olSendRuleAction = 119, // Represents a SendRuleAction object.
- olSharing = 104, // Represents a SharingItem object.
- olStorageItem = 113, // Represents a StorageItem object.
- olStore = 107, // Represents a Store object.
- olStores = 108, // Represents a Stores object.
- olSyncObject = 72, // Represents a SyncObject object.
- olSyncObjects = 73, // Represents a SyncObject object.
- olTable = 120, // Represents a Table object.
- olTask = 48, // Represents a TaskItem object.
- olTaskRequest = 49, // Represents a TaskRequestItem object.
- olTaskRequestAccept = 51, // Represents a TaskRequestAcceptItem object.
- olTaskRequestDecline = 52, // Represents a TaskRequestDeclineItem object.
- olTaskRequestUpdate = 50, // Represents a TaskRequestUpdateItem object.
- olTasksModule = 161, // Represents a TasksModule object.
- olTextRuleCondition = 134, // Represents a TextRuleCondition object.
- olUserDefinedProperties = 172, // Represents a UserDefinedProperties object.
- olUserDefinedProperty = 171, // Represents a UserDefinedProperty object.
- olUserProperties = 38, // Represents a UserProperties object.
- olUserProperty = 39, // Represents a UserProperty object.
- olView = 80, // Represents a View object.
- olViewField = 142, // Represents a ViewField object.
- olViewFields = 141, // Represents a ViewFields object.
- olViewFont = 146, // Represents a ViewFont object.
- olViews = 79 // Represents a Views object.
- }
-
- public enum OlDefaultFolders {
- olFolderCalendar = 9, // The Calendar folder.
- olFolderConflicts = 19, // The Conflicts folder (subfolder of Sync Issues folder). Only available for an Exchange account.
- olFolderContacts = 10, // The Contacts folder.
- olFolderDeletedItems = 3, // The Deleted Items folder.
- olFolderDrafts = 16, // The Drafts folder.
- olFolderInbox = 6, // The Inbox folder.
- olFolderJournal = 11, // The Journal folder.
- olFolderJunk = 23, // The Junk E-Mail folder.
- olFolderLocalFailures = 21, // The Local Failures folder (subfolder of Sync Issues folder). Only available for an Exchange account.
- olFolderManagedEmail = 29, // The top-level folder in the Managed Folders group. For more information on Managed Folders, see Help in Microsoft Outlook. Only available for an Exchange account.
- olFolderNotes = 12, // The Notes folder.
- olFolderOutbox = 4, // The Outbox folder.
- olFolderSentMail = 5, // The Sent Mail folder.
- olFolderServerFailures = 22, // The Server Failures folder (subfolder of Sync Issues folder). Only available for an Exchange account.
- olFolderSyncIssues = 20, // The Sync Issues folder. Only available for an Exchange account.
- olFolderTasks = 13, // The Tasks folder.
- olFolderToDo = 28, // The To Do folder.
- olPublicFoldersAllPublicFolders = 18, // The All Public Folders folder in the Exchange Public Folders store. Only available for an Exchange account.
- olFolderRssFeeds = 25 // The RSS Feeds folder.
- }
-
- public enum OlItemType {
- // Fields
- olAppointmentItem = 1,
- olContactItem = 2,
- olDistributionListItem = 7,
- olJournalItem = 4,
- olMailItem = 0,
- olNoteItem = 5,
- olPostItem = 6,
- olTaskItem = 3
- }
-
- public enum OlEditorType {
- // Fields
- olEditorHTML = 2,
- olEditorRTF = 3,
- olEditorText = 1,
- olEditorWord = 4
- }
-
- public enum OlWindowState {
- // Fields
- olMaximized = 0,
- olMinimized = 1,
- olNormalWindow = 2
- }
-
- public enum OlInspectorClose {
- // Fields
- olDiscard = 1,
- olPromptForSave = 2,
- olSave = 0
- }
-
- public enum MsoTriState {
- msoTrue = -1,
- msoFalse = 0,
- msoCTrue = 1,
- msoTriStateToggle = -3,
- msoTriStateMixed = -2
- }
-
- public enum OlReoccurenceState {
- olApptException,
- olApptMaster,
- olApptNotRecurring,
- olApptOccurrence
- }
-
- public enum MsoScaleFrom {
- msoScaleFromTopLeft = 0,
- msoScaleFromMiddle = 1,
- msoScaleFromBottomRight = 2
- }
-}
diff --git a/GreenshotInterop/OfficeInterop/OutlookUtils.cs b/GreenshotInterop/OfficeInterop/OutlookUtils.cs
deleted file mode 100644
index fa27c4c7d..000000000
--- a/GreenshotInterop/OfficeInterop/OutlookUtils.cs
+++ /dev/null
@@ -1,853 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace Greenshot.Interop.Office {
- enum PT : uint {
- PT_UNSPECIFIED = 0, /* (Reserved for interface use) type doesn't matter to caller */
- PT_NULL = 1, /* NULL property value */
- PT_I2 = 2, /* Signed 16-bit value */
- PT_LONG = 3, /* Signed 32-bit value */
- PT_R4 = 4, /* 4-byte floating point */
- PT_DOUBLE = 5, /* Floating point double */
- PT_CURRENCY = 6, /* Signed 64-bit int (decimal w/ 4 digits right of decimal pt) */
- PT_APPTIME = 7, /* Application time */
- PT_ERROR = 10, /* 32-bit error value */
- PT_BOOLEAN = 11, /* 16-bit boolean (non-zero true, */
- // Use PT_BOOLEAN_DESKTOP to be specific instead of using PT_BOOLEAN which is mapped to 2 in addrmapi.h
- PT_BOOLEAN_DESKTOP = 11, /* 16-bit boolean (non-zero true) */
- PT_OBJECT = 13, /* Embedded object in a property */
- PT_I8 = 20, /* 8-byte signed integer */
- PT_STRING8 = 30, /* Null terminated 8-bit character string */
- PT_UNICODE = 31, /* Null terminated Unicode string */
- PT_SYSTIME = 64, /* FILETIME 64-bit int w/ number of 100ns periods since Jan 1,1601 */
- PT_CLSID = 72, /* OLE GUID */
- PT_BINARY = 258, /* Uninterpreted (counted byte array) */
-
- PT_TSTRING = PT_UNICODE
- };
-
- public enum PropTags : uint {
- PR_ERROR = 10,
-
- // Common non-transmittable
- PR_ENTRYID = PT.PT_BINARY | 0x0FFF << 16,
- PR_OBJECT_TYPE = PT.PT_LONG | 0x0FFE << 16,
- PR_ICON = PT.PT_BINARY | 0x0FFD << 16,
- PR_MINI_ICON = PT.PT_BINARY | 0x0FFC << 16,
- PR_STORE_ENTRYID = PT.PT_BINARY | 0x0FFB << 16,
- PR_STORE_RECORD_KEY = PT.PT_BINARY | 0x0FFA << 16,
- PR_RECORD_KEY = PT.PT_BINARY | 0x0FF9 << 16,
- PR_MAPPING_SIGNATURE = PT.PT_BINARY | 0x0FF8 << 16,
- PR_ACCESS_LEVEL = PT.PT_LONG | 0x0FF7 << 16,
- PR_INSTANCE_KEY = PT.PT_BINARY | 0x0FF6 << 16,
- PR_ROW_TYPE = PT.PT_LONG | 0x0FF5 << 16,
- PR_ACCESS = PT.PT_LONG | 0x0FF4 << 16,
-
- // Common transmittable
- PR_ROWID = PT.PT_LONG | 0x3000 << 16,
- PR_DISPLAY_NAME = PT.PT_TSTRING | 0x3001 << 16,
- PR_DISPLAY_NAME_W = PT.PT_UNICODE | 0x3001 << 16,
- PR_DISPLAY_NAME_A = PT.PT_STRING8 | 0x3001 << 16,
- PR_ADDRTYPE = PT.PT_TSTRING | 0x3002 << 16,
- PR_ADDRTYPE_W = PT.PT_UNICODE | 0x3002 << 16,
- PR_ADDRTYPE_A = PT.PT_STRING8 | 0x3002 << 16,
- PR_EMAIL_ADDRESS = PT.PT_TSTRING | 0x3003 << 16,
- PR_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x3003 << 16,
- PR_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x3003 << 16,
- PR_COMMENT = PT.PT_TSTRING | 0x3004 << 16,
- PR_COMMENT_W = PT.PT_UNICODE | 0x3004 << 16,
- PR_COMMENT_A = PT.PT_STRING8 | 0x3004 << 16,
- PR_DEPTH = PT.PT_LONG | 0x3005 << 16,
- PR_PROVIDER_DISPLAY = PT.PT_TSTRING | 0x3006 << 16,
- PR_PROVIDER_DISPLAY_W = PT.PT_UNICODE | 0x3006 << 16,
- PR_PROVIDER_DISPLAY_A = PT.PT_STRING8 | 0x3006 << 16,
- PR_CREATION_TIME = PT.PT_SYSTIME | 0x3007 << 16,
- PR_LAST_MODIFICATION_TIME = PT.PT_SYSTIME | 0x3008 << 16,
- PR_RESOURCE_FLAGS = PT.PT_LONG | 0x3009 << 16,
- PR_PROVIDER_DLL_NAME = PT.PT_TSTRING | 0x300A << 16,
- PR_PROVIDER_DLL_NAME_W = PT.PT_UNICODE | 0x300A << 16,
- PR_PROVIDER_DLL_NAME_A = PT.PT_STRING8 | 0x300A << 16,
- PR_SEARCH_KEY = PT.PT_BINARY | 0x300B << 16,
- PR_PROVIDER_UID = PT.PT_BINARY | 0x300C << 16,
- PR_PROVIDER_ORDINAL = PT.PT_LONG | 0x300D << 16,
-
- // Message store specific
- PR_DEFAULT_STORE = PT.PT_BOOLEAN | 0x3400 << 16,
- PR_STORE_SUPPORT_MASK = PT.PT_LONG | 0x340D << 16,
- PR_STORE_STATE = PT.PT_LONG | 0x340E << 16,
-
- PR_IPM_SUBTREE_SEARCH_KEY = PT.PT_BINARY | 0x3410 << 16,
- PR_IPM_OUTBOX_SEARCH_KEY = PT.PT_BINARY | 0x3411 << 16,
- PR_IPM_WASTEBASKET_SEARCH_KEY = PT.PT_BINARY | 0x3412 << 16,
- PR_IPM_SENTMAIL_SEARCH_KEY = PT.PT_BINARY | 0x3413 << 16,
- PR_MDB_PROVIDER = PT.PT_BINARY | 0x3414 << 16,
- PR_RECEIVE_FOLDER_SETTINGS = PT.PT_OBJECT | 0x3415 << 16,
-
- PR_VALID_FOLDER_MASK = PT.PT_LONG | 0x35DF << 16,
- PR_IPM_SUBTREE_ENTRYID = PT.PT_BINARY | 0x35E0 << 16,
-
- PR_IPM_OUTBOX_ENTRYID = PT.PT_BINARY | 0x35E2 << 16,
- PR_IPM_WASTEBASKET_ENTRYID = PT.PT_BINARY | 0x35E3 << 16,
- PR_IPM_SENTMAIL_ENTRYID = PT.PT_BINARY | 0x35E4 << 16,
- PR_VIEWS_ENTRYID = PT.PT_BINARY | 0x35E5 << 16,
- PR_COMMON_VIEWS_ENTRYID = PT.PT_BINARY | 0x35E6 << 16,
- PR_FINDER_ENTRYID = PT.PT_BINARY | 0x35E7 << 16,
- PR_ATTACH_CONTENT_ID = PT.PT_TSTRING | (0x3712 << 16),
- PR_ATTACH_CONTENT_ID_A = PT.PT_STRING8 | (0x3712 << 16),
- PR_ATTACH_CONTENT_ID_W = PT.PT_TSTRING | (0x3712 << 16),
- PR_ATTACH_CONTENT_LOCATION = PT.PT_TSTRING | (0x3713 << 16),
- PR_ATTACH_CONTENT_LOCATION_A = PT.PT_STRING8 | (0x3713 << 16),
- PR_ATTACH_CONTENT_LOCATION_W = PT.PT_TSTRING | (0x3713 << 16),
-
- // Message non-transmittable properties
- PR_CURRENT_VERSION = PT.PT_I8 | 0x0E00 << 16,
- PR_DELETE_AFTER_SUBMIT = PT.PT_BOOLEAN | 0x0E01 << 16,
- PR_DISPLAY_BCC = PT.PT_TSTRING | 0x0E02 << 16,
- PR_DISPLAY_BCC_W = PT.PT_UNICODE | 0x0E02 << 16,
- PR_DISPLAY_BCC_A = PT.PT_STRING8 | 0x0E02 << 16,
- PR_DISPLAY_CC = PT.PT_TSTRING | 0x0E03 << 16,
- PR_DISPLAY_CC_W = PT.PT_UNICODE | 0x0E03 << 16,
- PR_DISPLAY_CC_A = PT.PT_STRING8 | 0x0E03 << 16,
- PR_DISPLAY_TO = PT.PT_TSTRING | 0x0E04 << 16,
- PR_DISPLAY_TO_W = PT.PT_UNICODE | 0x0E04 << 16,
- PR_DISPLAY_TO_A = PT.PT_STRING8 | 0x0E04 << 16,
- PR_PARENT_DISPLAY = PT.PT_TSTRING | 0x0E05 << 16,
- PR_PARENT_DISPLAY_W = PT.PT_UNICODE | 0x0E05 << 16,
- PR_PARENT_DISPLAY_A = PT.PT_STRING8 | 0x0E05 << 16,
- PR_MESSAGE_DELIVERY_TIME = PT.PT_SYSTIME | 0x0E06 << 16,
- PR_MESSAGE_FLAGS = PT.PT_LONG | 0x0E07 << 16,
- PR_MESSAGE_SIZE = PT.PT_LONG | 0x0E08 << 16,
- PR_PARENT_ENTRYID = PT.PT_BINARY | 0x0E09 << 16,
- PR_SENTMAIL_ENTRYID = PT.PT_BINARY | 0x0E0A << 16,
- PR_CORRELATE = PT.PT_BOOLEAN | 0x0E0C << 16,
- PR_CORRELATE_MTSID = PT.PT_BINARY | 0x0E0D << 16,
- PR_DISCRETE_VALUES = PT.PT_BOOLEAN | 0x0E0E << 16,
- PR_RESPONSIBILITY = PT.PT_BOOLEAN | 0x0E0F << 16,
- PR_SPOOLER_STATUS = PT.PT_LONG | 0x0E10 << 16,
- PR_TRANSPORT_STATUS = PT.PT_LONG | 0x0E11 << 16,
- PR_MESSAGE_RECIPIENTS = PT.PT_OBJECT | 0x0E12 << 16,
- PR_MESSAGE_ATTACHMENTS = PT.PT_OBJECT | 0x0E13 << 16,
- PR_SUBMIT_FLAGS = PT.PT_LONG | 0x0E14 << 16,
- PR_RECIPIENT_STATUS = PT.PT_LONG | 0x0E15 << 16,
- PR_TRANSPORT_KEY = PT.PT_LONG | 0x0E16 << 16,
- PR_MSG_STATUS = PT.PT_LONG | 0x0E17 << 16,
- PR_MESSAGE_DOWNLOAD_TIME = PT.PT_LONG | 0x0E18 << 16,
- PR_CREATION_VERSION = PT.PT_I8 | 0x0E19 << 16,
- PR_MODIFY_VERSION = PT.PT_I8 | 0x0E1A << 16,
- PR_HASATTACH = PT.PT_BOOLEAN | 0x0E1B << 16,
- PR_BODY_CRC = PT.PT_LONG | 0x0E1C << 16,
- PR_NORMALIZED_SUBJECT = PT.PT_TSTRING | 0x0E1D << 16,
- PR_NORMALIZED_SUBJECT_W = PT.PT_UNICODE | 0x0E1D << 16,
- PR_NORMALIZED_SUBJECT_A = PT.PT_STRING8 | 0x0E1D << 16,
- PR_RTF_IN_SYNC = PT.PT_BOOLEAN | 0x0E1F << 16,
- PR_ATTACH_SIZE = PT.PT_LONG | 0x0E20 << 16,
- PR_ATTACH_NUM = PT.PT_LONG | 0x0E21 << 16,
- PR_PREPROCESS = PT.PT_BOOLEAN | 0x0E22 << 16,
-
- // Message recipient properties
- PR_CONTENT_INTEGRITY_CHECK = PT.PT_BINARY | 0x0C00 << 16,
- PR_EXPLICIT_CONVERSION = PT.PT_LONG | 0x0C01 << 16,
- PR_IPM_RETURN_REQUESTED = PT.PT_BOOLEAN | 0x0C02 << 16,
- PR_MESSAGE_TOKEN = PT.PT_BINARY | 0x0C03 << 16,
- PR_NDR_REASON_CODE = PT.PT_LONG | 0x0C04 << 16,
- PR_NDR_DIAG_CODE = PT.PT_LONG | 0x0C05 << 16,
- PR_NON_RECEIPT_NOTIFICATION_REQUESTED = PT.PT_BOOLEAN | 0x0C06 << 16,
- PR_DELIVERY_POINT = PT.PT_LONG | 0x0C07 << 16,
-
- PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED = PT.PT_BOOLEAN | 0x0C08 << 16,
- PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT = PT.PT_BINARY | 0x0C09 << 16,
- PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY = PT.PT_BOOLEAN | 0x0C0A << 16,
- PR_PHYSICAL_DELIVERY_MODE = PT.PT_LONG | 0x0C0B << 16,
- PR_PHYSICAL_DELIVERY_REPORT_REQUEST = PT.PT_LONG | 0x0C0C << 16,
- PR_PHYSICAL_FORWARDING_ADDRESS = PT.PT_BINARY | 0x0C0D << 16,
- PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED = PT.PT_BOOLEAN | 0x0C0E << 16,
- PR_PHYSICAL_FORWARDING_PROHIBITED = PT.PT_BOOLEAN | 0x0C0F << 16,
- PR_PHYSICAL_RENDITION_ATTRIBUTES = PT.PT_BINARY | 0x0C10 << 16,
- PR_PROOF_OF_DELIVERY = PT.PT_BINARY | 0x0C11 << 16,
- PR_PROOF_OF_DELIVERY_REQUESTED = PT.PT_BOOLEAN | 0x0C12 << 16,
- PR_RECIPIENT_CERTIFICATE = PT.PT_BINARY | 0x0C13 << 16,
- PR_RECIPIENT_NUMBER_FOR_ADVICE = PT.PT_TSTRING | 0x0C14 << 16,
- PR_RECIPIENT_NUMBER_FOR_ADVICE_W = PT.PT_UNICODE | 0x0C14 << 16,
- PR_RECIPIENT_NUMBER_FOR_ADVICE_A = PT.PT_STRING8 | 0x0C14 << 16,
- PR_RECIPIENT_TYPE = PT.PT_LONG | 0x0C15 << 16,
- PR_REGISTERED_MAIL_TYPE = PT.PT_LONG | 0x0C16 << 16,
- PR_REPLY_REQUESTED = PT.PT_BOOLEAN | 0x0C17 << 16,
- //PR_REQUESTED_DELIVERY_METHOD = PT.PT_LONG | 0x0C18 << 16,
- PR_SENDER_ENTRYID = PT.PT_BINARY | 0x0C19 << 16,
- PR_SENDER_NAME = PT.PT_TSTRING | 0x0C1A << 16,
- PR_SENDER_NAME_W = PT.PT_UNICODE | 0x0C1A << 16,
- PR_SENDER_NAME_A = PT.PT_STRING8 | 0x0C1A << 16,
- PR_SUPPLEMENTARY_INFO = PT.PT_TSTRING | 0x0C1B << 16,
- PR_SUPPLEMENTARY_INFO_W = PT.PT_UNICODE | 0x0C1B << 16,
- PR_SUPPLEMENTARY_INFO_A = PT.PT_STRING8 | 0x0C1B << 16,
- PR_TYPE_OF_MTS_USER = PT.PT_LONG | 0x0C1C << 16,
- PR_SENDER_SEARCH_KEY = PT.PT_BINARY | 0x0C1D << 16,
- PR_SENDER_ADDRTYPE = PT.PT_TSTRING | 0x0C1E << 16,
- PR_SENDER_ADDRTYPE_W = PT.PT_UNICODE | 0x0C1E << 16,
- PR_SENDER_ADDRTYPE_A = PT.PT_STRING8 | 0x0C1E << 16,
- PR_SENDER_EMAIL_ADDRESS = PT.PT_TSTRING | 0x0C1F << 16,
- PR_SENDER_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x0C1F << 16,
- PR_SENDER_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x0C1F << 16,
-
- // Message envelope properties
- PR_ACKNOWLEDGEMENT_MODE = PT.PT_LONG | 0x0001 << 16,
- PR_ALTERNATE_RECIPIENT_ALLOWED = PT.PT_BOOLEAN | 0x0002 << 16,
- PR_AUTHORIZING_USERS = PT.PT_BINARY | 0x0003 << 16,
- PR_AUTO_FORWARD_COMMENT = PT.PT_TSTRING | 0x0004 << 16,
- PR_AUTO_FORWARD_COMMENT_W = PT.PT_UNICODE | 0x0004 << 16,
- PR_AUTO_FORWARD_COMMENT_A = PT.PT_STRING8 | 0x0004 << 16,
- PR_AUTO_FORWARDED = PT.PT_BOOLEAN | 0x0005 << 16,
- PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID = PT.PT_BINARY | 0x0006 << 16,
- PR_CONTENT_CORRELATOR = PT.PT_BINARY | 0x0007 << 16,
- PR_CONTENT_IDENTIFIER = PT.PT_TSTRING | 0x0008 << 16,
- PR_CONTENT_IDENTIFIER_W = PT.PT_UNICODE | 0x0008 << 16,
- PR_CONTENT_IDENTIFIER_A = PT.PT_STRING8 | 0x0008 << 16,
- PR_CONTENT_LENGTH = PT.PT_LONG | 0x0009 << 16,
- PR_CONTENT_RETURN_REQUESTED = PT.PT_BOOLEAN | 0x000A << 16,
-
- // Message envelope properties
- PR_CONVERSATION_KEY = PT.PT_BINARY | 0x000B << 16,
-
- PR_CONVERSION_EITS = PT.PT_BINARY | 0x000C << 16,
- PR_CONVERSION_WITH_LOSS_PROHIBITED = PT.PT_BOOLEAN | 0x000D << 16,
- PR_CONVERTED_EITS = PT.PT_BINARY | 0x000E << 16,
- PR_DEFERRED_DELIVERY_TIME = PT.PT_SYSTIME | 0x000F << 16,
- PR_DELIVER_TIME = PT.PT_SYSTIME | 0x0010 << 16,
- PR_DISCARD_REASON = PT.PT_LONG | 0x0011 << 16,
- PR_DISCLOSURE_OF_RECIPIENTS = PT.PT_BOOLEAN | 0x0012 << 16,
- PR_DL_EXPANSION_HISTORY = PT.PT_BINARY | 0x0013 << 16,
- PR_DL_EXPANSION_PROHIBITED = PT.PT_BOOLEAN | 0x0014 << 16,
- PR_EXPIRY_TIME = PT.PT_SYSTIME | 0x0015 << 16,
- PR_IMPLICIT_CONVERSION_PROHIBITED = PT.PT_BOOLEAN | 0x0016 << 16,
- PR_IMPORTANCE = PT.PT_LONG | 0x0017 << 16,
- PR_IPM_ID = PT.PT_BINARY | 0x0018 << 16,
- PR_LATEST_DELIVERY_TIME = PT.PT_SYSTIME | 0x0019 << 16,
- PR_MESSAGE_CLASS = PT.PT_TSTRING | 0x001A << 16,
- PR_MESSAGE_CLASS_W = PT.PT_UNICODE | 0x001A << 16,
- PR_MESSAGE_CLASS_A = PT.PT_STRING8 | 0x001A << 16,
- PR_MESSAGE_DELIVERY_ID = PT.PT_BINARY | 0x001B << 16,
-
- PR_MESSAGE_SECURITY_LABEL = PT.PT_BINARY | 0x001E << 16,
- PR_OBSOLETED_IPMS = PT.PT_BINARY | 0x001F << 16,
- PR_ORIGINALLY_INTENDED_RECIPIENT_NAME = PT.PT_BINARY | 0x0020 << 16,
- PR_ORIGINAL_EITS = PT.PT_BINARY | 0x0021 << 16,
- PR_ORIGINATOR_CERTIFICATE = PT.PT_BINARY | 0x0022 << 16,
- PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED = PT.PT_BOOLEAN | 0x0023 << 16,
- PR_ORIGINATOR_RETURN_ADDRESS = PT.PT_BINARY | 0x0024 << 16,
-
- PR_PARENT_KEY = PT.PT_BINARY | 0x0025 << 16,
- PR_PRIORITY = PT.PT_LONG | 0x0026 << 16,
-
- PR_ORIGIN_CHECK = PT.PT_BINARY | 0x0027 << 16,
- PR_PROOF_OF_SUBMISSION_REQUESTED = PT.PT_BOOLEAN | 0x0028 << 16,
- PR_READ_RECEIPT_REQUESTED = PT.PT_BOOLEAN | 0x0029 << 16,
- PR_RECEIPT_TIME = PT.PT_SYSTIME | 0x002A << 16,
- PR_RECIPIENT_REASSIGNMENT_PROHIBITED = PT.PT_BOOLEAN | 0x002B << 16,
- PR_REDIRECTION_HISTORY = PT.PT_BINARY | 0x002C << 16,
- PR_RELATED_IPMS = PT.PT_BINARY | 0x002D << 16,
- PR_ORIGINAL_SENSITIVITY = PT.PT_LONG | 0x002E << 16,
- PR_LANGUAGES = PT.PT_TSTRING | 0x002F << 16,
- PR_LANGUAGES_W = PT.PT_UNICODE | 0x002F << 16,
- PR_LANGUAGES_A = PT.PT_STRING8 | 0x002F << 16,
- PR_REPLY_TIME = PT.PT_SYSTIME | 0x0030 << 16,
- PR_REPORT_TAG = PT.PT_BINARY | 0x0031 << 16,
- PR_REPORT_TIME = PT.PT_SYSTIME | 0x0032 << 16,
- PR_RETURNED_IPM = PT.PT_BOOLEAN | 0x0033 << 16,
- PR_SECURITY = PT.PT_LONG | 0x0034 << 16,
- PR_INCOMPLETE_COPY = PT.PT_BOOLEAN | 0x0035 << 16,
- PR_SENSITIVITY = PT.PT_LONG | 0x0036 << 16,
- PR_SUBJECT = PT.PT_TSTRING | 0x0037 << 16,
- PR_SUBJECT_W = PT.PT_UNICODE | 0x0037 << 16,
- PR_SUBJECT_A = PT.PT_STRING8 | 0x0037 << 16,
- PR_SUBJECT_IPM = PT.PT_BINARY | 0x0038 << 16,
- PR_CLIENT_SUBMIT_TIME = PT.PT_SYSTIME | 0x0039 << 16,
- PR_REPORT_NAME = PT.PT_TSTRING | 0x003A << 16,
- PR_REPORT_NAME_W = PT.PT_UNICODE | 0x003A << 16,
- PR_REPORT_NAME_A = PT.PT_STRING8 | 0x003A << 16,
- PR_SENT_REPRESENTING_SEARCH_KEY = PT.PT_BINARY | 0x003B << 16,
- PR_X400_CONTENT_TYPE = PT.PT_BINARY | 0x003C << 16,
- PR_SUBJECT_PREFIX = PT.PT_TSTRING | 0x003D << 16,
- PR_SUBJECT_PREFIX_W = PT.PT_UNICODE | 0x003D << 16,
- PR_SUBJECT_PREFIX_A = PT.PT_STRING8 | 0x003D << 16,
- PR_NON_RECEIPT_REASON = PT.PT_LONG | 0x003E << 16,
- PR_RECEIVED_BY_ENTRYID = PT.PT_BINARY | 0x003F << 16,
- PR_RECEIVED_BY_NAME = PT.PT_TSTRING | 0x0040 << 16,
- PR_RECEIVED_BY_NAME_W = PT.PT_UNICODE | 0x0040 << 16,
- PR_RECEIVED_BY_NAME_A = PT.PT_STRING8 | 0x0040 << 16,
- PR_SENT_REPRESENTING_ENTRYID = PT.PT_BINARY | 0x0041 << 16,
- PR_SENT_REPRESENTING_NAME = PT.PT_TSTRING | 0x0042 << 16,
- PR_SENT_REPRESENTING_NAME_W = PT.PT_UNICODE | 0x0042 << 16,
- PR_SENT_REPRESENTING_NAME_A = PT.PT_STRING8 | 0x0042 << 16,
- PR_RCVD_REPRESENTING_ENTRYID = PT.PT_BINARY | 0x0043 << 16,
- PR_RCVD_REPRESENTING_NAME = PT.PT_TSTRING | 0x0044 << 16,
- PR_RCVD_REPRESENTING_NAME_W = PT.PT_UNICODE | 0x0044 << 16,
- PR_RCVD_REPRESENTING_NAME_A = PT.PT_STRING8 | 0x0044 << 16,
- PR_REPORT_ENTRYID = PT.PT_BINARY | 0x0045 << 16,
- PR_READ_RECEIPT_ENTRYID = PT.PT_BINARY | 0x0046 << 16,
- PR_MESSAGE_SUBMISSION_ID = PT.PT_BINARY | 0x0047 << 16,
- PR_PROVIDER_SUBMIT_TIME = PT.PT_SYSTIME | 0x0048 << 16,
- PR_ORIGINAL_SUBJECT = PT.PT_TSTRING | 0x0049 << 16,
- PR_ORIGINAL_SUBJECT_W = PT.PT_UNICODE | 0x0049 << 16,
- PR_ORIGINAL_SUBJECT_A = PT.PT_STRING8 | 0x0049 << 16,
- PR_DISC_VAL = PT.PT_BOOLEAN | 0x004A << 16,
- PR_ORIG_MESSAGE_CLASS = PT.PT_TSTRING | 0x004B << 16,
- PR_ORIG_MESSAGE_CLASS_W = PT.PT_UNICODE | 0x004B << 16,
- PR_ORIG_MESSAGE_CLASS_A = PT.PT_STRING8 | 0x004B << 16,
- PR_ORIGINAL_AUTHOR_ENTRYID = PT.PT_BINARY | 0x004C << 16,
- PR_ORIGINAL_AUTHOR_NAME = PT.PT_TSTRING | 0x004D << 16,
- PR_ORIGINAL_AUTHOR_NAME_W = PT.PT_UNICODE | 0x004D << 16,
- PR_ORIGINAL_AUTHOR_NAME_A = PT.PT_STRING8 | 0x004D << 16,
- PR_ORIGINAL_SUBMIT_TIME = PT.PT_SYSTIME | 0x004E << 16,
- PR_REPLY_RECIPIENT_ENTRIES = PT.PT_BINARY | 0x004F << 16,
- PR_REPLY_RECIPIENT_NAMES = PT.PT_TSTRING | 0x0050 << 16,
- PR_REPLY_RECIPIENT_NAMES_W = PT.PT_UNICODE | 0x0050 << 16,
- PR_REPLY_RECIPIENT_NAMES_A = PT.PT_STRING8 | 0x0050 << 16,
-
- PR_RECEIVED_BY_SEARCH_KEY = PT.PT_BINARY | 0x0051 << 16,
- PR_RCVD_REPRESENTING_SEARCH_KEY = PT.PT_BINARY | 0x0052 << 16,
- PR_READ_RECEIPT_SEARCH_KEY = PT.PT_BINARY | 0x0053 << 16,
- PR_REPORT_SEARCH_KEY = PT.PT_BINARY | 0x0054 << 16,
- PR_ORIGINAL_DELIVERY_TIME = PT.PT_SYSTIME | 0x0055 << 16,
- PR_ORIGINAL_AUTHOR_SEARCH_KEY = PT.PT_BINARY | 0x0056 << 16,
-
- PR_MESSAGE_TO_ME = PT.PT_BOOLEAN | 0x0057 << 16,
- PR_MESSAGE_CC_ME = PT.PT_BOOLEAN | 0x0058 << 16,
- PR_MESSAGE_RECIP_ME = PT.PT_BOOLEAN | 0x0059 << 16,
-
- PR_ORIGINAL_SENDER_NAME = PT.PT_TSTRING | 0x005A << 16,
- PR_ORIGINAL_SENDER_NAME_W = PT.PT_UNICODE | 0x005A << 16,
- PR_ORIGINAL_SENDER_NAME_A = PT.PT_STRING8 | 0x005A << 16,
- PR_ORIGINAL_SENDER_ENTRYID = PT.PT_BINARY | 0x005B << 16,
- PR_ORIGINAL_SENDER_SEARCH_KEY = PT.PT_BINARY | 0x005C << 16,
- PR_ORIGINAL_SENT_REPRESENTING_NAME = PT.PT_TSTRING | 0x005D << 16,
- PR_ORIGINAL_SENT_REPRESENTING_NAME_W = PT.PT_UNICODE | 0x005D << 16,
- PR_ORIGINAL_SENT_REPRESENTING_NAME_A = PT.PT_STRING8 | 0x005D << 16,
- PR_ORIGINAL_SENT_REPRESENTING_ENTRYID = PT.PT_BINARY | 0x005E << 16,
- PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY = PT.PT_BINARY | 0x005F << 16,
-
- PR_START_DATE = PT.PT_SYSTIME | 0x0060 << 16,
- PR_END_DATE = PT.PT_SYSTIME | 0x0061 << 16,
- PR_OWNER_APPT_ID = PT.PT_LONG | 0x0062 << 16,
- //PR_RESPONSE_REQUESTED = PT.PT_BOOLEAN | 0x0063 << 16,
-
- PR_SENT_REPRESENTING_ADDRTYPE = PT.PT_TSTRING | 0x0064 << 16,
- PR_SENT_REPRESENTING_ADDRTYPE_W = PT.PT_UNICODE | 0x0064 << 16,
- PR_SENT_REPRESENTING_ADDRTYPE_A = PT.PT_STRING8 | 0x0064 << 16,
- PR_SENT_REPRESENTING_EMAIL_ADDRESS = PT.PT_TSTRING | 0x0065 << 16,
- PR_SENT_REPRESENTING_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x0065 << 16,
- PR_SENT_REPRESENTING_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x0065 << 16,
-
- PR_ORIGINAL_SENDER_ADDRTYPE = PT.PT_TSTRING | 0x0066 << 16,
- PR_ORIGINAL_SENDER_ADDRTYPE_W = PT.PT_UNICODE | 0x0066 << 16,
- PR_ORIGINAL_SENDER_ADDRTYPE_A = PT.PT_STRING8 | 0x0066 << 16,
- PR_ORIGINAL_SENDER_EMAIL_ADDRESS = PT.PT_TSTRING | 0x0067 << 16,
- PR_ORIGINAL_SENDER_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x0067 << 16,
- PR_ORIGINAL_SENDER_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x0067 << 16,
-
- PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE = PT.PT_TSTRING | 0x0068 << 16,
- PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_W = PT.PT_UNICODE | 0x0068 << 16,
- PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_A = PT.PT_STRING8 | 0x0068 << 16,
- PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS = PT.PT_TSTRING | 0x0069 << 16,
- PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x0069 << 16,
- PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x0069 << 16,
-
- PR_CONVERSATION_TOPIC = PT.PT_TSTRING | 0x0070 << 16,
- PR_CONVERSATION_TOPIC_W = PT.PT_UNICODE | 0x0070 << 16,
- PR_CONVERSATION_TOPIC_A = PT.PT_STRING8 | 0x0070 << 16,
- PR_CONVERSATION_INDEX = PT.PT_BINARY | 0x0071 << 16,
-
- PR_ORIGINAL_DISPLAY_BCC = PT.PT_TSTRING | 0x0072 << 16,
- PR_ORIGINAL_DISPLAY_BCC_W = PT.PT_UNICODE | 0x0072 << 16,
- PR_ORIGINAL_DISPLAY_BCC_A = PT.PT_STRING8 | 0x0072 << 16,
- PR_ORIGINAL_DISPLAY_CC = PT.PT_TSTRING | 0x0073 << 16,
- PR_ORIGINAL_DISPLAY_CC_W = PT.PT_UNICODE | 0x0073 << 16,
- PR_ORIGINAL_DISPLAY_CC_A = PT.PT_STRING8 | 0x0073 << 16,
- PR_ORIGINAL_DISPLAY_TO = PT.PT_TSTRING | 0x0074 << 16,
- PR_ORIGINAL_DISPLAY_TO_W = PT.PT_UNICODE | 0x0074 << 16,
- PR_ORIGINAL_DISPLAY_TO_A = PT.PT_STRING8 | 0x0074 << 16,
-
- PR_RECEIVED_BY_ADDRTYPE = PT.PT_TSTRING | 0x0075 << 16,
- PR_RECEIVED_BY_ADDRTYPE_W = PT.PT_UNICODE | 0x0075 << 16,
- PR_RECEIVED_BY_ADDRTYPE_A = PT.PT_STRING8 | 0x0075 << 16,
- PR_RECEIVED_BY_EMAIL_ADDRESS = PT.PT_TSTRING | 0x0076 << 16,
- PR_RECEIVED_BY_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x0076 << 16,
- PR_RECEIVED_BY_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x0076 << 16,
-
- PR_RCVD_REPRESENTING_ADDRTYPE = PT.PT_TSTRING | 0x0077 << 16,
- PR_RCVD_REPRESENTING_ADDRTYPE_W = PT.PT_UNICODE | 0x0077 << 16,
- PR_RCVD_REPRESENTING_ADDRTYPE_A = PT.PT_STRING8 | 0x0077 << 16,
- PR_RCVD_REPRESENTING_EMAIL_ADDRESS = PT.PT_TSTRING | 0x0078 << 16,
- PR_RCVD_REPRESENTING_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x0078 << 16,
- PR_RCVD_REPRESENTING_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x0078 << 16,
-
- PR_ORIGINAL_AUTHOR_ADDRTYPE = PT.PT_TSTRING | 0x0079 << 16,
- PR_ORIGINAL_AUTHOR_ADDRTYPE_W = PT.PT_UNICODE | 0x0079 << 16,
- PR_ORIGINAL_AUTHOR_ADDRTYPE_A = PT.PT_STRING8 | 0x0079 << 16,
- PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS = PT.PT_TSTRING | 0x007A << 16,
- PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x007A << 16,
- PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x007A << 16,
-
- PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE = PT.PT_TSTRING | 0x007B << 16,
- PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_W = PT.PT_UNICODE | 0x007B << 16,
- PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_A = PT.PT_STRING8 | 0x007B << 16,
- PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS = PT.PT_TSTRING | 0x007C << 16,
- PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_W = PT.PT_UNICODE | 0x007C << 16,
- PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_A = PT.PT_STRING8 | 0x007C << 16,
-
- PR_TRANSPORT_MESSAGE_HEADERS = PT.PT_TSTRING | 0x007D << 16,
- PR_TRANSPORT_MESSAGE_HEADERS_W = PT.PT_UNICODE | 0x007D << 16,
- PR_TRANSPORT_MESSAGE_HEADERS_A = PT.PT_STRING8 | 0x007D << 16,
-
- PR_DELEGATION = PT.PT_BINARY | 0x007E << 16,
-
- PR_TNEF_CORRELATION_KEY = PT.PT_BINARY | 0x007F << 16,
-
- // Message content properties
- PR_BODY = PT.PT_TSTRING | 0x1000 << 16,
- PR_BODY_W = PT.PT_UNICODE | 0x1000 << 16,
- PR_BODY_A = PT.PT_STRING8 | 0x1000 << 16,
- PR_REPORT_TEXT = PT.PT_TSTRING | 0x1001 << 16,
- PR_REPORT_TEXT_W = PT.PT_UNICODE | 0x1001 << 16,
- PR_REPORT_TEXT_A = PT.PT_STRING8 | 0x1001 << 16,
- PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY = PT.PT_BINARY | 0x1002 << 16,
- PR_REPORTING_DL_NAME = PT.PT_BINARY | 0x1003 << 16,
- PR_REPORTING_MTA_CERTIFICATE = PT.PT_BINARY | 0x1004 << 16,
- };
-
- public class OutlookUtils {
- private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(OutlookUtils));
- private const uint KEEP_OPEN_READONLY = 0x00000001;
- private const uint KEEP_OPEN_READWRITE = 0x00000002;
- private const uint FORCE_SAVE = 0x00000004;
-
- #region MAPI Interface ID'S
- // The Interface ID's are used to retrieve the specific MAPI Interfaces from the IUnknown Object
- public const string IID_IMAPISession = "00020300-0000-0000-C000-000000000046";
- public const string IID_IMAPIProp = "00020303-0000-0000-C000-000000000046";
- public const string IID_IMAPITable = "00020301-0000-0000-C000-000000000046";
- public const string IID_IMAPIMsgStore = "00020306-0000-0000-C000-000000000046";
- public const string IID_IMAPIFolder = "0002030C-0000-0000-C000-000000000046";
- public const string IID_IMAPISpoolerService = "0002031E-0000-0000-C000-000000000046";
- public const string IID_IMAPIStatus = "0002031E-0000-0000-C000-000000000046";
- public const string IID_IMessage = "00020307-0000-0000-C000-000000000046";
- public const string IID_IAddrBook = "00020309-0000-0000-C000-000000000046";
- public const string IID_IProfSect = "00020304-0000-0000-C000-000000000046";
- public const string IID_IMAPIContainer = "0002030B-0000-0000-C000-000000000046";
- public const string IID_IABContainer = "0002030D-0000-0000-C000-000000000046";
- public const string IID_IMsgServiceAdmin = "0002031D-0000-0000-C000-000000000046";
- public const string IID_IProfAdmin = "0002031C-0000-0000-C000-000000000046";
- public const string IID_IMailUser = "0002030A-0000-0000-C000-000000000046";
- public const string IID_IDistList = "0002030E-0000-0000-C000-000000000046";
- public const string IID_IAttachment = "00020308-0000-0000-C000-000000000046";
- public const string IID_IMAPIControl = "0002031B-0000-0000-C000-000000000046";
- public const string IID_IMAPILogonRemote = "00020346-0000-0000-C000-000000000046";
- public const string IID_IMAPIForm = "00020327-0000-0000-C000-000000000046";
- #endregion
-
- [ComVisible(false)]
- [ComImport()]
- [Guid(IID_IMAPIProp)]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- interface IMessage : IMAPIProp {
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int GetAttachmentTable();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int OpenAttach();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int CreateAttach();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int DeleteAttach();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int GetRecipientTable();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int ModifyRecipients();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int SubmitMessage();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int SetReadFlag();
- }
- // [ComVisible(false)]
- // [ComImport()]
- // [Guid(IID_IMAPIFolder)]
- // [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- // interface IMAPIFolder : IMAPIContainer {
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int CreateMessage(IntPtr interf, uint uFlags, [MarshalAs(UnmanagedType.Interface)] ref IMessage pMsg);
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int CopyMessages();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int CreateFolder();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int CopyFolder();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int DeleteFolder();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int SetReadFlags();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int GetMessageStatus();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int SetMessageStatus();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int SaveContentsSort();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int EmptyFolder();
- // }
- // [ComVisible(false)]
- // [ComImport()]
- // [Guid(IID_IMAPIContainer)]
- // [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- // interface IMAPIContainer : IMAPIProp {
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int GetContentsTable(uint uFlags, [MarshalAs(UnmanagedType.Interface), Out] out outlook.Table tbl);
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int GetHierarchyTable();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int OpenEntry();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int SetSearchCriteria();
- // [return: MarshalAs(UnmanagedType.I4)]
- // [PreserveSig]
- // int GetSearchCriteria();
- // }
-
- [ComVisible(false)]
- [ComImport()]
- [Guid(IID_IMAPIProp)]
- [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
- interface IMAPIProp {
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int GetLastError();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int SaveChanges(
- uint uFlags
- );
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int GetProps();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int GetPropList();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int OpenProperty();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int SetProps(uint values, IntPtr propArray, IntPtr problems);
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int DeleteProps();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int CopyTo();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int CopyProps();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int GetNamesFromIDs();
- [return: MarshalAs(UnmanagedType.I4)]
- [PreserveSig]
- int GetIDsFromNames();
- }
-
- [StructLayout(LayoutKind.Explicit)]
- private struct SPropValue {
- [FieldOffset(0)]
- public uint propTag;
- [FieldOffset(4)]
- public uint alignPad;
- [FieldOffset(8)]
- public IntPtr Value;
- [FieldOffset(8)]
- public long filler;
- }
-
- ///
- /// Use MAPI32.DLL "HrGetOneProp" from managed code
- ///
- ///
- ///
- ///
- public static string GetMAPIProperty(Attachment attachment, PropTags proptag) {
- object mapiObject = attachment.MAPIOBJECT;
- if (mapiObject == null) {
- return "";
- }
-
- string sProperty = "";
- IntPtr pPropValue = IntPtr.Zero;
-
- IntPtr IUnknown = IntPtr.Zero;
- IntPtr IMAPIProperty = IntPtr.Zero;
-
- try {
- MAPIInitialize(IntPtr.Zero);
- IUnknown = Marshal.GetIUnknownForObject(mapiObject);
- Guid guidMAPIProp = new Guid(IID_IMAPIProp);
- if (Marshal.QueryInterface(IUnknown, ref guidMAPIProp, out IMAPIProperty) != 0) {
- return "";
- }
- try {
- HrGetOneProp(IMAPIProperty, (uint)proptag, out pPropValue);
- if (pPropValue == IntPtr.Zero) {
- return "";
- }
- SPropValue propValue = (SPropValue)Marshal.PtrToStructure(pPropValue, typeof(SPropValue));
- sProperty = Marshal.PtrToStringUni(propValue.Value);
- } catch (System.Exception ex) {
- throw ex;
- }
- } finally {
- if (pPropValue != IntPtr.Zero) {
- MAPIFreeBuffer(pPropValue);
- }
- if (IMAPIProperty != IntPtr.Zero) {
- Marshal.Release(IMAPIProperty);
- }
- if (IUnknown != IntPtr.Zero) {
- Marshal.Release(IUnknown);
- }
- MAPIUninitialize();
- }
- return sProperty;
- }
-
- ///
- /// Tries to save the changes we just made
- ///
- ///
- ///
- public static bool SaveChanges(MailItem mailItem) {
- // Pointer to IUnknown Interface
- IntPtr IUnknown = IntPtr.Zero;
- // Pointer to IMAPIProp Interface
- IntPtr IMAPIProp = IntPtr.Zero;
- // if we have no MAPIObject everything is senseless...
- if (mailItem == null) {
- return false;
- }
-
- try {
- // We can pass NULL here as parameter, so we do it.
- MAPIInitialize(IntPtr.Zero);
- // retrive the IUnknon Interface from our MAPIObject comming from Outlook.
- IUnknown = Marshal.GetIUnknownForObject(mailItem.MAPIOBJECT);
-
- // create a Guid that we pass to retreive the IMAPIProp Interface.
- Guid guidIMAPIProp = new Guid(IID_IMAPIProp);
-
- // try to retrieve the IMAPIProp interface from IMessage Interface, everything else is sensless.
- if (Marshal.QueryInterface(IUnknown, ref guidIMAPIProp, out IMAPIProp) != 0) {
- return false;
- }
- IMAPIProp mapiProp = (IMAPIProp)Marshal.GetTypedObjectForIUnknown(IUnknown, typeof(IMAPIProp));
- return (mapiProp.SaveChanges(KEEP_OPEN_READWRITE) == 0);
- } catch (Exception ex) {
- LOG.Error(ex);
- return false;
- } finally {
- // cleanup all references to COM Objects
- if (IMAPIProp != IntPtr.Zero) Marshal.Release(IMAPIProp);
- //if (IMessage != IntPtr.Zero) Marshal.Release(IMessage);
- if (IUnknown != IntPtr.Zero) Marshal.Release(IUnknown);
- }
- }
-
- ///
- /// Uses the IMAPIPROP.SetProps to set the content ID
- ///
- ///
- ///
- public static void SetContentID(Attachment attachment, string contentId) {
- // Pointer to IUnknown Interface
- IntPtr IUnknown = IntPtr.Zero;
- // Pointer to IMAPIProp Interface
- IntPtr IMAPIProp = IntPtr.Zero;
- // A pointer that points to the SPropValue structure
- IntPtr ptrPropValue = IntPtr.Zero;
- // Structure that will hold the Property Value
- SPropValue propValue;
- // if we have no MAPIObject everything is senseless...
- if (attachment == null) {
- return;
- }
-
- try {
- // We can pass NULL here as parameter, so we do it.
- MAPIInitialize(IntPtr.Zero);
-
- // retrive the IUnknon Interface from our MAPIObject comming from Outlook.
- IUnknown = Marshal.GetIUnknownForObject(attachment.MAPIOBJECT);
- IMAPIProp mapiProp = (IMAPIProp)Marshal.GetTypedObjectForIUnknown(IUnknown, typeof(IMAPIProp));
-
- // Create structure
- propValue = new SPropValue();
- propValue.propTag = (uint)PropTags.PR_ATTACH_CONTENT_ID;
- //propValue.propTag = 0x3712001E;
- // Create Ansi string
- propValue.Value = Marshal.StringToHGlobalUni(contentId);
-
- // Create unmanaged memory for structure
- ptrPropValue = Marshal.AllocHGlobal(Marshal.SizeOf(propValue));
- // Copy structure to unmanged memory
- Marshal.StructureToPtr(propValue, ptrPropValue, false);
- mapiProp.SetProps(1, ptrPropValue, IntPtr.Zero);
-
- propValue.propTag = (uint)PropTags.PR_ATTACH_CONTENT_LOCATION;
- // Copy structure to unmanged memory
- Marshal.StructureToPtr(propValue, ptrPropValue, false);
- mapiProp.SetProps(1, ptrPropValue, IntPtr.Zero);
-
-
- // Free string
- Marshal.FreeHGlobal(propValue.Value);
- mapiProp.SaveChanges(KEEP_OPEN_READWRITE);
- } catch (Exception ex) {
- LOG.Error(ex);
- } finally {
- // Free used Memory structures
- if (ptrPropValue != IntPtr.Zero) Marshal.FreeHGlobal(ptrPropValue);
- // cleanup all references to COM Objects
- if (IMAPIProp != IntPtr.Zero) Marshal.Release(IMAPIProp);
- //if (IMessage != IntPtr.Zero) Marshal.Release(IMessage);
- if (IUnknown != IntPtr.Zero) Marshal.Release(IUnknown);
- }
- }
-
- ///
- /// Use MAPI32.DLL "HrSetOneProp" from managed code
- ///
- ///
- ///
- ///
- ///
- public static bool SetMAPIProperty(Attachment attachment, PropTags proptag, string propertyValue) {
- // Pointer to IUnknown Interface
- IntPtr IUnknown = IntPtr.Zero;
- // Pointer to IMAPIProp Interface
- IntPtr IMAPIProp = IntPtr.Zero;
- // Structure that will hold the Property Value
- SPropValue propValue;
- // A pointer that points to the SPropValue structure
- IntPtr ptrPropValue = IntPtr.Zero;
- object mapiObject = attachment.MAPIOBJECT;
- // if we have no MAPIObject everything is senseless...
- if (mapiObject == null) {
- return false;
- }
-
- try {
- // We can pass NULL here as parameter, so we do it.
- MAPIInitialize(IntPtr.Zero);
-
- // retrive the IUnknon Interface from our MAPIObject comming from Outlook.
- IUnknown = Marshal.GetIUnknownForObject(mapiObject);
-
- // create a Guid that we pass to retreive the IMAPIProp Interface.
- Guid guidIMAPIProp = new Guid(IID_IMAPIProp);
-
- // try to retrieve the IMAPIProp interface from IMessage Interface, everything else is sensless.
- if (Marshal.QueryInterface(IUnknown, ref guidIMAPIProp, out IMAPIProp) != 0) {
- return false;
- }
-
- // double check, if we wave no pointer, exit...
- if (IMAPIProp == IntPtr.Zero) {
- return false;
- }
-
- // Create structure
- propValue = new SPropValue();
- propValue.propTag = (uint)proptag;
- // Create Ansi string
- propValue.Value = Marshal.StringToHGlobalUni(propertyValue);
-
- // Create unmanaged memory for structure
- ptrPropValue = Marshal.AllocHGlobal(Marshal.SizeOf(propValue));
- // Copy structure to unmanged memory
- Marshal.StructureToPtr(propValue, ptrPropValue, false);
-
- // Set the property
- HrSetOneProp(IMAPIProp, ptrPropValue);
-
- // Free string
- Marshal.FreeHGlobal(propValue.Value);
- IMAPIProp mapiProp = (IMAPIProp)Marshal.GetTypedObjectForIUnknown(IUnknown, typeof(IMAPIProp));
- return mapiProp.SaveChanges(4) == 0;
- } catch (System.Exception ex) {
- LOG.Error(ex);
- return false;
- } finally {
- // Free used Memory structures
- if (ptrPropValue != IntPtr.Zero) Marshal.FreeHGlobal(ptrPropValue);
- // cleanup all references to COM Objects
- if (IMAPIProp != IntPtr.Zero) Marshal.Release(IMAPIProp);
- //if (IMessage != IntPtr.Zero) Marshal.Release(IMessage);
- if (IUnknown != IntPtr.Zero) Marshal.Release(IUnknown);
- MAPIUninitialize();
- }
- }
-
- #region MAPI DLL Imports
-
- [DllImport("MAPI32.DLL", CharSet = CharSet.Ansi, EntryPoint = "HrGetOneProp@12")]
- private static extern void HrGetOneProp(IntPtr pmp, uint ulPropTag, out IntPtr ppProp);
-
- [DllImport("MAPI32.DLL", CharSet = CharSet.Ansi, EntryPoint = "HrSetOneProp@8")]
- private static extern void HrSetOneProp(IntPtr pmp, IntPtr pprop);
-
- [DllImport("MAPI32.DLL", CharSet = CharSet.Ansi, EntryPoint = "MAPIFreeBuffer@4")]
- private static extern void MAPIFreeBuffer(IntPtr lpBuffer);
-
- [DllImport("MAPI32.DLL", CharSet = CharSet.Ansi)]
- private static extern int MAPIInitialize(IntPtr lpMapiInit);
-
- [DllImport("MAPI32.DLL", CharSet = CharSet.Ansi)]
- private static extern void MAPIUninitialize();
- #endregion
- }
-}
\ No newline at end of file
diff --git a/GreenshotInterop/OfficeInterop/PowerpointInterop.cs b/GreenshotInterop/OfficeInterop/PowerpointInterop.cs
deleted file mode 100644
index 41f81f3a8..000000000
--- a/GreenshotInterop/OfficeInterop/PowerpointInterop.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-using System.Collections;
-
-namespace Greenshot.Interop.Office {
- // See http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.application_members.aspx
- [ComProgId("Powerpoint.Application")]
- public interface IPowerpointApplication : Common {
- IPresentation ActivePresentation { get; }
- IPresentations Presentations { get; }
- bool Visible { get; set; }
- void Activate();
- IPowerpointWindow ActiveWindow { get; }
- string Version { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.slides_members.aspx
- public interface ISlides : Common {
- int Count { get; }
- ISlide Add(int Index, int layout);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.documentwindow.view.aspx
- public interface IPowerpointWindow : Common {
- void Activate();
- IPowerpointView View { get; }
- }
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.view_members.aspx
- public interface IPowerpointView : Common {
- IZoom Zoom { get; }
- void GotoSlide(int index);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.presentation_members.aspx
- public interface IPresentation : Common {
- string Name { get; }
- ISlides Slides { get; }
- IPowerpointApplication Application { get; }
- MsoTriState ReadOnly { get; }
- bool Final { get; set; }
- IPageSetup PageSetup { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.presentations_members.aspx
- public interface IPresentations : Common, Collection {
- IPresentation Add(MsoTriState WithWindow);
- IPresentation item(int index);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.pagesetup_members.aspx
- public interface IPageSetup : Common, Collection {
- float SlideWidth { get; set; }
- float SlideHeight { get; set; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.slide_members.aspx
- public interface ISlide : Common {
- IShapes Shapes { get; }
- void Select();
- int SlideNumber { get; }
-
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.shapes_members.aspx
- public interface IShapes : Common, IEnumerable {
- int Count { get; }
- IShape item(int index);
- IShape AddPicture(string FileName, MsoTriState LinkToFile, MsoTriState SaveWithDocument, float Left, float Top, float Width, float Height);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.shape_members.aspx
- public interface IShape : Common {
- float Left { get; set; }
- float Top { get; set; }
- float Width { get; set; }
- float Height { get; set; }
- ITextFrame TextFrame { get; }
- void ScaleWidth(float Factor, MsoTriState RelativeToOriginalSize, MsoScaleFrom fScale);
- void ScaleHeight(float Factor, MsoTriState RelativeToOriginalSize, MsoScaleFrom fScale);
- string AlternativeText { get; set; }
- MsoTriState LockAspectRatio { get; set; }
- }
-
- public interface ITextFrame : Common {
- ITextRange TextRange { get; }
- MsoTriState HasText { get; }
- }
- public interface ITextRange : Common {
- string Text { get; set; }
- }
-
- public enum PPSlideLayout : int {
- ppLayoutMixed = -2,
- ppLayoutTitle = 1,
- ppLayoutText = 2,
- ppLayoutTwoColumnText = 3,
- ppLayoutTable = 4,
- ppLayoutTextAndChart = 5,
- ppLayoutChartAndText = 6,
- ppLayoutOrgchart = 7,
- ppLayoutChart = 8,
- ppLayoutTextAndClipart = 9,
- ppLayoutClipartAndText = 10,
- ppLayoutTitleOnly = 11,
- ppLayoutBlank = 12,
- ppLayoutTextAndObject = 13,
- ppLayoutObjectAndText = 14,
- ppLayoutLargeObject = 15,
- ppLayoutObject = 16,
- ppLayoutTextAndMediaClip = 17,
- ppLayoutMediaClipAndText = 18,
- ppLayoutObjectOverText = 19,
- ppLayoutTextOverObject = 20,
- ppLayoutTextAndTwoObjects = 21,
- ppLayoutTwoObjectsAndText = 22,
- ppLayoutTwoObjectsOverText = 23,
- ppLayoutFourObjects = 24,
- ppLayoutVerticalText = 25,
- ppLayoutClipArtAndVerticalText = 26,
- ppLayoutVerticalTitleAndText = 27,
- ppLayoutVerticalTitleAndTextOverChart = 28,
- ppLayoutTwoObjects = 29,
- ppLayoutObjectAndTwoObjects = 30,
- ppLayoutTwoObjectsAndObject = 31,
- ppLayoutCustom = 32,
- ppLayoutSectionHeader = 33,
- ppLayoutComparison = 34,
- ppLayoutContentWithCaption = 35,
- ppLayoutPictureWithCaption = 36
- }
-}
diff --git a/GreenshotInterop/OfficeInterop/WordInterop.cs b/GreenshotInterop/OfficeInterop/WordInterop.cs
deleted file mode 100644
index 31745f300..000000000
--- a/GreenshotInterop/OfficeInterop/WordInterop.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Greenshot - a free and open source screenshot tool
- * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
- *
- * For more information see: http://getgreenshot.org/
- * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-namespace Greenshot.Interop.Office {
- // See http://msdn.microsoft.com/de-de/library/microsoft.office.interop.word.applicationclass_members%28v=Office.11%29.aspx
- [ComProgId("Word.Application")]
- public interface IWordApplication : Common {
- IWordDocument ActiveDocument { get; }
- ISelection Selection { get; }
- IDocuments Documents { get; }
- bool Visible { get; set; }
- void Activate();
- string Version { get; }
- }
-
- // See: http://msdn.microsoft.com/de-de/library/microsoft.office.interop.word.documents_members(v=office.11).aspx
- public interface IDocuments : Common, Collection {
- IWordDocument Add(ref object Template, ref object NewTemplate, ref object DocumentType, ref object Visible);
- IWordDocument item(int index);
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.document.aspx
- public interface IWordDocument : Common {
- void Activate();
- IWordApplication Application { get; }
- IWordWindow ActiveWindow { get; }
- bool ReadOnly { get; }
-
- // Only 2007 and later!
- bool Final { get; set; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.window_members.aspx
- public interface IWordWindow : Common {
- IPane ActivePane { get; }
- void Activate();
- string Caption {
- get;
- }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.pane_members.aspx
- public interface IPane : Common {
- IWordView View { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.view_members.aspx
- public interface IWordView : Common {
- IZoom Zoom { get; }
- }
-
- // See: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.zoom_members.aspx
- public interface IZoom : Common {
- int Percentage { get; set; }
- }
-
- // See: http://msdn.microsoft.com/de-de/library/microsoft.office.interop.word.selection_members(v=office.11).aspx
- public interface ISelection : Common {
- IInlineShapes InlineShapes { get; }
- void InsertAfter(string text);
- }
-
- public interface IInlineShapes : Common {
- object AddPicture(string FileName, object LinkToFile, object SaveWithDocument, object Range);
- }
-}
diff --git a/GreenshotInterop/Properties/AssemblyInfo.cs b/GreenshotInterop/Properties/AssemblyInfo.cs
deleted file mode 100644
index 03de139d0..000000000
--- a/GreenshotInterop/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die mit einer Assembly verknüpft sind.
-[assembly: AssemblyTitle("GreenshotInterop")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("ING-DiBa AG")]
-[assembly: AssemblyProduct("GreenshotInterop")]
-[assembly: AssemblyCopyright("Copyright © ING-DiBa AG 2012")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
-// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
-// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("6159ccd8-d61b-4dde-8847-57bbb8a749f8")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
-// übernehmen, indem Sie "*" eingeben:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/GreenshotInterop/RemedyInterop/RemedyExporter.cs b/GreenshotInterop/RemedyInterop/RemedyExporter.cs
deleted file mode 100644
index 03db9a199..000000000
--- a/GreenshotInterop/RemedyInterop/RemedyExporter.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Greenshot.Interop.Remedy {
- public class RemedyExporter {
- private const string HELP_DESK = "HPD:Help Desk";
- private const string INCIDENT_INTERFACE = "HPD:IncidentInterface_Create";
- private const string INCIDENT_MANAGEMENT_CONSOLE = "HPD:Incident Management Console";
- private const int FIELD_INCIDENT = 1000000161;
- private const int FIELD_ATTACH = 536880912;
-
- private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(RemedyExporter));
- public static void Info() {
- try {
- using (IRemedyUserApplication remedyApplication = COMWrapper.GetInstance()) {
- if (remedyApplication != null) {
- //COMWrapper.DumpTypeInfo(remedyApplication);
-
- ICOMFormWnd2 form = remedyApplication.GetActiveForm();
- //COMWrapper.DumpTypeInfo(form);
- LOG.InfoFormat("Server name {0}", form.GetServerName());
- LOG.InfoFormat("Form name {0}", form.GetFormName());
- if (HELP_DESK.Equals(form.GetFormName())) {
- ICOMField4 field = form.GetFieldById(FIELD_INCIDENT);
- //COMWrapper.DumpTypeInfo(field);
- LOG.InfoFormat("Incident {0}", field.Value);
- ICOMField4 fieldAttach = form.GetFieldById(FIELD_ATTACH);
- LOG.InfoFormat("Attachment {0}", fieldAttach.Value);
-
- }
- }
- }
- } catch (Exception ex) {
- LOG.Error(ex);
- }
- }
- }
-}
diff --git a/GreenshotInterop/RemedyInterop/RemedyInterop.cs b/GreenshotInterop/RemedyInterop/RemedyInterop.cs
deleted file mode 100644
index 0a68c8226..000000000
--- a/GreenshotInterop/RemedyInterop/RemedyInterop.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Greenshot.Interop;
-
-namespace Greenshot.Interop.Remedy {
- // "Remedy.User.1" is the active remedy, if any
- [ComProgId("Remedy.User.1")]
- public interface IRemedyUserApplication : Common {
- int Login(string a, string b, int c);
- void Logout(int a);
- ICOMFormWnd2 OpenForm(int a, string b, string c, OpenMode d, int e);
- ICOMFormWnd2 GetActiveForm();
- ICOMFormWnd2 LoadForm(int a, string b, string c, string d, OpenMode e, int f);
- object GetServerList(int a);
- object GetFormList(int a, string b);
- int HasDefaultSession();
- void OpenGuide(int a, string b, string c);
- void RunMacro(int a, string b, int c, ref object d);
- object QueryForm(int a, string b, string c, string d, string e, OpenMode f, int g);
- IRemedyUser GetUser(ref string a);
- int Login2(int a);
- void OpenAlertList(string a, string b);
- int Login3(string a, string b, string c, int d);
- }
-
- public interface IRemedyUser : Common {
- }
-
- public interface ICOMFormWnd2 : Common {
- string Submit();
- void Modify();
- void Close();
- void MakeVisible();
- ICOMField4 GetField(string a);
- void GiveFieldFocus(string a);
- ICOMField4 GetFieldById(int a);
- void GiveFieldFocusById(int a);
- object Query(string a);
- string GetServerName();
- string GetFormName();
- int HasFieldFocus(string a);
- int HasFieldFocusById(int a);
- int GetVUIId();
- void GetFieldList(ref object a, ref object b);
- }
-
- public interface ICOMField4 : Common {
- void MakeVisible(int a);
- void MakeReadWrite(int a);
- void Disable();
- int IsVisible();
- int IsHidden();
- int IsReadOnly();
- int IsReadWrite();
- int IsDisabled();
- object GetARDBProp(uint a);
- object GetCurrencyPart(NCOMField3CurrencyPartEnum a);
- void SetCurrencyValue(string a);
- object GetDiaryHistoryList(NCOMField3DiaryHistoryFlagsEnum a);
- string GetFieldLabel();
- string GetFieldFont();
- string GetFieldColor();
- string Value {
- get;
- set;
- }
- }
-
- public enum NCOMField3CurrencyPartEnum {
- }
- public enum NCOMField3DiaryHistoryFlagsEnum {
- }
-
- public enum OpenMode {
- ARQuery,
- ARModify
- }
-}
diff --git a/GreenshotPlugin/GreenshotPlugin.csproj b/GreenshotPlugin/GreenshotPlugin.csproj
index c7097b2ef..9f31d9a67 100644
--- a/GreenshotPlugin/GreenshotPlugin.csproj
+++ b/GreenshotPlugin/GreenshotPlugin.csproj
@@ -28,93 +28,35 @@
-
- Interop\IHTMLBodyElement.cs
-
-
- Interop\IHTMLCurrentStyle.cs
-
-
- Interop\IHTMLDocument.cs
-
-
- Interop\IHTMLDocument2.cs
-
-
- Interop\IHTMLDocument3.cs
-
-
- Interop\IHTMLDocument4.cs
-
-
- Interop\IHTMLDocument5.cs
-
-
- Interop\IHTMLElement.cs
-
-
- Interop\IHTMLElement2.cs
-
-
- Interop\IHTMLElementCollection.cs
-
-
- Interop\IHTMLFrameBase.cs
-
-
- Interop\IHTMLFramesCollection2.cs
-
-
- Interop\IHTMLRect.cs
-
-
- Interop\IHTMLScreen.cs
-
-
- Interop\IHTMLScreen2.cs
-
-
- Interop\IHTMLSelectionObject.cs
-
-
- Interop\IHTMLStyle.cs
-
-
- Interop\IHTMLTxtRange.cs
-
-
- Interop\IHTMLWindow2.cs
-
-
- Interop\IHTMLWindow3.cs
-
-
- Interop\IHTMLWindow4.cs
-
-
- Interop\IWebBrowser2.cs
-
-
- Interop\Base.cs
-
-
- Interop\ComProgIdAttribute.cs
-
-
- Interop\COMWrapper.cs
-
-
- Interop\IDispatch.cs
-
-
- Interop\IOleWindow.cs
-
-
- Interop\IOleCommandTarget.cs
-
-
- Interop\IServiceProvider.cs
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Component
diff --git a/GreenshotInterop/IEInterop/IHTMLBodyElement.cs b/GreenshotPlugin/IEInterop/IHTMLBodyElement.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLBodyElement.cs
rename to GreenshotPlugin/IEInterop/IHTMLBodyElement.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLCurrentStyle.cs b/GreenshotPlugin/IEInterop/IHTMLCurrentStyle.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLCurrentStyle.cs
rename to GreenshotPlugin/IEInterop/IHTMLCurrentStyle.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLDocument.cs b/GreenshotPlugin/IEInterop/IHTMLDocument.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLDocument.cs
rename to GreenshotPlugin/IEInterop/IHTMLDocument.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLDocument2.cs b/GreenshotPlugin/IEInterop/IHTMLDocument2.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLDocument2.cs
rename to GreenshotPlugin/IEInterop/IHTMLDocument2.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLDocument3.cs b/GreenshotPlugin/IEInterop/IHTMLDocument3.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLDocument3.cs
rename to GreenshotPlugin/IEInterop/IHTMLDocument3.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLDocument4.cs b/GreenshotPlugin/IEInterop/IHTMLDocument4.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLDocument4.cs
rename to GreenshotPlugin/IEInterop/IHTMLDocument4.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLDocument5.cs b/GreenshotPlugin/IEInterop/IHTMLDocument5.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLDocument5.cs
rename to GreenshotPlugin/IEInterop/IHTMLDocument5.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLElement.cs b/GreenshotPlugin/IEInterop/IHTMLElement.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLElement.cs
rename to GreenshotPlugin/IEInterop/IHTMLElement.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLElement2.cs b/GreenshotPlugin/IEInterop/IHTMLElement2.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLElement2.cs
rename to GreenshotPlugin/IEInterop/IHTMLElement2.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLElementCollection.cs b/GreenshotPlugin/IEInterop/IHTMLElementCollection.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLElementCollection.cs
rename to GreenshotPlugin/IEInterop/IHTMLElementCollection.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLFrameBase.cs b/GreenshotPlugin/IEInterop/IHTMLFrameBase.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLFrameBase.cs
rename to GreenshotPlugin/IEInterop/IHTMLFrameBase.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLFramesCollection2.cs b/GreenshotPlugin/IEInterop/IHTMLFramesCollection2.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLFramesCollection2.cs
rename to GreenshotPlugin/IEInterop/IHTMLFramesCollection2.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLRect.cs b/GreenshotPlugin/IEInterop/IHTMLRect.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLRect.cs
rename to GreenshotPlugin/IEInterop/IHTMLRect.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLScreen.cs b/GreenshotPlugin/IEInterop/IHTMLScreen.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLScreen.cs
rename to GreenshotPlugin/IEInterop/IHTMLScreen.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLScreen2.cs b/GreenshotPlugin/IEInterop/IHTMLScreen2.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLScreen2.cs
rename to GreenshotPlugin/IEInterop/IHTMLScreen2.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLSelectionObject.cs b/GreenshotPlugin/IEInterop/IHTMLSelectionObject.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLSelectionObject.cs
rename to GreenshotPlugin/IEInterop/IHTMLSelectionObject.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLStyle.cs b/GreenshotPlugin/IEInterop/IHTMLStyle.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLStyle.cs
rename to GreenshotPlugin/IEInterop/IHTMLStyle.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLTxtRange.cs b/GreenshotPlugin/IEInterop/IHTMLTxtRange.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLTxtRange.cs
rename to GreenshotPlugin/IEInterop/IHTMLTxtRange.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLWindow2.cs b/GreenshotPlugin/IEInterop/IHTMLWindow2.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLWindow2.cs
rename to GreenshotPlugin/IEInterop/IHTMLWindow2.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLWindow3.cs b/GreenshotPlugin/IEInterop/IHTMLWindow3.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLWindow3.cs
rename to GreenshotPlugin/IEInterop/IHTMLWindow3.cs
diff --git a/GreenshotInterop/IEInterop/IHTMLWindow4.cs b/GreenshotPlugin/IEInterop/IHTMLWindow4.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IHTMLWindow4.cs
rename to GreenshotPlugin/IEInterop/IHTMLWindow4.cs
diff --git a/GreenshotInterop/IEInterop/IWebBrowser2.cs b/GreenshotPlugin/IEInterop/IWebBrowser2.cs
similarity index 100%
rename from GreenshotInterop/IEInterop/IWebBrowser2.cs
rename to GreenshotPlugin/IEInterop/IWebBrowser2.cs
diff --git a/GreenshotInterop/Interop/Base.cs b/GreenshotPlugin/Interop/Base.cs
similarity index 100%
rename from GreenshotInterop/Interop/Base.cs
rename to GreenshotPlugin/Interop/Base.cs
diff --git a/GreenshotInterop/Interop/COMWrapper.cs b/GreenshotPlugin/Interop/COMWrapper.cs
similarity index 100%
rename from GreenshotInterop/Interop/COMWrapper.cs
rename to GreenshotPlugin/Interop/COMWrapper.cs
diff --git a/GreenshotInterop/Interop/ComProgIdAttribute.cs b/GreenshotPlugin/Interop/ComProgIdAttribute.cs
similarity index 100%
rename from GreenshotInterop/Interop/ComProgIdAttribute.cs
rename to GreenshotPlugin/Interop/ComProgIdAttribute.cs
diff --git a/GreenshotInterop/Interop/IDispatch.cs b/GreenshotPlugin/Interop/IDispatch.cs
similarity index 100%
rename from GreenshotInterop/Interop/IDispatch.cs
rename to GreenshotPlugin/Interop/IDispatch.cs
diff --git a/GreenshotInterop/Interop/IOleCommandTarget.cs b/GreenshotPlugin/Interop/IOleCommandTarget.cs
similarity index 100%
rename from GreenshotInterop/Interop/IOleCommandTarget.cs
rename to GreenshotPlugin/Interop/IOleCommandTarget.cs
diff --git a/GreenshotInterop/Interop/IOleWindow.cs b/GreenshotPlugin/Interop/IOleWindow.cs
similarity index 100%
rename from GreenshotInterop/Interop/IOleWindow.cs
rename to GreenshotPlugin/Interop/IOleWindow.cs
diff --git a/GreenshotInterop/Interop/IServiceProvider.cs b/GreenshotPlugin/Interop/IServiceProvider.cs
similarity index 100%
rename from GreenshotInterop/Interop/IServiceProvider.cs
rename to GreenshotPlugin/Interop/IServiceProvider.cs