【问题标题】:VBScript not working when PC is lockedPC 锁定时 VBScript 不工作
【发布时间】:2017-07-24 19:12:48
【问题描述】:

我正在运行一个与 Windows 7 中的 exe 文件通信的 VBScript。

VBScript 非常好用!

我遇到的问题是,一旦 PC 被锁定、进入睡眠或休眠状态,VBScript 就无法与 exe 应用程序通信。

VBScript 正在运行(我有一个日志,每次循环完成时都会告诉我,但它没有与 exe 通信。

以下代码在 PC 被锁定时不起作用。

Set WSHShell = WScript.CreateObject("WScript.Shell")
' info for exporting data
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fso, MyFile, FileName, TextLine, cycles
Dim I
I = 0
Dim n
n = .1 'how often the program saves the data (in minutes)
cycles = 2 'how many times it will save
FileName = "C:\Users\Desktop\new.txt" 'location where the log file will save
Dim sl
sl = n * 60000 'change from seconds to ms for the sleep function
Set fso = CreateObject("Scripting.FileSystemObject")
' Open the file for output
Set MyFile = fso.OpenTextFile(FileName, ForAppending, True, TristateTrue)
' Write to the file.
MyFile.WriteLine "Log file for recording data from Yokogawa MX100 (" & cycles 
& " cycles)"
WSHShell.Run "MXStandardE.exe"
WScript.Sleep 1000
WSHShell.AppActivate "MXStandardE.exe"
WScript.Sleep 1000
Do while I < cycles
a = Now()
WScript.Sleep 1000
WSHShell.Run "MXStandardE.exe"
WScript.Sleep 1000
WSHShell.AppActivate "MXStandardE.exe"
WScript.Sleep 1000
WSHShell.SendKeys "%A"
WScript.Sleep 1000
WSHShell.SendKeys "{DOWN}"
WScript.Sleep 1000
WSHShell.SendKeys "{ENTER}"
I = I + 1
MyFile.Writeline I & " of " & cycles & " at " & a & " --time of each cycle is 
" & n & " minutes"
WScript.Sleep sl 'when sl is used loop time is in minutes
Loop
MyFile.Close
MsgBox ("Script has completed")

【问题讨论】:

  • 当 PC 进入睡眠模式或休眠状态时,操作会暂停,因此很明显,在这种情况下,您的脚本操作将被中断(否则 PC 不会首先处于睡眠/休眠状态) .不过,简单地锁定屏幕不应该有相同的效果(除非计算机在被锁定时立即进入睡眠模式)。您的脚本“交流”的程度如何准确?当PC被锁定时,你怎么知道它没有?你能展示更多你的代码吗?您问题中的 sn-p 没有显示任何应该通过锁定屏幕来中断的内容。
  • 感谢 Ansgar,我编辑了原始问题并添加了完整的代码。 “Alt、Down、Enter”功能用于保存来自 DAQ 的数据。当我检查网络时,我可以看到它没有保存,但日志正在写入文本文件。如果我看到应用程序没有保存,我可以去 PC 解锁并且应用程序再次保存。再次感谢,-Verrell

标签: vbscript wsh


【解决方案1】:

正如 Ansgar 已经说过的,很明显,当 PC 睡眠或休眠时,什么都不起作用。在 PC 被锁定的情况下,依赖窗口管理或直接输入(如 SendKeys)的技术将无法按预期工作,因为用户会话以及用户级应用程序基本上被搁置,以便为登录屏幕让路或其他用户。

您可能想对SendMessage/PostMessage API 进行一些研究,或者您可以停止使用 VBScript 并将其替换为使用本地服务帐户运行的计划任务或系统服务,假设您只想执行没有任何内容的 exe UI 交互。

【讨论】:

  • 关于用户级应用程序的优点,因为我使用的是 sendkeys。
  • 是的,如果您使用 SendKeys 来执行基于 cmd 的工作,那么您可以将其替换为 WShell。类似stackoverflow.com/a/45284140/534406
【解决方案2】:

问题是:你需要进入休眠状态还是电脑挂起?如果没有,您应该简单地配置或关闭这些设置。通过仅锁定会话,应该运行 vbscript 并毫无问题地生成输出。通过检查和配置高级 Windows 能源设置,它可能会帮助您解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 2011-10-17
    • 2018-04-04
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2016-08-17
    相关资源
    最近更新 更多