2017-07-24 133 views
1

我运行到一个exe文件进行通信在Windows 7  的VBScript当PC处于锁定状态

一个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") 
+3

当个人电脑进入睡眠模式或休眠状态时,操作被暂停,因此在这种情况下脚本的操作将被中断(否则电脑不会首先进入睡眠/休眠状态)。不过,锁定屏幕不应该具有相同的效果(除非计算机在被锁定时立即进入睡眠模式)。 *你的脚本究竟是“沟通”的?当你的电脑被锁定时,你怎么知道这一点?你能展示更多的代码吗?您的问题中的代码段没有显示任何应该通过锁定屏幕来中断的内容。 –

+0

谢谢Ansgar,我编辑了我的原始问题并添加了完整的代码。 “Alt,Down,Enter”功能用于保存来自DAQ的数据。当我检查网络时,我可以看到它没有保存,但日志正在写入文本文件。如果我看到应用程序没有保存,我可以去电脑解锁,应用程序再次保存。再次感谢,-Verrell –

回答

2

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

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

+0

关于用户级应用程序的好处,因为我正在使用sendkeys。 –

+0

是的,如果您使用SendKeys来执行基于cmd的工作,那么您可以用WShell替换它。就像https://stackoverflow.com/a/45284140/534406 – BoffinbraiN

0

问题是:你是否需要休眠或电脑暂停?如果没有,您应该简单地配置或关闭这些设置。通过只锁定会话,vbscript应该运行并且没有任何麻烦地生成outpout。通过检查和配置高级窗口能量设置,它可能会帮助您解决这个问题。