Я использовал 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