Не понимаю, что вы подразумеваете под защищенным приложением?
В любом случае SendKeys, который поставляется с платформой .NET, ограничен. Вы можете использовать Windows API:
[DllImport("user32.dll")]
private static extern UInt32 SendInput(UInt32 nInputs,[MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] Input[] pInputs, Int32 cbSize);
Также вы можете установить другое приложение на передний план:
[DllImport("User32.dll")]
private static extern int SetForegroundWindow(IntPtr point);
Затем вы получите процесс главного окна ручки приложения, что-то вроде этого:
var processes = Process.GetProcessesByName(processName);
// Note that this line will get the first process with the given name:
// if there are multiple, you will only get the first, and you should
// also include a check that the array isn't empty!
var handle = processes[0].MainWindowHandle;
Тогда
SetForegroundwindow(handle);
SendInput(....);
Если вы хотите отправить ключи к игровым приложениям, им нужна дополнительная работа. В большинстве игр используется вход DirectX. Это в двух словах, если вам нужна более подробная информация, дайте мне знать.
Структуры и перечисления для использования с API вызова:
[StructLayout(LayoutKind.Sequential)]
struct MouseInput
{
public int dx;
public int dy;
public int mouseData;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct KeyboardInput
{
public short wVk; //Virtual KeyCode (not needed here)
public short wScan; //Directx Keycode
public int dwFlags; //This tells you what is use (Keyup, Keydown..)
public int time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct HardwareInput
{
public int uMsg;
public short wParamL;
public short wParamH;
}
[StructLayout(LayoutKind.Explicit)]
struct Input
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)]
public MouseInput mi;
[FieldOffset(4)]
public KeyboardInput ki;
[FieldOffset(4)]
public HardwareInput hi;
}
[Flags]
public enum KeyFlag
{
KeyDown = 0x0000,
ExtendedKey = 0x0001,
KeyUp = 0x0002,
UniCode = 0x0004,
ScanCode = 0x0008
}
Вы говорите «что применение» как есть только одна заявка она может быть и предположим, что мы имели бы ни малейшего представления, что это такое, что вы говорите. – PhoenixReborn
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –