Как послать непрерывное нажатие клавиши программе?

Я использовал SendKeys.Send () и SendKeys.SendWait () для отправки ключей программе переднего плана ( программа, отличная от написанного приложения).

Я попытался отправить непрерывный ключ-нажмите, повторно посылая одну и ту же клавишу с определенной задержкой между ними, но эффект не был таким же, как при непрерывном нажатии клавиши в этом приложении.

Мой вопрос: Как я могу послать непрерывное нажатие клавиши программе ? Эффект от нажатия этой клавиши должен быть таким же, как и при непрерывном нажатии этой клавиши в приложении.

РЕДАКТИРОВАНИЕ РЕДАКТИРОВАНИЯ

Решение заключалось в вызове метода:

[DllImport("User32.dll")]
static extern int SendMessage(IntPtr hWnd, uint wMsg, UIntPtr wParam, IntPtr lParam);

с параметрами, полученными из:

общедоступной системы. Diagnostics.Process [] p = System.Diagnostics.Process.GetProcessesByName ("process");

p [0] .MainWindowHandle is hWnd

и использование Spy в окне:

щелчок правой кнопкой мыши по строка сообщения в Spy показывает wMsg , wParam и lParam (все 3 в шестнадцатеричном формате)

SendMessage (p [0] .MainWindowHandle, (uint ) 0x0100, (UIntPtr) 0x00000041, (IntPtr) (0x001E0001));

Посылка только одного сообщения WM_KEYDOWN приводит к тому, что клавиша нажимается непрерывно. Чтобы остановить программу, действующую как постоянно нажатая клавиша, я должен нажать эту клавишу на клавиатуре и отпустить ее, чтобы сгенерировался WM_KEYUP. Отправка WM_KEYUP в коде дает System.OverFlow «Арифметическая операция привела к переполнению». исключение. Есть идеи, почему это могло произойти?

Спасибо за ответы: Ation и takrl

6
задан Răzvan Flavius Panda 11 July 2011 в 20:54
поделиться