首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用vbscript实现进程间通信

用vbscript实现进程间通信
EN

Stack Overflow用户
提问于 2012-06-08 13:23:50
回答 2查看 5.7K关注 0票数 3

我需要将数据从一个进程发送到另一个进程。约束条件:

发送者进程调用开销很大。这需要使用vbscipt来完成。对于发送方进程,此数据传输是一个额外的work.It,不应受此功能的太大影响。在4-5分钟内,发送者进程中大约有1000个线程。

更快的进程间通信是important.If,它可以异步完成,这样会更好。我读到了关于命名pipe.Is的文章,使用vbscript打开命名管道是可能的,考虑到上面的约束,.Also是否还有其他可能的方法。

EN

回答 2

Stack Overflow用户

发布于 2012-06-08 13:37:10

使用命名管道可能是原生VBScript的唯一选择。您可以通过用某种其他语言编写COM对象来访问任何其他IPC方法。

命名管道可以像文件一样写入,因此您可以使用FileSystemObject打开命名管道并对其进行读/写。打开命名管道的格式是使用\\\\.\pipe\PipeName格式(用管道的实际名称替换PipeName )。

因此,要在VBScript中写入命名管道:

代码语言:javascript
运行
复制
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("\\.\pipe\PipeName", True)
a.WriteLine("This is a test.")
a.Close
票数 4
EN

Stack Overflow用户

发布于 2013-03-13 10:20:41

代码语言:javascript
运行
复制
Option Explicit

Dim g_receivedCallback

If WScript.Arguments.Named.Exists("NEW") Then
    RunSecondInstance
Else
    RunFirstInstance
End If

Sub RunSecondInstance()
    Dim oSa, oWindow, oData, oCallback
    ' Search for the window
    Set oSa = CreateObject("Shell.Application")
    For Each oWindow In oSa.Windows
        If TypeName(oWindow.Document) = "HTMLDocument" Then
            If InStr(oWindow.Document.Title, "IPC Window") > 0 Then
                ' Get the data object, set a property and callback a method
                Set oData = oWindow.GetProperty ("IPCData") 
                Set oCallback = oData.Callback
                oData.Value = "Success!"
                Call oCallback
            End If
        End If
    Next
End Sub

Sub RunFirstInstance()

    Dim oData, oIe, oWs

    ' Create a object to pass to a other script
    Set oData = New IPCData
    ' Set a property to a callback method
    Set oData.Callback = GetRef("MyCallback")

    ' Create a window and store the data in the window
    Set oIe = CreateObject("InternetExplorer.Application")
    oIe.Navigate "about:blank"
    Do Until oIe.ReadyState = 4 : WScript.Sleep 5 : Loop
    oIe.Document.Title = "IPC Window"
    oIe.PutProperty "IPCData", oData

    ' Run second script instance
    Set oWs = CreateObject("WScript.Shell")
    oWs.Run "WSCRIPT.EXE """ & WScript.ScriptFullName & """ /NEW"

    ' Wait for callback from second script
    Do  Until g_receivedCallback = True : WScript.Sleep 5 : Loop

    ' Display received data
    MsgBox oData.Value

    ' Close ie
    oIe.Quit

End Sub

Sub MyCallback()
    g_receivedCallback = True
End Sub

Class IPCData

    Private m_callback
    Public Property Get Callback()
        Set Callback = m_callback
    End Property
    Public Property Set Callback(ByVal v)
        Set m_callback = v
    End Property

    Private m_value
    Public Property Get Value()
        If IsObject(m_value) Then
            Set Value = m_value
        Else
            Value = m_value
        End If
    End Property
    Public Property Let Value(ByVal v)
        m_value = v
    End Property
    Public Property Set Value(ByVal v)
        Set m_value = v
    End Property

End Class
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10943464

复制
相关文章

相似问题

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