1

已解决:我所要做的就是在循环中添加一个睡眠。

我有一个文本文件,其中包含需要登录的用户名和密码。我正在尝试制作一个 VBScript 文件来自动执行此过程。文本文件的语法是

    username
    password
    username
    password
    etc etc

一共是738行。

我目前拥有的代码是

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\Users\Jacob\Desktop\logins.txt", ForReading)
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Const ForReading = 1
    Dim strUsername
    Dim strPassword
    wshshell.AppActivate "Notepad"
    Do Until objFile.AtEndOfStream
    strUsername = objFile.ReadLine
    strPassword = objFile.ReadLine
    wshshell.sendkeys strUsername
    wshshell.sendkeys "~"
    wshshell.sendkeys strPassword
    wshshell.sendkeys "~"
    Loop

我只是用它来确保它通过写入一个空白文本文件来工作。(稍后记事本将被登录可执行文件取代,我已经知道这部分有效)。

代码工作正常,直到它到达文本文件的第 221 行,在那里它中断了。它导出一堆随机垃圾然后停止。

任何帮助是极大的赞赏。

编辑:这是写入文本文件末尾的垃圾文本。你可以看到应该出来的东西还有残余。

.[编辑用户名].22bssddd2222ent000.2wllllkarsstt00....000h8b6b99b88uub2

.....ttttte0000mp00...gh.rrlll00225..gbu .....0022sdg [编辑密码] .proeflussssddd ..22le.pu6....225500s.gl.iteee.55.uuu.hmadttn..0dl

tsssssbeeee0000nsssss0000000ssssdssdbuuuz22dddd000buuu.jj2222 b4....3 .j00000000b

是的。

bb.ddddssgg.2222ssgg05uuudbeeeeen......hh00222l11......tdddd.nn

00000 ll0ssssau0s000ssssss bbdddddlll.ttttl......s be

.o222

b.ddddddutttt ll000buc11e000000utttt bbb.eeeeee0000seeeeee5

mmsss000000unnnttttnnn bb000..s.dsssssss.fa000000 2 .....k000.4tnnn .....bbbseeeu

.n.2te....s 7e9bbmv00000000tttteeee.mttseetnn2222222r0000000000.u.ddd0000000.111ddddge11111ssddddoo000.ssssssnnnn.uutnnn772 .bbg.......66teeb000000ee11sp14lrd000

4

1 回答 1

1

你可以尝试两件事...

  1. 尝试在调用WScript.Sleep 100之后在循环中添加调用SendKeys.
  2. 代替使用AppActivateand SendKeys,您可以尝试在脚本仅将用户名和密码写入另一个文件的地方。这将排除问题是否由SendKeys. 无论如何,使用SendKeys这么多数据是相当危险的。如果记事本获得焦点并且按键开始定向到另一个应用程序时出现任何问题,则可能会产生一些非常非常无意的结果。

这是您的脚本的修改副本,用于写入文本文件

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("logins.txt", ForReading)
Set objFile2 = objFSO.OpenTextFile("logins2.txt", ForWriting, true)
Set WshShell = WScript.CreateObject("WScript.Shell")

Const ForReading = 1, ForWriting = 2
Dim strUsername
Dim strPassword

Do Until objFile.AtEndOfStream
    strUsername = objFile.ReadLine
    strPassword = objFile.ReadLine
    objFile2.Write strUsername & vbCrLf
    objFile2.Write strPassword & vbCrLf
Loop

还有一些风格说明:

  • 在使用常量之前定义它们,最好是在脚本的最顶部。这使您和其他人不必在以后追捕它们或认为它们尚未被定义。在像这样的小脚本中这不是什么大问题,但如果你的脚本开始变大,它可能会让你头疼。
  • Dim与'保持一致。您定义了strUsernamestrPassword但您没有定义objFSO,objFileWshShell. 我总是建议Option Explicit你在使用它们之前强制你定义变量。从长远来看,它可以帮助您避免拼写错误并为您省去很多麻烦。
于 2013-09-09T02:36:38.320 回答