Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Add-in Word - Simple Paste PrintScreen

0.00/5 (No votes)
13 May 2013 1  
Add-in Word for PrintScreen

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:  

//
// Any source code blocks look like this
//
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
   CheckIfMenuBarExists();
   AddMenuBar();
}
 
//
// Checks whether there is a button with id equal to 200
//
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);
   }
}
 
//
// Add button with caption 'Monitor PrintScreen'
//
private void AddMenuBar()
{
   try
   {
    Office.CommandBar menubar = (Office.CommandBar)Application.CommandBars.ActiveMenuBar;
 
    // Add the menu.                
    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;// WM_DRAWCLIPBOARD message
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.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here