[DllImport("coredll.dll", SetLastError=true)]
static extern uint SendInput(uint cInputs, /* [MarshalAs(UnmanagedType.LPArray)] */ KEYBOARDINPUT[] inputs, int cbSize);
Declare Function SendInput Lib "coredll.dll" (TODO) As TODO
None.
Do you know one? Please contribute it!
None.
Please add some!
public class cTabControl
{
// The unused private fields below are required to match the native structure layout.
#pragma warning disable 0169
public struct KEYBOARDINPUT
{
public uint type;
public ushort wVk;
ushort wScan;
public uint dwFlags;
uint time;
uint dwExtraInfo;
uint unused1;
uint unused2;
}
#pragma warning restore 0169
public const uint INPUT_KEYBOARD = 1;
public const uint KEYEVENTF_KEYUP = 2;
public const ushort VK_TAB = 0x0009;
public const ushort VK_SHIFT = 0x0010;
public const ushort VK_CTRL = 0x0011;
[DllImport("coredll.dll", SetLastError = true)]
public static extern uint SendInput(uint cInputs, /* [MarshalAs(UnmanagedType.LPArray)] */ KEYBOARDINPUT[] inputs, int cbSize);
#region SetTab
/// <summary>
/// Force the system to react, as if the Tab-key was pressed
/// </summary>
public static void SetTab()
{
KEYBOARDINPUT[] inputs;
uint retVal;
int error;
inputs = new cTabControl.KEYBOARDINPUT[2];
inputs[0].type = inputs[1].type = cTabControl.INPUT_KEYBOARD;
inputs[0].wVk = inputs[1].wVk = cTabControl.VK_TAB;
inputs[1].dwFlags = cTabControl.KEYEVENTF_KEYUP;
retVal = cTabControl.SendInput(2, inputs, 0x001C);
if (retVal != 2)
{
error = Marshal.GetLastWin32Error();
throw new Exception(string.Format("SendInput() returned {0}.", error));
}
}
#endregion
#region SetShiftTab
/// <summary>
/// Force the system to react, as if the Shift- and Tab-key was pressed
/// </summary>
public static void SetShiftTab()
{
KEYBOARDINPUT[] inputs;
uint retVal;
int error;
inputs = new cTabControl.KEYBOARDINPUT[4];
inputs[0].type = inputs[1].type = inputs[2].type = inputs[3].type = cTabControl.INPUT_KEYBOARD;
inputs[0].wVk = inputs[3].wVk = cTabControl.VK_SHIFT;
inputs[1].wVk = inputs[2].wVk = cTabControl.VK_TAB;
inputs[2].dwFlags = inputs[3].dwFlags = cTabControl.KEYEVENTF_KEYUP;
retVal = cTabControl.SendInput(4, inputs, 0x001C);
if (retVal != 4)
{
error = Marshal.GetLastWin32Error();
throw new Exception(string.Format("SendInput() returned {0}.", error));
}
}
#endregion
#region SetCtrlTab
/// <summary>
/// Force the system to react, as if the Ctrl- and Tab-key was pressed
/// </summary>
public static void SetCtrlTab()
{
KEYBOARDINPUT[] inputs;
uint retVal;
int error;
inputs = new cTabControl.KEYBOARDINPUT[4];
inputs[0].type = inputs[1].type = inputs[2].type = inputs[3].type = cTabControl.INPUT_KEYBOARD;
inputs[0].wVk = inputs[3].wVk = cTabControl.VK_CTRL;
inputs[1].wVk = inputs[2].wVk = cTabControl.VK_TAB;
inputs[2].dwFlags = inputs[3].dwFlags = cTabControl.KEYEVENTF_KEYUP;
retVal = cTabControl.SendInput(4, inputs, 0x001C);
if (retVal != 4)
{
error = Marshal.GetLastWin32Error();
throw new Exception(string.Format("SendInput() returned {0}.", error));
}
}
#endregion
#region SetCtrlShiftTab
/// <summary>
/// Force the system to react, as if the Ctrl-, Shift- and Tab-key was pressed
/// </summary>
public static void SetCtrlShiftTab()
{
KEYBOARDINPUT[] inputs;
uint retVal;
int error;
inputs = new cTabControl.KEYBOARDINPUT[6];
inputs[0].type = inputs[1].type = inputs[2].type = inputs[3].type = inputs[4].type = inputs[5].type = cTabControl.INPUT_KEYBOARD;
inputs[0].wVk = inputs[5].wVk = cTabControl.VK_CTRL;
inputs[1].wVk = inputs[4].wVk = cTabControl.VK_SHIFT;
inputs[2].wVk = inputs[3].wVk = cTabControl.VK_TAB;
inputs[2].dwFlags = inputs[5].dwFlags = cTabControl.KEYEVENTF_KEYUP;
retVal = cTabControl.SendInput(6, inputs, 0x001C);
if (retVal != 6)
{
error = Marshal.GetLastWin32Error();
throw new Exception(string.Format("SendInput() returned {0}.", error));
}
}
#endregion
}