哪个脚本更适合PTC Integrity应用程序的自动化

时间:2015-10-16 10:46:35

标签: scripting mks-integrity

我想创建一个脚本来打开Windows应用程序并使用该应用程序执行某项任务。我列出了我想在下面自动化的活动:

应用程序是PTC完整性。它与数据库服务器链接,其中包含许多具有唯一ID的文件。所以我需要使用ID打开文档并导出它。

步骤:

  1. 打开该应用程序。
  2. 使用ID打开文档。
  3. 将文档导出为某种特定格式。
  4. 我想知道使用哪个脚本来自动执行此过程,即,我提供了一系列ID,脚本将打开应用程序,然后使用ID打开文档并导出它们,直到导出所有ID。使用Excel VBA可以完成。

1 个答案:

答案 0 :(得分:1)

是的,您可以在VBA中执行此操作。 您的VBA可以通过使用PTC完整性命令行界面的Shell命令调用批处理文件。

要导出文档,您可以使用'im exportissues'CLI命令。

要同步调用批处理文件,可以使用下面的ShellandWait函数或查看相关的StackOverflow问题。

    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess _
    As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle _
    As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

    Sub ShellAndWait(ByVal program_name As String, _
                             Optional ByVal window_style As VbAppWinStyle = vbNormalFocus, _


                Optional ByVal max_wait_seconds As Long = 0)
'http://www.vbforums.com/showthread.php?t=505172
' Example:
' Private Sub Form_Load()
'  Me.Show
'  ShellAndWait "Notepad.exe", , 3
'  Me.Caption = "done"
' End Sub
Dim lngProcessId As Long
Dim lngProcessHandle As Long
Dim datStartTime As Date
Const WAIT_TIMEOUT = &H102
Const SYNCHRONIZE As Long = &H100000
Const INFINITE As Long = &HFFFFFFFF

    ' Start the program.
    On Error GoTo ShellError
    lngProcessId = Shell(program_name, window_style)
    On Error GoTo 0

    DoEvents

    ' Wait for the program to finish.
    ' Get the process handle.
    lngProcessHandle = OpenProcess(SYNCHRONIZE, 0, lngProcessId)
    If lngProcessHandle <> 0 Then
        datStartTime = Now
        Do
          If WaitForSingleObject(lngProcessHandle, 250) <> WAIT_TIMEOUT Then
            Exit Do
          End If
          DoEvents
          If max_wait_seconds > 0 Then
            If DateDiff("s", datStartTime, Now) > max_wait_seconds Then Exit Do
          End If
        Loop
        CloseHandle lngProcessHandle
    End If
    Exit Sub

ShellError:
End Sub