Introduction
The purpose of this article is creating an Add-In for Word that automates logging printscreens.
Background
This add-in was designed to facilitate the creation of manuals, registration testing and other tasks where it is used very printscreen.
Creating the code
First create a Word 2007 Add-in solution, like this:
Creating the Code Add-In
After solution create, let's create a button:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
CheckIfMenuBarExists();
AddMenuBar();
}
private void CheckIfMenuBarExists()
{
try
{
Office.CommandBarButton foundMenu = (Office.CommandBarButton)
this.Application.CommandBars.ActiveMenuBar.FindControl(
Office.MsoControlType.msoControlButton, System.Type.Missing, 200, true, true);
if (foundMenu != null)
{
foundMenu.Delete(true);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void AddMenuBar()
{
try
{
Office.CommandBar menubar = (Office.CommandBar)Application.CommandBars.ActiveMenuBar;
menuCommand = (Office.CommandBarButton)menubar.Controls.Add(
Office.MsoControlType.msoControlButton, missing, missing, missing, true);
menuCommand.Style = MsoButtonStyle.msoButtonIconAndWrapCaptionBelow;
menuCommand.Caption = "Monitor PrintScreen";
menuCommand.Tag = "200";
menuCommand.FaceId = 65;
menuCommand.Click += new _CommandBarButtonEvents_ClickEventHandler(menuCommand_Click);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
Clipboard Monitor
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);
private const int WM_DRAWCLIPBOARD = 0x0308;private IntPtr _clipboardViewerNext;
public delegate void ClipboardHandler(object sender, ClipboardArgs e);
public event ClipboardHandler OnNewClipboard;
public ClipboardManager()
{
InitializeComponent();
}
public void Start()
{
_clipboardViewerNext = SetClipboardViewer(this.Handle);
}
public void Stop()
{
ChangeClipboardChain(this.Handle, _clipboardViewerNext);
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_DRAWCLIPBOARD)
{
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap image = (Bitmap)iData.GetData(DataFormats.Bitmap);
if (OnNewClipboard != null)
{
OnNewClipboard(this, new ClipboardArgs(image));
}
}
}
}
public class ClipboardArgs
{
public ClipboardArgs(Bitmap image)
{
this.Image = image;
}
public Bitmap Image { get; set; }
}
Inclusion of the new image in the document
void manager_OnNewClipboard(object sender, ClipboardArgs e)
{
Application.ActiveDocument.Content.Paragraphs.Add(
Globals.ThisAddIn.Application.Selection.Range);
Globals.ThisAddIn.Application.Selection.Paste();
Application.ActiveDocument.Content.Paragraphs.Add(
Globals.ThisAddIn.Application.Selection.Range);
Globals.ThisAddIn.Application.Selection.MoveDown(WdUnits.wdParagraph, 2, Type.Missing);
}
Result of this code
After clicking the button, all the print screens will be included in the Word document.
Points of Interest
In this article learn how to create:
- An Add-in for Word 2007.
- A monitor area transfer.
History
- 12th March, 2013: Article published.