首页 文章

如何为脚本(例如VBScript)公开我的C#以与之交互? (目前使用SendKeys但这会导致一些问题)

提问于
浏览
1

Problem Background

我正在更新C#中一个常用的工具,它要求脚本必须能够自动执行某些功能(点击按钮,填充文本字段) . 到目前为止,这已经使用 SendKeysAlt 快捷方式完成 .

但是,这种方法似乎存在各种问题 .

编写脚本时大写的错误可能会导致问题 . 如果用户位于不同的选项卡控件上,则在选项卡控件上表单元素的快捷方式不起作用 .


Solution Requirements

我需要脚本(现在只是VBScript,但理想的解决方案适用于各种脚本语言)能够可靠地实现以下目标 -

  • 单击 Button s

  • 单击 ToolStripMenuItem

  • 修改 TextBox 的值

  • 递增 NumericUpDown 控件的值


Previous (Unacceptable) Solution

到目前为止,为了实现前三个,在C#应用程序中创建了Alt键盘快捷键,并且已经在VBS中使用 SendKeys 来激活它们 . 这已经相当不错,但不可靠(如上所述) .


这是一个示例脚本,它将焦点设置到应用程序,使用Alt快捷键选择注释字段,然后使用"My Comment"填充它,然后将焦点设置回调用脚本的应用程序 .

dim ObjShell

    set objShell = WScript.CreateObject("WScript.Shell")

        objShell.AppActivate "MyApplication"

        objShell.SendKeys("%{C}") 

        objShell.SendKeys("{END}")

        objShell.SendKeys("My Comment")

        objShell.AppActivate "CallingApplication"

    set objShell = Nothing

为了做后者,我创建了'invisible'按钮,当'clicked'(使用另一个Alt快捷键)时,增加 NumericUpDown 的值 . 显然这是一种非常非常糟糕的方法,因为用户可能会意外地点击这些按钮(更不用说它是多么笨拙,笨拙的解决方法!) .


我相信一定有更好的方法,但到目前为止,我找不到运气......

说清楚 -

  • 我完全可以控制C#应用程序

  • 我完全可以控制脚本

  • 我只能控制调用脚本的应用程序,以便我可以确定它运行的脚本

1 回答

  • 2

    VBScript(和其他脚本工具)可以实例化COM可见对象 .

    因此,在解决方案中创建一个新项目并将其标记为COM可见 . Walkthrough: Creating a simple component in C#

    将一个类(即MyAppController或某个此类名称)添加到项目中,以便脚本创建和交互 .

    使用定义良好的公共方法将用于控制和更新应用程序的逻辑放置在MyAppController类中 .

    示例脚本

    Set app = CreateObject("MyAppController")
     app.AddComment("My new Comment")
    

    要使MyAppController类与您的应用程序通信,您需要设置一个简单的进程间通信链接 . 像命名管道之类的东西可以很好地运行MSDN:How to: Use Named Pipes for Interprocess Communication

    这应该简化您的脚本并使通信更加健壮 . 例如,无需来回交换活动进程来更新注释 .

相关问题