Advertisement
Guest User

Makro Improved MainForm (Up/Down 5 with Ctrl+Shift+Up/Down)

a guest
Jan 26th, 2017
446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.93 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Runtime.InteropServices;
  11. using System.Diagnostics;
  12. using System.Timers;
  13. using System.Threading;
  14. using System.Windows.Input;
  15.  
  16. namespace Makro
  17. {
  18.     using KeyDataList = List<KeyData>;
  19.  
  20.  
  21.     public partial class MainForm : Form
  22.     {
  23.         private SortedSet<Keys> keysPressed = new SortedSet<Keys>();
  24.  
  25.         struct INPUT
  26.         {
  27.             public UInt32 type;
  28.             public ushort wVk;
  29.             public ushort wScan;
  30.             public UInt32 dwFlags;
  31.             public UInt32 time;
  32.             public UIntPtr dwExtraInfo;
  33.             public UInt32 uMsg;
  34.             public ushort wParamL;
  35.             public ushort wParamH;
  36.         }
  37.  
  38.         enum SendInputFlags
  39.         {
  40.             KEYEVENTF_EXTENDEDKEY = 0x0001,
  41.             KEYEVENTF_KEYUP = 0x0002,
  42.             KEYEVENTF_UNICODE = 0x0004,
  43.             KEYEVENTF_SCANCODE = 0x0008,
  44.         }
  45.  
  46.         [DllImport("user32.dll")]
  47.         static extern UInt32 SendInput(UInt32 nInputs, [MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] INPUT[] pInputs, Int32 cbSize);
  48.  
  49.         [DllImport("user32.dll")]
  50.         static extern UInt32 MapVirtualKey(UInt32 uCode, UInt32 uMapType);
  51.  
  52.         /*static Task SimulateKeyHold(VirtualKeyCode key, int holdDurationMs, int repeatDelayMs, int repeatRateMs, CancellationToken token)
  53.         {
  54.             var tcs = new TaskCompletionSource<object>();
  55.             var ctr = new CancellationTokenRegistration();
  56.             var startCount = Environment.TickCount;
  57.             System.Threading.Timer timer = null;
  58.             timer = new System.Threading.Timer(s =>
  59.             {
  60.                 lock (timer)
  61.                 {
  62.                     if (Environment.TickCount - startCount <= holdDurationMs)
  63.                         InputSimulator.SimulateKeyDown(key);
  64.                     else if (startCount != -1)
  65.                     {
  66.                         startCount = -1;
  67.                         timer.Dispose();
  68.                         ctr.Dispose();
  69.                         InputSimulator.SimulateKeyUp(key);
  70.  
  71.                         tcs.TrySetResult(null);
  72.                     }
  73.                 }
  74.             });
  75.             timer.Change(repeatDelayMs, repeatRateMs);
  76.  
  77.             if (token.CanBeCanceled)
  78.                 ctr = token.Register(() =>
  79.                 {
  80.                     timer.Dispose();
  81.                     tcs.TrySetCanceled();
  82.                 });
  83.             return tcs.Task;
  84.         }*/
  85.  
  86.  
  87.         public MainForm()
  88.         {
  89.             InitializeComponent();
  90.  
  91.             WindowState = FormWindowState.Minimized;
  92.             ShowInTaskbar = false;
  93.             Visible = false;
  94.         }
  95.  
  96.         private void MainForm_Load(object sender, EventArgs e)
  97.         {
  98.             Hide();
  99.  
  100.             Makro.InterceptKeys.OnKeyDown += InterceptKeys_OnKeyDown;
  101.             Makro.InterceptKeys.OnKeyUp += InterceptKeys_OnKeyUp;
  102.             Makro.InterceptKeys.Start();
  103.         }
  104.  
  105.         /// <summary>
  106.         /// Sends one or more key presses or releases.
  107.         /// </summary>
  108.         /// <param name="keys">A list of KeyData.</param>
  109.         private void SendKeys(KeyDataList keys)
  110.         {
  111.             INPUT[] input = new INPUT[keys.Count];
  112.  
  113.             //For each key to send.
  114.             for (int iNum = 0; iNum < keys.Count; ++iNum)
  115.             {
  116.                 //Set the key.
  117.                 input[iNum].wVk = (ushort)keys[iNum].Key;
  118.  
  119.                 //INPUT_KEYBOARD
  120.                 input[iNum].type = 1;
  121.  
  122.                 //Set down/up.
  123.                 if (keys[iNum].State == KeyState.KeyUp)
  124.                 {
  125.                     input[iNum].dwFlags = (uint)(SendInputFlags.KEYEVENTF_KEYUP);
  126.                 }
  127.             }
  128.  
  129.             //Send all of the keys.
  130.             SendInput((uint)keys.Count, input, Marshal.SizeOf(input[0]));
  131.         }
  132.  
  133.         private void InterceptKeys_OnKeyDown(object sender, KeyEventArgs e)
  134.         {
  135.             keysPressed.Add(e.KeyCode);
  136.            
  137.             //Control + Shift
  138.             if (keysPressed.Contains(MakroKeys.GetKey("lcontrolkey")) && keysPressed.Contains(Keys.LShiftKey))
  139.             {
  140.                 if (keysPressed.Contains(Keys.Down))
  141.                 {
  142.                     SendKeys(new KeyDataList()
  143.                     {
  144.                         new KeyData(Keys.ControlKey, KeyState.KeyUp),
  145.                         new KeyData(Keys.ShiftKey, KeyState.KeyUp)
  146.                     });
  147.  
  148.                     for (int i = 0; i < 5; ++i)
  149.                     {
  150.                         SendKeys(new KeyDataList()
  151.                         {
  152.                             new KeyData(Keys.Down, KeyState.KeyDown),
  153.                             new KeyData(Keys.Down, KeyState.KeyUp)
  154.                         });
  155.                     }
  156.  
  157.                     SendKeys(new KeyDataList()
  158.                     {
  159.                         new KeyData(Keys.ControlKey, KeyState.KeyDown),
  160.                         new KeyData(Keys.ShiftKey, KeyState.KeyDown)
  161.                     });
  162.                 }
  163.                 else if (keysPressed.Contains(Keys.Up))
  164.                 {
  165.                     SendKeys(new KeyDataList()
  166.                     {
  167.                         new KeyData(Keys.ControlKey, KeyState.KeyUp),
  168.                         new KeyData(Keys.ShiftKey, KeyState.KeyUp)
  169.                     });
  170.  
  171.                     for (int i = 0; i < 5; ++i)
  172.                     {
  173.                         SendKeys(new KeyDataList()
  174.                         {
  175.                             new KeyData(Keys.Up, KeyState.KeyDown),
  176.                             new KeyData(Keys.Up, KeyState.KeyUp)
  177.                         });
  178.                     }
  179.  
  180.                     SendKeys(new KeyDataList()
  181.                     {
  182.                         new KeyData(Keys.ControlKey, KeyState.KeyDown),
  183.                         new KeyData(Keys.ShiftKey, KeyState.KeyDown)
  184.                     });
  185.                 }
  186.             }
  187.         }
  188.  
  189.         private void InterceptKeys_OnKeyUp(object sender, KeyEventArgs e)
  190.         {
  191.             keysPressed.Remove(e.KeyCode);
  192.         }
  193.  
  194.         private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
  195.         {
  196.             if (e.Button == MouseButtons.Right)
  197.             {
  198.                 Close();
  199.             }
  200.         }
  201.  
  202.         private void MainForm_Leave(object sender, EventArgs e)
  203.         {
  204.             notifyIcon.Visible = false;
  205.         }
  206.     }
  207.  
  208.  
  209.     public enum KeyState
  210.     {
  211.         KeyUp,
  212.         KeyDown
  213.     }
  214.  
  215.     public class KeyData
  216.     {
  217.         public Keys Key;
  218.         public KeyState State;
  219.  
  220.         public KeyData(Keys passedKey, KeyState passedState)
  221.         {
  222.             Key = passedKey;
  223.             State = passedState;
  224.         }
  225.     }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement