Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Show List of Functions (One-Click and Coloured)

Description
This script will show a list of functions that you can choose from. You can customize the list (and colours) by editing the "MenuEntries" array in the script.
Language
C#.net
Minimum Version
Created By
DS1508
Contributors
-
Date Created
Jun 15, 2015
Date Last Modified
Jun 18, 2015

Scripted Function (Macro) Code

using System;
using System.Drawing;
using System.Windows.Forms;

// The 'windowHandle' parameter will contain the window handle for the:
// - Active window when run by hotkey
// - Window Location target when run by a Window Location rule
// - TitleBar Button owner when run by a TitleBar Button
// - Jump List owner when run from a Taskbar Jump List
// - Currently focused window if none of these match
public static class DisplayFusionFunction
	{
		public static void Run(IntPtr windowHandle)
		{
			//these are all of the functions from the "Window Management" functions list
			//the function are just called by their names. to find their names, you can copy them
			//from the context menus, or type "BFS.DisplayFusion.RunFunction(" and a window will come up
			//with all of the available functions
			//Regarding the "--- Cancel ---" entries, these are used to cancel the action, see below "MenuItem_Click"
			string[, ,] MenuEntries = 
				{
					//	{{ "Background-Color", "Foreground-Color", "Function-Name" }}
					{{ "Pink", "Maroon", "--- Cancel ---" }},
					{{ "Khaki", "Black", "Move Window to Next Monitor" }},
					{{ "Khaki", "Black", "Move Window to Previous Monitor" }},
					{{ "PaleGreen", "Black", "Size and Move Window to Left Side of Monitor" }},
					{{ "PaleGreen", "Black", "Size and Move Window to Right Side of Monitor" }},
					{{ "PaleGreen", "Black", "Size and Move Window to Top Side of Monitor" }},
					{{ "PaleGreen", "Black", "Size and Move Window to Bottom Side of Monitor" }},
					{{ "Aquamarine", "Black", "Move Window to Top-Left Corner and Size 50%" }},
					{{ "Aquamarine", "Black", "Move Window to Top-Right Corner and Size 50%" }},
					{{ "Aquamarine", "Black", "Move Window to Bottom-Left Corner and Size 50%" }},
					{{ "Aquamarine", "Black", "Move Window to Bottom-Right Corner and Size 50%" }},
					{{ "Pink", "Maroon", "--- Cancel ---" }}
				};

			//create a new ContextMenuStrip to show the items
			using(ContextMenuStrip menu = new ContextMenuStrip())
				{
					//dont show the padding on the left of the menu
					menu.ShowCheckMargin = false;
					menu.ShowImageMargin = false;

					//add items to the menu, and use our custom function when a user clicks on the items
					for ( int i = 0; i < ( MenuEntries.Length / MenuEntries.Rank ); i++ )
						{
							menu.Items.Add(MenuEntries[i, 0, 2]);
							menu.Items[menu.Items.Count - 1].Click += MenuItem_Click;
							menu.Items[menu.Items.Count - 1].BackColor = Color.FromName( MenuEntries[i, 0, 0]);
							menu.Items[menu.Items.Count - 1].ForeColor = Color.FromName( MenuEntries[i, 0, 1]);
						}

					//if the menu will show on the screen, show it. otherwise, show it above the mouse
					if(BFS.Monitor.GetMonitorBoundsByMouseCursor().Contains(new Point(BFS.Input.GetMousePositionX(), BFS.Input.GetMousePositionY() + menu.Height)))
					menu.Show(BFS.Input.GetMousePositionX(), BFS.Input.GetMousePositionY());
					else
					menu.Show(new Point(BFS.Input.GetMousePositionX(), BFS.Input.GetMousePositionY()), ToolStripDropDownDirection.AboveRight);

					//set focus to the menu
					BFS.Window.Focus(menu.Handle);

					//wait for the menu to close
					while(menu.Visible)
					Application.DoEvents();
				}
		}

			//this function will get the text of the item and try to run it as a DisplayFusion function
			//"--- Cancel ---", change it to what you used in MenuEntries-List
			private static void MenuItem_Click(object sender, EventArgs e)
				{
					ToolStripItem item = sender as ToolStripItem;
					if (item == null || item.Text == "--- Cancel ---")
					return;

					BFS.DisplayFusion.RunFunction(item.Text);
				}
	}