在 VB.NET 中发送击键的简单应用程序 [英] Simple Application for sending Keystroke in VB.NET

查看:20
本文介绍了在 VB.NET 中发送击键的简单应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个关于 Sendkeys 类的问题,因为我想使用这个类来向活动应用程序发送一些按键.作为第一步,我想测试 {Enter} 击键,因此为了实现这一点,我在 vb.net 2010 中做了一个简单的应用程序

I have an issue regarding Sendkeys Class, as i want to use this class in order to send some keystroke to the active application. As a first step i want to test the {Enter} keystroke, so in order to achieve that i made a simple application in 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.Windows.Forms.dll 中发生类型为System.StackOverflowException"的未处理异常有人可以帮助我吗?

When i tried to run for {Enter} i have received infinit loop error: An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll Could someone help me?

后期同时我发现了另一个例子

LATER EDIT : In meantime i have found another example

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

如果在后台我有两个应用程序:

If in background i have two applications :

  1. 视觉工作室
  2. 目标应用

我如何专注于目标应用程序,因为现在当我运行表单时,该表单变为活动状态..是否有任何解决方案可以使用某些参数(我想发送的密钥)从命令提示符调用 winform?

How can i focus on the target application, because now when i am running the form , that form became active..is there any solution to call the winform from command prompt with some parameter (the key that i want to send)?

后期编辑2强文本我已经放弃了 Windows 窗体的想法,所以最后我在控制台应用程序中制作了一个简单的程序来模拟击键......导入系统导入 System.Windows.Forms

Later Edit2 strong text i have give it up the idea for windows form, so finnally i have made a simple program in console application that simulates the keystroke ... Imports System Imports System.Windows.Forms

模块 Module1

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

结束模块

顺便说一下,为了在参数中使用双引号,您需要 \"test\"...(我花了 15 分钟来找出答案)所以它可能有用...再次感谢您提供的信息.

By the way in order to use double quotes in a parameter you need \"test\"...(i have spent 15 min to find out) so it might be usefull... Thanks again for the informations.

推荐答案

为了将密钥发送到另一个应用程序,您需要先在按钮上单击激活该应用程序,然后再发送密钥

In order to sendkey to another application, you need to first activate that application on the button click and then send keys

MSDN 链接

// 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("=");
}

这篇关于在 VB.NET 中发送击键的简单应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆