# SOLIDWORKS PDM Professional API Help

# Get Menu Command Items Example (C#)

This example shows how to get add-in menu command items.

NOTE: If using the primary interop assembly provided with SOLIDWORKS PDM Professional, see Using .NET Framework 4.0 in Stand-alone Applications.

//--------------------------------------------------------------------------------------
// Preconditions:
// 1. Start Microsoft Visual Studio.
// a. Click File > New > Project > Visual C# > Console Application.
// b. Type MenuCSharp in Name.
// c. Click Browse and navigate to the folder where to create the project.
// d. Click OK.
// e. Replace the code in Program.cs with this code.
// 2. Add EPDM.Interop.epdm.dll as a reference (right-click the project
// name in the Solution Explorer, click Add Reference, click
// Assemblies > Framework in the left-side panel, browse to the top folder of
// your SOLIDWORKS PDM Professional installation, locate and click
// EPDM.Interop.epdm.dll, click Open, and click Add).
// 3. Add System.Windows.Forms as a reference (click System.Windows.Forms
// in the Name column, click Add, and click Close).
// 4. Right-click EPDM.Interop.epdm in References, click Properties, and set
// Embed Interop Types to False to handle methods that pass arrays of
// structures.
// 5. Replace ACME_LAB with the name of a valid vault view.
// 6. Click Debug > Start Debugging or press F5.
//
// Postconditions:
// 1. Displays the command window.
// 2. Displays a message box for each add-in menu command item.
// 3. Click OK to close each message box.
// 4. Displays the menu in the upper-left corner of the desktop.
// 5. Click First Command in the menu.
// 6. Click OK to close the message box.
// 7. Click the command window and press any key.
// 8. Closes the command window and exits the application.
//--------------------------------------------------------------------------------------

//Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using EPDM.Interop.epdm;
namespace MenuCSharp
{
class Program
{
static EdmVault5 vault;
static Form frmParent;
static void Main(string[] args)
{
try
{
//Create a vault interface
vault = new EdmVault5();
//Log into vault
vault.LoginAuto("ACME_LAB", 0);
//Show menu
ShowMenu((IEdmVault12)vault);
}
catch (System.Runtime.InteropServices.COMException ex)
{
MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Console.WriteLine();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
private static void ShowMenu(IEdmVault12 vault)
{
//Create a context-sensitive menu
//using Windows InsertMenu function
System.Windows.Forms.ContextMenu mnu = default(System.Windows.Forms.ContextMenu);
mnu = new System.Windows.Forms.ContextMenu();
InsertMenu((IntPtr)mnu.Handle, 0, 0, (IntPtr)100, "First Command");
InsertMenu((IntPtr)mnu.Handle, 0, 0, (IntPtr)101, "Second Command");
InsertMenu((IntPtr)mnu.Handle, 0, 0, (IntPtr)102, "Third Command");
//Create a selection list with all files in the root folder
IEdmSelectionList5 selList = default(IEdmSelectionList5);
selList = new EdmSelectionList5();
IEdmFolder6 folder = default(IEdmFolder6);
folder = (IEdmFolder6)vault.RootFolder;
IEdmPos5 pos = default(IEdmPos5);
pos = folder.GetFirstFilePosition();
while (!pos.IsNull)
{
IEdmFile8 file = default(IEdmFile8);
file = (IEdmFile8)folder.GetNextFile(pos);
EdmSelectionObject obj = default(EdmSelectionObject);
obj.mbsPath = file.GetLocalPath(folder.ID);
obj.meType = file.ObjectType;
obj.mlID = file.ID;
obj.mlProjectID = folder.ID;
((IEdmSelectionList6)selList).AddTail2(obj);
}
//Add menu items for registered add-ins
int count = 0;
count = 0;
int startID = 0;
startID = 200;
IEdmMenu7 menuCallback = default(IEdmMenu7);
EdmCmdInfo[] ppoRetItems = null;
menuCallback = vault.CreatePluginMenu2(mnu.Handle.ToInt32(), 3, ref startID, (IEdmSelectionList6)selList, (int)CreateMenuFlags.Cmf_ContextMenu, out count);
menuCallback.GetItems((int)EdmMenuFlags.EdmMenu_Nothing, out ppoRetItems);
string str = null;
foreach (EdmCmdInfo item in ppoRetItems)
{
str = "Add-in menu command item: " + "\r\n";
str = str + "Command ID: " + item.mlCmdID + "\r\n";
str = str + "Command string: " + item.mbsCmdStr + "\r\n";
str = str + "Tooltip: " + item.mbsTooltip + "\r\n";
str = str + "Status bar help: " + item.mbsStatusBarHelp + "\r\n";
str = str + "EdmMenuFlags: " + item.mlEdmMenuFlags;
MessageBox.Show(str);
}
//Display the menu using Windows TrackPopupMenu function
int TPM_RETURNCMD = 0;
TPM_RETURNCMD = 256;
int cmdID = 0;
frmParent = new Form();
cmdID = TrackPopupMenu((IntPtr)mnu.Handle, TPM_RETURNCMD, frmParent.Left, frmParent.Top, 0, (IntPtr)frmParent.Handle, (IntPtr)0);
//Run the selected command
switch (cmdID)
{
case 100:
MessageBox.Show("First command");
break;
case 101:
MessageBox.Show("Second command");
break;
case 102:
MessageBox.Show("Third command");
break;
default:
MessageBox.Show(cmdID);
break;
}
}
[DllImport("user32", EntryPoint = "InsertMenuA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern bool InsertMenu(System.IntPtr hMenu, int uPosition, int uFlags, System.IntPtr uIDNewItem, string lpNewItem);
[DllImport("user32", EntryPoint = "TrackPopupMenu", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int TrackPopupMenu(IntPtr hMenu, int uFlags, int x, int y, int nReserved, IntPtr hWnd, IntPtr prcRect);
}
}

Back to top