Shell Excel VB到QTP 11脚本转换问题
我已经用Excel VBA编写了脚本,它工作得很好,现在我正试图将其转换为QTP 11.0-但是面临一些问题Shell Excel VB到QTP 11脚本转换问题,shell,excel,qtp,vba,Shell,Excel,Qtp,Vba,我已经用Excel VBA编写了脚本,它工作得很好,现在我正试图将其转换为QTP 11.0-但是面临一些问题 根据小福的建议更新问题- QTP11中的VBA外壳函数等效于什么 下面是QTP 11脚本的 Extern.Declare micHwnd, "OpenProcess", "kernel32", "OpenProcess", micLong, micLong, micLong Extern.Declare micHwnd, "WaitForSingleObject", "kernel32
根据小福的建议更新问题- QTP11中的VBA外壳函数等效于什么 下面是QTP 11脚本的
Extern.Declare micHwnd, "OpenProcess", "kernel32", "OpenProcess", micLong, micLong, micLong
Extern.Declare micHwnd, "WaitForSingleObject", "kernel32", "WaitForSingleObject", micLong, micLong
Extern.Declare micHwnd, "CloseHandle", "kernel32", "CloseHandle", micLong
Const PROCESS_QUERY_INFORMATION = &H400
Const SYNCHRONIZE = &H100000
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const STATUS_PENDING = &H103
Const STILL_ACTIVE = &H103
Const WAIT_TIMEOUT = &H102
Const INFINITE = &HFFFFFFFF
Public Function test_exe()
Dim argStr
argStr = "cmd.exe /c " + Chr(34) & "plink.exe -load " + Chr(34) + session_name + Chr(34) + " -l " + Chr(34) + login_id + Chr(34) + " -pw " + Chr(34) + dns_pwd + Chr(34) + " -m " + Chr(34) + cmd_dir + "commands.txt" + Chr(34) + " >> " + Chr(34) + log_dir & log_filename + Chr(34) + Chr(34)
exeCount = Run_Test(argStr, log_dir + log_filename)
End Function
Public Function Run_Test(exeStr, ByVal logFile)
Dim pid, ExitEvent
Dim lineStr
Dim okFlg
Dim hProcess
exeCount = "0"
okFlg = 0
pid = shell(exeStr, vbHide)
hProcess = Extern.OpenProcess(PROCESS_QUERY_INFORMATION + SYNCHRONIZE, 0, pid)
ExitEvent = Extern.WaitForSingleObject(hProcess, 15000)
Extern.CloseHandle(hProcess)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(logFile, ForWriting, True)
Do
f.writeLine lineStr
If InStr(1, lineStr, "/home/") > 0 Then okFlg = okFlg + 1
exeCount = "1"
Loop Until EOF(3)
f.close
If okFlg >= 1 Then
Run_Test = okFlg
Else
Run_Test = -1
End If
End Function
我收到的错误位于“**pid=shell(exeStr,vbHide)**
”行-“对象不支持此属性或方法:'shell'”
关于如何解决此问题有何建议?我建议您使用DotNetFactory访问所有.NET文件:
Dim csProcess
Set csProcess = DotNetFactory.CreateInstance("System.Diagnostics.Process")
Dim myProcess
Set myProcess = csProcess.Start("notepad.exe")
MsgBox myProcess.Id
如果您不熟悉或无法访问MSDN文档,下面是一个带有命令行参数的示例:
Dim SystemProcess
Set SystemProcess = DotNetFactory.CreateInstance("System.Diagnostics.Process")
Dim processStartInfo
Set processStartInfo = DotNetFactory.CreateInstance("System.Diagnostics.ProcessStartInfo")
processStartInfo.FileName = "cmd.exe"
processStartInfo.Arguments = "/c notepad.exe"
Dim myProcess
Set myProcess = SystemProcess.Start(processStartInfo)
msgbox myProcess.Id
为了问题的明确性,您可能需要删除大部分代码。您实际上只是在问“什么是UFT/QTP与VBA中的“shell”函数的等价物?”或“如何在UFT/QTP中启动进程并获取进程ID?”。我按照您的建议进行了尝试,但出现了错误-“
External object System.Diagnostics.Process::Start引发了以下异常:系统找不到文件指定行(85):“Set myProcess=csProcess.Start(exeStr)
”@Bhavin Krishna有关如何处理命令行参数和进程类,请参阅额外的代码示例。