Простое приложение для отправки нажатия клавиш в VB.NET - PullRequest
0 голосов
/ 20 марта 2012

У меня проблема с классом Sendkeys, так как я хочу использовать этот класс для отправки нажатия клавиши активному приложению. В качестве первого шага я хочу протестировать нажатие клавиши {Enter}, поэтому для этого я сделал простое приложение в vb.net 2010

Public Class Form1
Public Shared data As String
Private Sub SendintText(command As String)
    Try
        SendKeys.SendWait(command)
    Catch e As Exception
        MsgBox(e.StackTrace)
    End Try
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    data = TextBox1.Text.ToString
    SendingText(data)
End Sub

Конечный класс

Когда я пытался бежать за {Enter}, я получил ошибку бесконечного цикла: Необработанное исключение типа «System.StackOverflowException» произошло в System.Windows.Forms.dll Может ли кто-нибудь помочь мне?

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: Тем временем я нашел другой пример

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    System.Threading.Thread.Sleep(2000)
    SendKeys.SendWait("{ENTER}")
End Sub

Если в фоновом режиме у меня есть два приложения:

  1. Visual Studio
  2. Целевое приложение

Как я могу сосредоточиться на целевом приложении, потому что теперь, когда я запускаю форму, эта форма стала активной ... есть какое-либо решение для вызова winform из командной строки с некоторым параметром (ключ, который я хочу отправить)

Позже Edit2 сильный текст Я отказался от идеи для формы Windows, так что в конце концов я сделал простую программу в консольном приложении, которая имитирует нажатие клавиш ... Imports System Импортирует System.Windows.Forms

Модуль Модуль1

Sub Main(ByVal args() As String)
    Dim data As String = args(0)
    Console.WriteLine("You insert the : {0}", data)
    System.Threading.Thread.Sleep(5000)
    SendKeys.SendWait(data)
End Sub

Конечный модуль

Кстати, чтобы использовать двойные кавычки в параметре, вам нужно \ "проверить \" ... (я потратил 15 минут, чтобы выяснить это), так что это может быть полезно ... Еще раз спасибо за информацию.

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Чтобы отправить ключ в другое приложение, вам нужно сначала активировать это приложение нажатием кнопки, а затем отправить ключи

MSDN Link

// Get a handle to an application window.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,
    string lpWindowName);

// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

// Send a series of key presses to the Calculator application.
private void button1_Click(object sender, EventArgs e)
{
    // Get a handle to the Calculator application. The window class
    // and window name were obtained using the Spy++ tool.
    IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator");

    // Verify that Calculator is a running process.
    if (calculatorHandle == IntPtr.Zero)
    {
        MessageBox.Show("Calculator is not running.");
        return;
    }

    // Make Calculator the foreground application and send it 
    // a set of calculations.
    SetForegroundWindow(calculatorHandle);
    SendKeys.SendWait("111");
    SendKeys.SendWait("*");
    SendKeys.SendWait("11");
    SendKeys.SendWait("=");
}
0 голосов
/ 20 марта 2012

Кнопка имеет фокус.Событие нажатия кнопки отправляет нажатие клавиши ввода.Отправка ввода приводит к срабатыванию события нажатия кнопки.Бесконечный цикл.

Вы можете отключить кнопку до и снова включить кнопку после выполнения процедуры sendkeys, чтобы остановить бесконечный цикл.

Что вы, вероятно, хотели бы сделать, это переключить фокусвернуться к приложению, в которое вы хотите отправить нажатия клавиш.

...