SendKeys not working

Hi all,
I am using the following script to reboot my DSL router. It is working perfectly fine when a user account is signed in. But when the computer is locked(Windows + L key) the script fails. I have investigated and found that SendKeys will not work when the computer is locked. So what are my options? What should I use instead of "Sendkeys"?
Note: This script is run from a VB.NET application whenever internet stays disconnected for more than 2 minutes....
Can the script be eliminated and done form inside the VB.NET code?
OS: Windows XP SP3
VB.NET 2008
On Error Resume Next
strComputer = "."
 
Dim  WshShell, Windir, i, objWMIService,SeverName
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 
Set WshShell = CreateObject("WScript.Shell")
WinDir = WshShell.ExpandEnvironmentStrings("%WinDir%")
ServerName = " 192.168.1.1"
 
 
        'Launch telnet session from the command line
        WshShell.Run "telnet " & ServerName
        'Wait until the application has loaded
        WScript.Sleep 300    
        Set ColProcesses = objWMIService.ExecQuery("Select * from Win32_Process",,48)
        For Each Process in ColProcesses
           If Process.Name = "telnet.exe"  Then
              WshShell.AppActivate Process.Name
           End If
        Next
            wscript.sleep 100
            WshShell.SendKeys "root"
            wscript.sleep 200
            WshShell.SendKeys "{ENTER}"
            wscript.sleep 200
            WshShell.SendKeys "admin"
            wscript.sleep 200
            WshShell.SendKeys "{ENTER}"
            wscript.sleep 200
            WshShell.SendKeys "reboot"
            wscript.sleep 200
            WshShell.SendKeys "{ENTER}"
            wscript.sleep 200
Set ColProcesses = objWMIService.ExecQuery("Select * from Win32_Process",,48)
        For Each Process in ColProcesses
           If Process.Name = "telnet.exe" Then
              Process.Terminate()
           End If
        Next

Open in new window

LVL 13
imarshadAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

kaylanreilorCommented:
SendKeys is used to send the message that a keyboard's key has been pressed to a window. So, of course, somebody must be logged on the machine.
0
Mike TomlinsonMiddle School Assistant TeacherCommented:
"Can the script be eliminated and done form inside the VB.NET code?"

Unproven code...I tested by sending simple commands like "help" and "display" while the computer was NOT locked:
(just FYI...I have zero experience using telnet)
Public Class Form1
 
    Private Const WM_CHAR As Integer = &H102
 
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _
        ByVal hwnd As Integer, ByVal wMsg As Integer, _
        ByVal wParam As Integer, ByVal lParam As Integer) As Integer
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ServerName As String = "192.168.1.1"
        Dim script() As String = {"root", "admin", "reboot"}
        Dim telnet As Process = Process.Start("telnet", ServerName)
        System.Threading.Thread.Sleep(2000) ' delay to make sure it's loaded
 
        Dim c As String
        For Each cmd As String In script
            For i As Integer = 0 To cmd.Length - 1
                c = cmd.Substring(i, 1)
                PostMessage(telnet.MainWindowHandle, WM_CHAR, Asc(c), 0&)
            Next i
            PostMessage(telnet.MainWindowHandle, WM_CHAR, Asc(vbCr), 0&)
            PostMessage(telnet.MainWindowHandle, WM_CHAR, Asc(vbLf), 0&)
            System.Threading.Thread.Sleep(200)
        Next
 
        telnet.CloseMainWindow()
    End Sub
 
End Class

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Mike TomlinsonMiddle School Assistant TeacherCommented:
I just did another simple test and was able to open a telnet window and send several commands while the computer was LOCKED.  =)
0
CodeCruiserCommented:
0
imarshadAuthor Commented:
Thanks Idle_mind..... This was exactly what I was looking for....
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
VB Script

From novice to tech pro — start learning today.