首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel VB到QTP 11脚本转换问题

Excel VB到QTP 11脚本转换问题
EN

Stack Overflow用户
提问于 2014-01-20 18:11:34
回答 1查看 466关注 0票数 0

我已经用Excel编写了脚本,它运行得很好,现在我正试图将其转换为QTP 11.0 --但也面临一些问题。

根据小福的建议更新问题-

在QTP 11中,什么是等效的VBA - shell函数?

下面是QTP 11脚本

代码语言:javascript
运行
复制
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’

对于如何解决这个问题,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-21 04:08:45

我建议您使用DotNetFactory来访问.NET的所有优点:

代码语言:javascript
运行
复制
Dim csProcess
Set csProcess = DotNetFactory.CreateInstance("System.Diagnostics.Process")
Dim myProcess
Set myProcess = csProcess.Start("notepad.exe")
MsgBox myProcess.Id

如果您不熟悉或无法访问MSDN文档,下面是一个包含命令行参数的示例:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21241211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档