【问题标题】:Using VBScript to control Notepad使用VBScript控制记事本
【发布时间】:2017-03-03 12:08:29
【问题描述】:

结合另一个非常不同的项目,我正在尝试编写一个 VBScript,它在执行时将执行以下操作:

  1. 打开记事本实例(作为隐藏或最小化窗口)
  2. 使记事本实例成为焦点
  3. 在打开的记事本文件中写入“Hello world”
  4. 发出适当的 alt+S 等命令,将桌面上的文件另存为“PrototypeText.txt”
  5. 关闭记事本。

我最大的困惑在于步骤“2”,尤其是上面的“4”。我知道如何在 VBScript 中做所有其他事情。谁能帮我完成这两个步骤?

最后,我意识到还有更实用的方法可以实现这一点,例如 AutoHotKey,或者直接写入 *.txt 文件,也许是其他语言。请理解,上述程序是另一个项目的概念验证,本身不是可交付成果。

非常感谢您花时间回复。指定如何执行上述“2”和“4”的链接(我还没有找到)也可以。

【问题讨论】:

  • @Lankymart - 我当然同意。然而,我正在从事的真正项目是通过 alt+s 和其他键盘命令自动执行另一个程序(称为 formscanner)(关于将“hello world”写入文件的部分并不重要)。 formscanner 程序是一个简单的开源程序,没有为其开发任何类型的 API。但它可以通过键盘快捷键完全从键盘控制。在不使用 AutoHotKey 的情况下这样做是我的主要目标。记事本部分只是一个概念验证
  • 教我读完整题

标签: api vbscript automation


【解决方案1】:

在 WSH 对象中,如果您在该环境中运行 vbs(很可能),则使用 appactivate。但是无法激活隐藏的窗口所以...

同样sendkeys 在 WSH 对象中可以做 4(但不能在隐藏窗口中)。

这是 vbscript 帮助 (https://msdn.microsoft.com/en-us/library/8c6yea83(v=vs.84).aspx) 中使用两个命令的示例,并注意使用 sleep 让应用程序有机会处理命令。

     set WshShell = WScript.CreateObject("WScript.Shell")
     WshShell.Run "calc"
     WScript.Sleep 100
     WshShell.AppActivate "Calculator"
     WScript.Sleep 100
     WshShell.SendKeys "1{+}"
     WScript.Sleep 500
     WshShell.SendKeys "2"
     WScript.Sleep 500
     WshShell.SendKeys "~"
     WScript.Sleep 500
     WshShell.SendKeys "*3"
     WScript.Sleep 500
     WshShell.SendKeys "~"
     WScript.Sleep 2500

最小化的窗口可以获得焦点。

使用这样的字符串来获取桌面。包括引号。"%userprofile%\desktop\yourfilename.txt"。引号是为了防止有任何空格。

AppActivate 也会返回一个代码。如果它可以或被激活,则为真。您可以通过激活对话框标题来使用它来测试对话框。真的是窗口激活。

【讨论】:

    【解决方案2】:

    假设您不想在打开时通过脚本更改/继续添加到此文本文件,则以下内容应该可以工作。

    Dim objFSO, objFileToWrite, WShell
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set WShell = CreateObject("WScript.Shell")
    
    'Create Text File and write to it then close it    
    Set objFileToWrite = objFSO.CreateTextFile("C:\Users\***YOUR USER ID HERE***\Desktop\PrototypeText.txt", 1)
    objFileToWrite.Write "Hello World"
    objFileToWrite.Close
    
    'Open newly created and saved text file
    WShell.Run("Notepad.exe C:\Users\***YOUR USER ID HERE***\Desktop\PrototypeText.txt") 
    

    【讨论】:

      猜你喜欢
      • 2012-03-12
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多