Advertisement
Guest User

Untitled

a guest
Jul 9th, 2013
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.86 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Reflection;
  6. using System.Runtime.InteropServices;
  7.  
  8. namespace Cardkit
  9. {
  10.    public static class InputWorkflow
  11.     {
  12.  
  13.         [DllImport("user32.dll", SetLastError = true)]
  14.         private static extern uint SendInput(uint numberOfInputs, INPUT[] inputs, int sizeOfInputStructure);
  15.  
  16.         [DllImport("user32.dll")]
  17.         public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  18.  
  19.         [DllImport("user32.dll")]
  20.         public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
  21.  
  22.         /// <summary>
  23.         /// simulate key press
  24.         /// </summary>
  25.         /// <param name="keyCode"></param>
  26.         public static void SendKeyPress(ushort keyCode)
  27.         {
  28.             INPUT input = new INPUT
  29.             {
  30.                 Type = 1
  31.             };
  32.             input.Data.Keyboard = new KEYBDINPUT()
  33.             {
  34.                 Vk = keyCode,
  35.                 Scan = 0,
  36.                 Flags = 0,
  37.                 Time = 0,
  38.                 ExtraInfo = IntPtr.Zero,
  39.             };
  40.  
  41.             INPUT input2 = new INPUT
  42.             {
  43.                 Type = 1
  44.             };
  45.             input2.Data.Keyboard = new KEYBDINPUT()
  46.             {
  47.                 Vk = keyCode,
  48.                 Scan = 0,
  49.                 Flags = 2,
  50.                 Time = 0,
  51.                 ExtraInfo = IntPtr.Zero
  52.             };
  53.             INPUT[] inputs = new INPUT[] { input, input2 };
  54.             if (SendInput(2, inputs, Marshal.SizeOf(typeof(INPUT))) == 0)
  55.                 throw new Exception();
  56.         }
  57.  
  58.         /// <summary>
  59.         /// Send a key down and hold it down until sendkeyup method is called
  60.         /// </summary>
  61.         /// <param name="keyCode"></param>
  62.         public static void SendKeyDown(KeyCode keyCode)
  63.         {
  64.             INPUT input = new INPUT
  65.             {
  66.                 Type = 1
  67.             };
  68.             input.Data.Keyboard = new KEYBDINPUT();
  69.             input.Data.Keyboard.Vk = (ushort)keyCode;
  70.             input.Data.Keyboard.Scan = 0;
  71.             input.Data.Keyboard.Flags = 0;
  72.             input.Data.Keyboard.Time = 0;
  73.             input.Data.Keyboard.ExtraInfo = IntPtr.Zero;
  74.             INPUT[] inputs = new INPUT[] { input };
  75.             if (SendInput(1, inputs, Marshal.SizeOf(typeof(INPUT))) == 0)
  76.             {
  77.                 throw new Exception();
  78.             }
  79.         }
  80.  
  81.         /// <summary>
  82.         /// Release a key that is being hold down
  83.         /// </summary>
  84.         /// <param name="keyCode"></param>
  85.         public static void SendKeyUp(KeyCode keyCode)
  86.         {
  87.             INPUT input = new INPUT
  88.             {
  89.                 Type = 1
  90.             };
  91.             input.Data.Keyboard = new KEYBDINPUT();
  92.             input.Data.Keyboard.Vk = (ushort)keyCode;
  93.             input.Data.Keyboard.Scan = 0;
  94.             input.Data.Keyboard.Flags = 2;
  95.             input.Data.Keyboard.Time = 0;
  96.             input.Data.Keyboard.ExtraInfo = IntPtr.Zero;
  97.             INPUT[] inputs = new INPUT[] { input };
  98.             if (SendInput(1, inputs, Marshal.SizeOf(typeof(INPUT))) == 0)
  99.                 throw new Exception();
  100.  
  101.         }
  102.     }
  103.  
  104.     /// <summary>
  105.     /// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx
  106.     /// </summary>
  107.     [StructLayout(LayoutKind.Sequential)]
  108.     internal struct INPUT
  109.     {
  110.         public uint Type;
  111.         public MOUSEKEYBDHARDWAREINPUT Data;
  112.     }
  113.  
  114.     /// <summary>
  115.     /// http://social.msdn.microsoft.com/Forums/en/csharplanguage/thread/f0e82d6e-4999-4d22-b3d3-32b25f61fb2a
  116.     /// </summary>
  117.     [StructLayout(LayoutKind.Explicit)]
  118.     internal struct MOUSEKEYBDHARDWAREINPUT
  119.     {
  120.         [FieldOffset(0)]
  121.         public HARDWAREINPUT Hardware;
  122.         [FieldOffset(0)]
  123.         public KEYBDINPUT Keyboard;
  124.         [FieldOffset(0)]
  125.         public MOUSEINPUT Mouse;
  126.     }
  127.  
  128.     /// <summary>
  129.     /// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx
  130.     /// </summary>
  131.     [StructLayout(LayoutKind.Sequential)]
  132.     internal struct HARDWAREINPUT
  133.     {
  134.         public uint Msg;
  135.         public ushort ParamL;
  136.         public ushort ParamH;
  137.     }
  138.  
  139.     /// <summary>
  140.     /// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx
  141.     /// </summary>
  142.     [StructLayout(LayoutKind.Sequential)]
  143.     internal struct KEYBDINPUT
  144.     {
  145.         public ushort Vk;
  146.         public ushort Scan;
  147.         public uint Flags;
  148.         public uint Time;
  149.         public IntPtr ExtraInfo;
  150.     }
  151.  
  152.     /// <summary>
  153.     /// http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/2abc6be8-c593-4686-93d2-89785232dacd
  154.     /// </summary>
  155.     [StructLayout(LayoutKind.Sequential)]
  156.     internal struct MOUSEINPUT
  157.     {
  158.         public int X;
  159.         public int Y;
  160.         public uint MouseData;
  161.         public uint Flags;
  162.         public uint Time;
  163.         public IntPtr ExtraInfo;
  164.     }
  165.  
  166.     public enum KeyCode : ushort
  167.     {
  168.         #region Media
  169.  
  170.         /// <summary>
  171.         /// Next track if a song is playing
  172.         /// </summary>
  173.         MEDIA_NEXT_TRACK = 0xb0,
  174.  
  175.         /// <summary>
  176.         /// Play pause
  177.         /// </summary>
  178.         MEDIA_PLAY_PAUSE = 0xb3,
  179.  
  180.         /// <summary>
  181.         /// Previous track
  182.         /// </summary>
  183.         MEDIA_PREV_TRACK = 0xb1,
  184.  
  185.         /// <summary>
  186.         /// Stop
  187.         /// </summary>
  188.         MEDIA_STOP = 0xb2,
  189.  
  190.         #endregion
  191.  
  192.         #region math
  193.  
  194.         /// <summary>Key "+"</summary>
  195.         ADD = 0x6b,
  196.         /// <summary>
  197.         /// "*" key
  198.         /// </summary>
  199.         MULTIPLY = 0x6a,
  200.  
  201.         /// <summary>
  202.         /// "/" key
  203.         /// </summary>
  204.         DIVIDE = 0x6f,
  205.  
  206.         /// <summary>
  207.         /// Subtract key "-"
  208.         /// </summary>
  209.         SUBTRACT = 0x6d,
  210.  
  211.         #endregion
  212.  
  213.         #region Browser
  214.         /// <summary>
  215.         /// Go Back
  216.         /// </summary>
  217.         BROWSER_BACK = 0xa6,
  218.         /// <summary>
  219.         /// Favorites
  220.         /// </summary>
  221.         BROWSER_FAVORITES = 0xab,
  222.         /// <summary>
  223.         /// Forward
  224.         /// </summary>
  225.         BROWSER_FORWARD = 0xa7,
  226.         /// <summary>
  227.         /// Home
  228.         /// </summary>
  229.         BROWSER_HOME = 0xac,
  230.         /// <summary>
  231.         /// Refresh
  232.         /// </summary>
  233.         BROWSER_REFRESH = 0xa8,
  234.         /// <summary>
  235.         /// browser search
  236.         /// </summary>
  237.         BROWSER_SEARCH = 170,
  238.         /// <summary>
  239.         /// Stop
  240.         /// </summary>
  241.         BROWSER_STOP = 0xa9,
  242.         #endregion
  243.  
  244.         #region Numpad numbers
  245.         /// <summary>
  246.         ///
  247.         /// </summary>
  248.         NUMPAD0 = 0x60,
  249.         /// <summary>
  250.         ///
  251.         /// </summary>
  252.         NUMPAD1 = 0x61,
  253.         /// <summary>
  254.         ///
  255.         /// </summary>
  256.         NUMPAD2 = 0x62,
  257.         /// <summary>
  258.         ///
  259.         /// </summary>
  260.         NUMPAD3 = 0x63,
  261.         /// <summary>
  262.         ///
  263.         /// </summary>
  264.         NUMPAD4 = 100,
  265.         /// <summary>
  266.         ///
  267.         /// </summary>
  268.         NUMPAD5 = 0x65,
  269.         /// <summary>
  270.         ///
  271.         /// </summary>
  272.         NUMPAD6 = 0x66,
  273.         /// <summary>
  274.         ///
  275.         /// </summary>
  276.         NUMPAD7 = 0x67,
  277.         /// <summary>
  278.         ///
  279.         /// </summary>
  280.         NUMPAD8 = 0x68,
  281.         /// <summary>
  282.         ///
  283.         /// </summary>
  284.         NUMPAD9 = 0x69,
  285.  
  286.         #endregion
  287.  
  288.         #region Fkeys
  289.         /// <summary>
  290.         /// F1
  291.         /// </summary>
  292.         F1 = 0x70,
  293.         /// <summary>
  294.         /// F10
  295.         /// </summary>
  296.         F10 = 0x79,
  297.         /// <summary>
  298.         ///
  299.         /// </summary>
  300.         F11 = 0x7a,
  301.         /// <summary>
  302.         ///
  303.         /// </summary>
  304.         F12 = 0x7b,
  305.         /// <summary>
  306.         ///
  307.         /// </summary>
  308.         F13 = 0x7c,
  309.         /// <summary>
  310.         ///
  311.         /// </summary>
  312.         F14 = 0x7d,
  313.         /// <summary>
  314.         ///
  315.         /// </summary>
  316.         F15 = 0x7e,
  317.         /// <summary>
  318.         ///
  319.         /// </summary>
  320.         F16 = 0x7f,
  321.         /// <summary>
  322.         ///
  323.         /// </summary>
  324.         F17 = 0x80,
  325.         /// <summary>
  326.         ///
  327.         /// </summary>
  328.         F18 = 0x81,
  329.         /// <summary>
  330.         ///
  331.         /// </summary>
  332.         F19 = 130,
  333.         /// <summary>
  334.         ///
  335.         /// </summary>
  336.         F2 = 0x71,
  337.         /// <summary>
  338.         ///
  339.         /// </summary>
  340.         F20 = 0x83,
  341.         /// <summary>
  342.         ///
  343.         /// </summary>
  344.         F21 = 0x84,
  345.         /// <summary>
  346.         ///
  347.         /// </summary>
  348.         F22 = 0x85,
  349.         /// <summary>
  350.         ///
  351.         /// </summary>
  352.         F23 = 0x86,
  353.         /// <summary>
  354.         ///
  355.         /// </summary>
  356.         F24 = 0x87,
  357.         /// <summary>
  358.         ///
  359.         /// </summary>
  360.         F3 = 0x72,
  361.         /// <summary>
  362.         ///
  363.         /// </summary>
  364.         F4 = 0x73,
  365.         /// <summary>
  366.         ///
  367.         /// </summary>
  368.         F5 = 0x74,
  369.         /// <summary>
  370.         ///
  371.         /// </summary>
  372.         F6 = 0x75,
  373.         /// <summary>
  374.         ///
  375.         /// </summary>
  376.         F7 = 0x76,
  377.         /// <summary>
  378.         ///
  379.         /// </summary>
  380.         F8 = 0x77,
  381.         /// <summary>
  382.         ///
  383.         /// </summary>
  384.         F9 = 120,
  385.  
  386.         #endregion
  387.  
  388.         #region Other
  389.         /// <summary>
  390.         ///
  391.         /// </summary>
  392.         OEM_1 = 0xba,
  393.         /// <summary>
  394.         ///
  395.         /// </summary>
  396.         OEM_102 = 0xe2,
  397.         /// <summary>
  398.         ///
  399.         /// </summary>
  400.         OEM_2 = 0xbf,
  401.         /// <summary>
  402.         ///
  403.         /// </summary>
  404.         OEM_3 = 0xc0,
  405.         /// <summary>
  406.         ///
  407.         /// </summary>
  408.         OEM_4 = 0xdb,
  409.         /// <summary>
  410.         ///
  411.         /// </summary>
  412.         OEM_5 = 220,
  413.         /// <summary>
  414.         ///
  415.         /// </summary>
  416.         OEM_6 = 0xdd,
  417.         /// <summary>
  418.         ///
  419.         /// </summary>
  420.         OEM_7 = 0xde,
  421.         /// <summary>
  422.         ///
  423.         /// </summary>
  424.         OEM_8 = 0xdf,
  425.         /// <summary>
  426.         ///
  427.         /// </summary>
  428.         OEM_CLEAR = 0xfe,
  429.         /// <summary>
  430.         ///
  431.         /// </summary>
  432.         OEM_COMMA = 0xbc,
  433.         /// <summary>
  434.         ///
  435.         /// </summary>
  436.         OEM_MINUS = 0xbd,
  437.         /// <summary>
  438.         ///
  439.         /// </summary>
  440.         OEM_PERIOD = 190,
  441.         /// <summary>
  442.         ///
  443.         /// </summary>
  444.         OEM_PLUS = 0xbb,
  445.         /// <summary>
  446.         /// ;
  447.         /// </summary>
  448.         VK_OEM_155 = 0x3b,
  449.         /// <summary>
  450.         /// :
  451.         /// </summary>
  452.         VK_OEM_255 = 0x3a,
  453.         /// <summary>
  454.         /// %
  455.         /// </summary>
  456.         VK_OEM_355 = 0x3a,
  457.         #endregion
  458.  
  459.         #region KEYS
  460.  
  461.         /// <summary>
  462.         ///
  463.         /// </summary>
  464.         KEY_0 = 0x30,
  465.         /// <summary>
  466.         ///
  467.         /// </summary>
  468.         KEY_1 = 0x31,
  469.         /// <summary>
  470.         ///
  471.         /// </summary>
  472.         KEY_2 = 50,
  473.         /// <summary>
  474.         ///
  475.         /// </summary>
  476.         KEY_3 = 0x33,
  477.         /// <summary>
  478.         ///
  479.         /// </summary>
  480.         KEY_4 = 0x34,
  481.         /// <summary>
  482.         ///
  483.         /// </summary>
  484.         KEY_5 = 0x35,
  485.         /// <summary>
  486.         ///
  487.         /// </summary>
  488.         KEY_6 = 0x36,
  489.         /// <summary>
  490.         ///
  491.         /// </summary>
  492.         KEY_7 = 0x37,
  493.         /// <summary>
  494.         ///
  495.         /// </summary>
  496.         KEY_8 = 0x38,
  497.         /// <summary>
  498.         ///
  499.         /// </summary>
  500.         KEY_9 = 0x39,
  501.         /// <summary>
  502.         ///
  503.         /// </summary>
  504.         KEY_A = 0x41,
  505.         /// <summary>
  506.         ///
  507.         /// </summary>
  508.         KEY_B = 0x42,
  509.         /// <summary>
  510.         ///
  511.         /// </summary>
  512.         KEY_C = 0x43,
  513.         /// <summary>
  514.         ///
  515.         /// </summary>
  516.         KEY_D = 0x44,
  517.         /// <summary>
  518.         ///
  519.         /// </summary>
  520.         KEY_E = 0x45,
  521.         /// <summary>
  522.         ///
  523.         /// </summary>
  524.         KEY_F = 70,
  525.         /// <summary>
  526.         ///
  527.         /// </summary>
  528.         KEY_G = 0x47,
  529.         /// <summary>
  530.         ///
  531.         /// </summary>
  532.         KEY_H = 0x48,
  533.         /// <summary>
  534.         ///
  535.         /// </summary>
  536.         KEY_I = 0x49,
  537.         /// <summary>
  538.         ///
  539.         /// </summary>
  540.         KEY_J = 0x4a,
  541.         /// <summary>
  542.         ///
  543.         /// </summary>
  544.         KEY_K = 0x4b,
  545.         /// <summary>
  546.         ///
  547.         /// </summary>
  548.         KEY_L = 0x4c,
  549.         /// <summary>
  550.         ///
  551.         /// </summary>
  552.         KEY_M = 0x4d,
  553.         /// <summary>
  554.         ///
  555.         /// </summary>
  556.         KEY_N = 0x4e,
  557.         /// <summary>
  558.         ///
  559.         /// </summary>
  560.         KEY_O = 0x4f,
  561.         /// <summary>
  562.         ///
  563.         /// </summary>
  564.         KEY_P = 80,
  565.         /// <summary>
  566.         ///
  567.         /// </summary>
  568.         KEY_Q = 0x51,
  569.         /// <summary>
  570.         ///
  571.         /// </summary>
  572.         KEY_R = 0x52,
  573.         /// <summary>
  574.         ///
  575.         /// </summary>
  576.         KEY_S = 0x53,
  577.         /// <summary>
  578.         ///
  579.         /// </summary>
  580.         KEY_T = 0x54,
  581.         /// <summary>
  582.         ///
  583.         /// </summary>
  584.         KEY_U = 0x55,
  585.         /// <summary>
  586.         ///
  587.         /// </summary>
  588.         KEY_V = 0x56,
  589.         /// <summary>
  590.         ///
  591.         /// </summary>
  592.         KEY_W = 0x57,
  593.         /// <summary>
  594.         ///
  595.         /// </summary>
  596.         KEY_X = 0x58,
  597.         /// <summary>
  598.         ///
  599.         /// </summary>
  600.         KEY_Y = 0x59,
  601.         /// <summary>
  602.         ///
  603.         /// </summary>
  604.         KEY_Z = 90,
  605.  
  606.         #endregion
  607.  
  608.         #region volume
  609.         /// <summary>
  610.         /// Decrese volume
  611.         /// </summary>
  612.         VOLUME_DOWN = 0xae,
  613.  
  614.         /// <summary>
  615.         /// Mute volume
  616.         /// </summary>
  617.         VOLUME_MUTE = 0xad,
  618.  
  619.         /// <summary>
  620.         /// Increase volue
  621.         /// </summary>
  622.         VOLUME_UP = 0xaf,
  623.  
  624.         #endregion
  625.  
  626.  
  627.         /// <summary>
  628.         /// Take snapshot of the screen and place it on the clipboard
  629.         /// </summary>
  630.         SNAPSHOT = 0x2c,
  631.  
  632.         /// <summary>Send right click from keyboard "key that is 2 keys to the right of space bar"</summary>
  633.         RightClick = 0x5d,
  634.  
  635.         /// <summary>
  636.         /// Go Back or delete
  637.         /// </summary>
  638.         BACKSPACE = 8,
  639.  
  640.         /// <summary>
  641.         /// Control + Break "When debuging if you step into an infinite loop this will stop debug"
  642.         /// </summary>
  643.         CANCEL = 3,
  644.         /// <summary>
  645.         /// Caps lock key to send cappital letters
  646.         /// </summary>
  647.         CAPS_LOCK = 20,
  648.         /// <summary>
  649.         /// Ctlr key
  650.         /// </summary>
  651.         CONTROL = 0x11,
  652.  
  653.         /// <summary>
  654.         /// Alt key
  655.         /// </summary>
  656.         ALT = 18,
  657.  
  658.         /// <summary>
  659.         /// "." key
  660.         /// </summary>
  661.         DECIMAL = 110,
  662.  
  663.         /// <summary>
  664.         /// Delete Key
  665.         /// </summary>
  666.         DELETE = 0x2e,
  667.  
  668.  
  669.         /// <summary>
  670.         /// Arrow down key
  671.         /// </summary>
  672.         DOWN = 40,
  673.  
  674.         /// <summary>
  675.         /// End key
  676.         /// </summary>
  677.         END = 0x23,
  678.  
  679.         /// <summary>
  680.         /// Escape key
  681.         /// </summary>
  682.         ESC = 0x1b,
  683.  
  684.         /// <summary>
  685.         /// Home key
  686.         /// </summary>
  687.         HOME = 0x24,
  688.  
  689.         /// <summary>
  690.         /// Insert key
  691.         /// </summary>
  692.         INSERT = 0x2d,
  693.  
  694.         /// <summary>
  695.         /// Open my computer
  696.         /// </summary>
  697.         LAUNCH_APP1 = 0xb6,
  698.         /// <summary>
  699.         /// Open calculator
  700.         /// </summary>
  701.         LAUNCH_APP2 = 0xb7,
  702.  
  703.         /// <summary>
  704.         /// Open default email in my case outlook
  705.         /// </summary>
  706.         LAUNCH_MAIL = 180,
  707.  
  708.         /// <summary>
  709.         /// Opend default media player (itunes, winmediaplayer, etc)
  710.         /// </summary>
  711.         LAUNCH_MEDIA_SELECT = 0xb5,
  712.  
  713.         /// <summary>
  714.         /// Left control
  715.         /// </summary>
  716.         LCONTROL = 0xa2,
  717.  
  718.         /// <summary>
  719.         /// Left arrow
  720.         /// </summary>
  721.         LEFT = 0x25,
  722.  
  723.         /// <summary>
  724.         /// Left shift
  725.         /// </summary>
  726.         LSHIFT = 160,
  727.  
  728.         /// <summary>
  729.         /// left windows key
  730.         /// </summary>
  731.         LWIN = 0x5b,
  732.  
  733.  
  734.         /// <summary>
  735.         /// Next "page down"
  736.         /// </summary>
  737.         PAGEDOWN = 0x22,
  738.  
  739.         /// <summary>
  740.         /// Num lock to enable typing numbers
  741.         /// </summary>
  742.         NUMLOCK = 0x90,
  743.  
  744.         /// <summary>
  745.         /// Page up key
  746.         /// </summary>
  747.         PAGE_UP = 0x21,
  748.  
  749.         /// <summary>
  750.         /// Right control
  751.         /// </summary>
  752.         RCONTROL = 0xa3,
  753.  
  754.         /// <summary>
  755.         /// Return key
  756.         /// </summary>
  757.         ENTER = 13,
  758.  
  759.         /// <summary>
  760.         /// Right arrow key
  761.         /// </summary>
  762.         RIGHT = 0x27,
  763.  
  764.         /// <summary>
  765.         /// Right shift
  766.         /// </summary>
  767.         RSHIFT = 0xa1,
  768.  
  769.         /// <summary>
  770.         /// Right windows key
  771.         /// </summary>
  772.         RWIN = 0x5c,
  773.  
  774.         /// <summary>
  775.         /// Shift key
  776.         /// </summary>
  777.         SHIFT = 0x10,
  778.  
  779.         /// <summary>
  780.         /// Space back key
  781.         /// </summary>
  782.         SPACE_BAR = 0x20,
  783.  
  784.         /// <summary>
  785.         /// Tab key
  786.         /// </summary>
  787.         TAB = 9,
  788.  
  789.         /// <summary>
  790.         /// Up arrow key
  791.         /// </summary>
  792.         UP = 0x26,
  793.  
  794.     }
  795.  
  796.  
  797.  
  798. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement