VB编程:怎样向一个已打开的DOS窗口发送按键?

来源:百度知道 编辑:UC知道 时间:2024/06/20 17:05:21
以下程序,我想利用DOS的runas命令,以用户abcd的身份打开记事本,发送命令是成功了,但是在发送密码时不成功,怎么回事啊?谁能帮我改一下

Private Sub Command1_Click()
Dim myHandle As Long, cmd As String
Dim i As Long
myHandle = FindWindow("ConsoleWindowClass", vbNullString)

'发送命令
cmd = "runas /user:abcd notepad.exe"
For i = 1 To Len(cmd)
PostMessage myHandle, WM_CHAR, Asc(Mid$(cmd, i, 1)), 0&
Next i
PostMessage myHandle, WM_CHAR, VK_RETURN, 0&

Delay_mm 3000 '延迟3秒

'发送密码(密码为88888888)
for i=1 to 8
PostMessage myHandle, WM_KEYDOWN, VK_8, 0&
PostMessage myHandle, WM_KEYUP, VK_8, 0&
next i
End Sub

代码没问题,你手工试试,输入密码的时候只能按回车其它的不管用,要用其它的用户运行程序其实也不用调用DOS窗口,给你个代码,虽然有点多,但调用很简单,代码如下:

Option Explicit

Private Const LOGON_WITH_PROFILE = &H1&
Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
Private Const CREATE_NEW_CONSOLE = &H10&
Private Const CREATE_NEW_PROCESS_GROUP = &H200&

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type

Private Type STARTUPINFO
cb As Long
lpReserved As Long
lpDesktop As Long
lpTitle As Long
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Byte
hStdInput As Long
hStdOutput As Long
hStdError As