Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- using System.Diagnostics;
- using System.Timers;
- using System.Threading;
- using System.Windows.Input;
- namespace Makro
- {
- using KeyDataList = List<KeyData>;
- public partial class MainForm : Form
- {
- private SortedSet<Keys> keysPressed = new SortedSet<Keys>();
- struct INPUT
- {
- public UInt32 type;
- public ushort wVk;
- public ushort wScan;
- public UInt32 dwFlags;
- public UInt32 time;
- public UIntPtr dwExtraInfo;
- public UInt32 uMsg;
- public ushort wParamL;
- public ushort wParamH;
- }
- enum SendInputFlags
- {
- KEYEVENTF_EXTENDEDKEY = 0x0001,
- KEYEVENTF_KEYUP = 0x0002,
- KEYEVENTF_UNICODE = 0x0004,
- KEYEVENTF_SCANCODE = 0x0008,
- }
- [DllImport("user32.dll")]
- static extern UInt32 SendInput(UInt32 nInputs, [MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] INPUT[] pInputs, Int32 cbSize);
- [DllImport("user32.dll")]
- static extern UInt32 MapVirtualKey(UInt32 uCode, UInt32 uMapType);
- /*static Task SimulateKeyHold(VirtualKeyCode key, int holdDurationMs, int repeatDelayMs, int repeatRateMs, CancellationToken token)
- {
- var tcs = new TaskCompletionSource<object>();
- var ctr = new CancellationTokenRegistration();
- var startCount = Environment.TickCount;
- System.Threading.Timer timer = null;
- timer = new System.Threading.Timer(s =>
- {
- lock (timer)
- {
- if (Environment.TickCount - startCount <= holdDurationMs)
- InputSimulator.SimulateKeyDown(key);
- else if (startCount != -1)
- {
- startCount = -1;
- timer.Dispose();
- ctr.Dispose();
- InputSimulator.SimulateKeyUp(key);
- tcs.TrySetResult(null);
- }
- }
- });
- timer.Change(repeatDelayMs, repeatRateMs);
- if (token.CanBeCanceled)
- ctr = token.Register(() =>
- {
- timer.Dispose();
- tcs.TrySetCanceled();
- });
- return tcs.Task;
- }*/
- public MainForm()
- {
- InitializeComponent();
- WindowState = FormWindowState.Minimized;
- ShowInTaskbar = false;
- Visible = false;
- }
- private void MainForm_Load(object sender, EventArgs e)
- {
- Hide();
- Makro.InterceptKeys.OnKeyDown += InterceptKeys_OnKeyDown;
- Makro.InterceptKeys.OnKeyUp += InterceptKeys_OnKeyUp;
- Makro.InterceptKeys.Start();
- }
- /// <summary>
- /// Sends one or more key presses or releases.
- /// </summary>
- /// <param name="keys">A list of KeyData.</param>
- private void SendKeys(KeyDataList keys)
- {
- INPUT[] input = new INPUT[keys.Count];
- //For each key to send.
- for (int iNum = 0; iNum < keys.Count; ++iNum)
- {
- //Set the key.
- input[iNum].wVk = (ushort)keys[iNum].Key;
- //INPUT_KEYBOARD
- input[iNum].type = 1;
- //Set down/up.
- if (keys[iNum].State == KeyState.KeyUp)
- {
- input[iNum].dwFlags = (uint)(SendInputFlags.KEYEVENTF_KEYUP);
- }
- }
- //Send all of the keys.
- SendInput((uint)keys.Count, input, Marshal.SizeOf(input[0]));
- }
- private void InterceptKeys_OnKeyDown(object sender, KeyEventArgs e)
- {
- keysPressed.Add(e.KeyCode);
- //Control + Shift
- if (keysPressed.Contains(MakroKeys.GetKey("lcontrolkey")) && keysPressed.Contains(Keys.LShiftKey))
- {
- if (keysPressed.Contains(Keys.Down))
- {
- SendKeys(new KeyDataList()
- {
- new KeyData(Keys.ControlKey, KeyState.KeyUp),
- new KeyData(Keys.ShiftKey, KeyState.KeyUp)
- });
- for (int i = 0; i < 5; ++i)
- {
- SendKeys(new KeyDataList()
- {
- new KeyData(Keys.Down, KeyState.KeyDown),
- new KeyData(Keys.Down, KeyState.KeyUp)
- });
- }
- SendKeys(new KeyDataList()
- {
- new KeyData(Keys.ControlKey, KeyState.KeyDown),
- new KeyData(Keys.ShiftKey, KeyState.KeyDown)
- });
- }
- else if (keysPressed.Contains(Keys.Up))
- {
- SendKeys(new KeyDataList()
- {
- new KeyData(Keys.ControlKey, KeyState.KeyUp),
- new KeyData(Keys.ShiftKey, KeyState.KeyUp)
- });
- for (int i = 0; i < 5; ++i)
- {
- SendKeys(new KeyDataList()
- {
- new KeyData(Keys.Up, KeyState.KeyDown),
- new KeyData(Keys.Up, KeyState.KeyUp)
- });
- }
- SendKeys(new KeyDataList()
- {
- new KeyData(Keys.ControlKey, KeyState.KeyDown),
- new KeyData(Keys.ShiftKey, KeyState.KeyDown)
- });
- }
- }
- }
- private void InterceptKeys_OnKeyUp(object sender, KeyEventArgs e)
- {
- keysPressed.Remove(e.KeyCode);
- }
- private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Right)
- {
- Close();
- }
- }
- private void MainForm_Leave(object sender, EventArgs e)
- {
- notifyIcon.Visible = false;
- }
- }
- public enum KeyState
- {
- KeyUp,
- KeyDown
- }
- public class KeyData
- {
- public Keys Key;
- public KeyState State;
- public KeyData(Keys passedKey, KeyState passedState)
- {
- Key = passedKey;
- State = passedState;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement