---------------------------------------------------------------------------------------------------- LITERAL STRINGS ---------------------------------------------------------------------------------------------------- An example of passing a string literal (non-escaped string) using: String.raw`` sp.RunProgram(String.raw`C:\Windows\notepad.exe`, "", "", "", false, true, false); String.raw`` can span lines as well, will include all of the characters between the backticks (`), including new lines: var cc = String.raw`This is a test`; clip.SetText(cc); ---------------------------------------------------------------------------------------------------- EXTERNAL FILES ---------------------------------------------------------------------------------------------------- Load and execute js from a file: eval(File.ReadAllText("C:\\Users\\robya\\Desktop\\test.js")); Open text file and append a line to it: var f = File.AppendText("C:\\Users\\robya\\Desktop\\test.js"); f.WriteLine("Test"); f.Close(); Backup your existing StrokesPlus settings file: var source = clr.System.IO.Path.Combine(clr.System.Environment.GetFolderPath(clr.System.Environment.SpecialFolder.ApplicationData), "StrokesPlus.net", "StrokesPlus.net.bin"); var dest = clr.System.IO.Path.Combine(clr.System.Environment.GetFolderPath(clr.System.Environment.SpecialFolder.ApplicationData), "StrokesPlus.net", "Backup"); if (!clr.System.IO.Directory.Exists(dest)) clr.System.IO.Directory.CreateDirectory(dest); dest = clr.System.IO.Path.Combine(dest,"StrokesPlus.net_" + DateTime.Now.ToString("yyyy-MM-dd_HHmmss") + ".bin"); File.Copy(source, dest, true); //Optional: Delete backup files more than 3 months old //Note that if you exit frequently and have a large number of files in the backup folder, this loop could take several seconds to complete var files = clr.System.IO.Directory.GetFiles(destdir); for (i=0;i 0) { //mouse wheel scrolled up sp.SendKeys("^{TAB}"); } else { //mouse wheel scrolled down sp.SendKeys("^+{TAB}"); } } else if(wheel.X >= (parseInt(wheel.Window.Rectangle.Right) - 25)) { //is the mouse along the right side of the window? wheel.Window.BringToFront(); if(wheel.Delta > 0) { //scroll up, send CTRL+Home to go to the top of the page sp.SendKeys("^{HOME}"); } else { //scroll up, send CTRL+End to go to the end of the page sp.SendKeys("^{END}"); } } else if(wheel.Window.Process.MainModule.ModuleName == "chrome.exe" && wheel.X <= (parseInt(wheel.Window.Rectangle.Left) + 20)) { wheel.Window.BringToFront(); if(wheel.Delta > 0){ //scroll up, send CTRL+Home to go to the top of the page sp.SendKeys("{F5}"); } else { //scroll up, send CTRL+End to go to the end of the page sp.SendVKey(vk.BROWSER_BACK); } } else { //Default, pass mouse wheel message onto the original control wheel.Control.PostMessage(host.cast(uint, 0x020A), new IntPtr(wheel.WParam), new IntPtr(wheel.LParam)); } } else { //Default, pass mouse wheel message onto the original control wheel.Control.PostMessage(host.cast(uint, 0x020A), new IntPtr(wheel.WParam), new IntPtr(wheel.LParam)); } ---------------------------------------------------------------------------------------------------- CONFIGURATION ---------------------------------------------------------------------------------------------------- Loop through all applications defined in S+, show the message box for the app, then for each action: for(i=0;i