0

I have some code that sends keys to Telnet to manipulate an IR transmitter of mine. The script works fine as a stand-alone WSH script, but as soon as I try to put it in a Sub inside an HTA it goes BERZERK. Instead of sending my keys to the first instance of cmd, it opens a new one for every .sendkey!

Please help!

Here is my working standalone script:

    <job>
<script language="VBScript">
Option Explicit
On Error Resume Next
Dim WshShell
set WshShell=CreateObject("WScript.Shell")
WshShell.run "cmd.exe"
WScript.Sleep 500


WshShell.SendKeys "telnet 130.160.176.219 4998"

WshShell.SendKeys ("{Enter}")
WScript.Sleep 5000


WshShell.SendKeys "sendir,1:1,1,37764,1,1,340,168,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,22,21,64,21,22,21,64,21,22,21,22,21,22,21,22,21,64,21,22,21,64,21,22,21,64,21,64,21,64,21,64,21,4833"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 500
WshShell.SendKeys "sendir,1:1,10,37764,1,1,340,168,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,22,21,22,21,22,21,22,21,64,21,22,21,22,21,22,21,64,21,64,21,64,21,64,21,22,21,64,21,4833"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 500
WshShell.SendKeys "sendir,1:1,5,37764,1,1,340,168,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,22,21,64,21,22,21,22,21,22,21,22,21,22,21,22,21,64,21,22,21,64,21,64,21,64,21,64,21,64,21,4833"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 500
WshShell.SendKeys "sendir,1:1,11,37764,1,1,340,168,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,22,21,64,21,64,21,64,21,64,21,22,21,64,21,22,21,64,21,22,21,22,21,22,21,22,21,64,21,22,21,64,21,4833"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 500
WshShell.SendKeys "sendir,1:1,1,37764,1,1,340,168,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,64,21,22,21,64,21,22,21,64,21,22,21,22,21,22,21,22,21,64,21,22,21,64,21,22,21,64,21,64,21,64,21,64,21,4833"
WshShell.SendKeys ("{Enter}")
WScript.Sleep 1000
WshShell.SendKeys ("^{]}q{Enter}exit{Enter}")
WScript.Quit 
</script>
</job>
EBGreen
  • 9,395
jake
  • 1
  • Sorry, I'm trying to post the code but unfamiliar with the buttons on this forum. – jake May 06 '15 at 17:07
  • 1
    what happens when you use exec instead of run? Did you try the AppActivate method before sending keys? ( https://technet.microsoft.com/en-us/library/ee156605.aspx ) Note that AFAIK, exec would allow you to respond to telnet replies and prompts – Yorik May 06 '15 at 17:24

1 Answers1

0
WScript.Sleep 500

won't work in an HTA. There is this from an IE window (HTA has one)

setTimeout Method

--------------------------------------------------------------------------------

Evaluates an expression after a specified number of milliseconds has elapsed. 

Syntax

iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])
Parameters

vCode Required. Variant that specifies the function pointer or string that indicates the code to be executed when the specified interval has elapsed. 
iMilliSeconds Required. Integer that specifies the number of milliseconds. 
sLanguage Optional. String that specifies one of the following values: JScript Language is JScript. 
VBScript Language is VBScript. 
JavaScript Language is JavaScript. 


Return Value

Integer. Returns an identifier that cancels the evaluation with the clearTimeout method. 

Remarks

Always use WshShell.AppActivate before sending keys otherwise you don't know where they are going.

As you are using TELNET not CMD there is no point starting cmd and asking it to start telnet. Just start telnet direct.

trigger
  • 31