using System; using System.Drawing; using System.Windows.Forms; /**************************************************************************************************************** **This Macro will show a pop-up dialog with a list of Macros that you can run. **Just replace the Macro names in the "MenuEntries" variable at the top of the script, with the names of **your Macros. **eg:{{ "PaleGreen", "Black", "Copy and Append", "Copy and &Append selected text", "cb-content" }}, **- "PaleGreen" is the background color **- "Black" is the foreground-(text) color **- "Copy and Append" is the macro name as it appears in your macro list **- "Copy and &Append selected text" is the text you will see in the popup, here the "A" is set as hotkey **- "cb-content" can be "image", "text", "all". It defines if the entry is clickable or not. If the macro needs **an image in the clipboard, the entry is disabled if there's only text on the cb. ** **Color names can be found here: **http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/colors/ColorTable.htm ** **Add an ampersand (&) at the fourth parameter to get a hotkey for the entry. ** eg:{{ "Pink", "Maroon", "--- Cancel ---", "--- &Cancel ---" }}, **{{ "PaleGreen", "Black", "Copy and Append", "Copy and &Append selected text" }}, ** **If you want an entry to cancel the action please use: **{{ "Background color", "Foreground color", "--- Cancel ---", "--- &Cancel ---" }}, ** ** You can also click outside the popup or press ESC to cancel/close. ** *****************************************************************************************************************/ public static class ClipboardFusionHelper { public static string ProcessText(string text) { // These are all of the macros from the "Macros" list. // See description above. string[, ,] MenuEntries = { //{{ "Background-Color", "Foreground-Color", "Macro-Name", "Menu entry text", "image text all" }} {{ "Pink", "Maroon", "--- Cancel ---", "--- Cancel ---", "all" }}, {{ "Khaki", "Black", "Remove Extra White Spaces and Trim", "&1 Remove Extra White Spaces and Trim", "text" }}, {{ "Khaki", "Black", "Replace special chars with spaces, Trim", "&2 Replace special chars with spaces then Trim", "text" }}, {{ "BurlyWood", "Black", "Auto-Type Clipboard Text", "Auto-&Type Clipboard Text", "text" }}, {{ "BurlyWood", "Black", "Show History Drop-Down List, Modify", "Show &History Drop-Down List, and modify value", "text" }}, {{ "PaleGreen", "Black", "Copy and Append", "Copy and &Append selected text", "text" }}, {{ "Aquamarine", "Black", "Decode Base64-Encoded Text (UTF-8)", "Decode Base64-Encoded Text (UTF-8)", "text" }}, {{ "Aquamarine", "Black", "Decode URL-Encoded Text", "Decode URL-Encoded Text", "text" }}, {{ "Aquamarine", "Black", "Encode Text (UTF-8) using Base64-Encoding", "Encode Text (UTF-8) using Base64-Encoding", "text" }}, {{ "Aquamarine", "Black", "Encode Text using URL-Encoding", "Encode Text using URL-Encoding", "text" }}, {{ "Darkseagreen", "Black", "Search For Copied Text using Google.de", "Search for text in clipboard using &Google.de", "text" }}, {{ "Darkseagreen", "Black", "URL Grabber", "URL Grabber", "text" }}, {{ "White", "Black", "Save Copied Image to Disk", "Save &image in clipboard to disk", "image" }}, {{ "Pink", "Maroon", "--- Cancel ---", "--- Cancel ---", "all" }} }; // Create a new ContextMenuStrip to show the items using(ContextMenuStrip menu = new ContextMenuStrip()) { // Don't show the padding on the left of the menu menu.ShowCheckMargin = false; menu.ShowImageMargin = false; string cbContent = ""; if ( BFS.Clipboard.HasText() ) cbContent = "text"; if ( Clipboard.ContainsImage() ) cbContent = "image"; // Add items to the menu, and use custom function when the user clicks on the items for ( int i = 0; i < MenuEntries.GetLength(0); i++ ) { ToolStripMenuItem item = new ToolStripMenuItem(MenuEntries[i, 0, 3]); item.Click += MenuItem_Click; item.BackColor = Color.FromName( MenuEntries[i, 0, 0]); item.ForeColor = Color.FromName( MenuEntries[i, 0, 1]); item.Tag = MenuEntries[i, 0, 2]; if ( (MenuEntries[i, 0, 4] == cbContent) || (MenuEntries[i, 0, 4] == "all") || (cbContent == "") ) item.Enabled = true; else item.Enabled = false; menu.Items.Add(item); } // Finally show the popup menu menu.Show(new Point(BFS.Input.GetMousePositionX(), BFS.Input.GetMousePositionY()), ToolStripDropDownDirection.AboveRight); // Set focus to the menu menu.BringToFront(); menu.Focus(); BFS.Window.Focus(menu.Handle); BFS.Window.SetAlwaysOnTop(menu.Handle, true); // Wait for the menu to close while(menu.Visible) { Application.DoEvents(); } } return null; } /**************************************************************************************************************** **This function will get the text of the clicked item and try to run it as a ClipboardFusion Macro. *****************************************************************************************************************/ private static void MenuItem_Click(object sender, EventArgs e) { ToolStripItem item = sender as ToolStripItem; if (item == null) return; // Get the macro name string macroName = item.Tag as String; if ( (macroName == "--- Cancel ---") || (macroName == "") ) return; string text = BFS.Clipboard.GetText(); if (text == null) text = ""; // Return values string rText = ""; string rError = ""; // Run the macro BFS.ClipboardFusion.RunMacro(macroName, text, out rText, out rError); // Any errors? if ( rError != "" ) { BFS.Dialog.ShowMessageError("An error has occurred:\n"+rError); } else { BFS.Clipboard.SetText(rText); } } }