【问题标题】:Chrome Native Messaging Host VB.NetChrome 原生消息传递主机 VB.Net
【发布时间】:2019-02-24 07:31:30
【问题描述】:

我很难在 VB.Net 中找到任何对 Chrome 原生消息传递主机的支持,经过多次试验和错误后,我整理了一些可以一次处理一条消息的东西。但是我一直无法获得

While OpenStandardStreamIn() IsNot Nothing

部分工作。如果有人有任何建议...

否则此代码非常有用,对于像我这样正在寻找 VB.Net 本机消息主机的其他人来说:

此外,这使用 Newtonsoft.Json Lib 进行 JSON 序列化...

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Diagnostics
Imports System.Runtime.InteropServices


Module Module1

Public Sub Main(ByVal args As String())

    'create response as an array so it can be easily converted JSON
    Dim ResponseString() As String = {""}

    ' get input from chrome extension
    Dim InputString As String = OpenStandardStreamIn()

    ' Do whatever you want with Input, then prepare Response
    ResponseString(0) = DO_SOMETHING(InputString)

    ' Send Response to Chrome
    OpenStandardStreamOut(ResponseString)

End Sub

Public Function OpenStandardStreamIn() As String
    Dim MsgLength As Integer = 0
    Dim InputData As String = ""
    Dim LenBytes As Byte() = New Byte(3) {} 'first 4 bytes are length

    Dim StdIn As System.IO.Stream = Console.OpenStandardInput() 'open the stream
    StdIn.Read(LenBytes, 0, 4) 'length
    MsgLength = System.BitConverter.ToInt32(LenBytes, 0) 'convert length to Int

    Dim Buffer As Char() = New Char(MsgLength - 1) {} 'create Char array for remaining bytes

    Using Reader As System.IO.StreamReader = New System.IO.StreamReader(StdIn) 'Using to auto dispose of stream reader
        While Reader.Peek() >= 0 'while the next byte is not Null
            Reader.Read(Buffer, 0, Buffer.Length) 'add to the buffer

        End While
    End Using

    InputData = New String(Buffer) 'convert buffer to string

    Return InputData
End Function

Private Sub OpenStandardStreamOut(ByVal ResponseData() As String) 'fit the response in an array so it can be JSON'd

    Dim OutputData As String = ""
    Dim LenBytes As Byte() = New Byte(3) {} 'byte array for length
    Dim Buffer As Byte() 'byte array for msg

    OutputData = Newtonsoft.Json.JsonConvert.SerializeObject(ResponseData) 'convert the array to JSON

    Buffer = System.Text.Encoding.UTF8.GetBytes(OutputData) 'convert the response to byte array
    LenBytes = System.BitConverter.GetBytes(Buffer.Length) 'convert the length of response to byte array

    Using StdOut As System.IO.Stream = Console.OpenStandardOutput() 'Using for easy disposal

        StdOut.WriteByte(LenBytes(0)) 'send the length 1 byte at a time
        StdOut.WriteByte(LenBytes(1))
        StdOut.WriteByte(LenBytes(2))
        StdOut.WriteByte(LenBytes(3))

        For i As Integer = 0 To Buffer.Length - 1 'loop the response out byte at a time
            StdOut.WriteByte(Buffer(i))
        Next

    End Using
End Sub
End Module

从 Chrome 扩展程序中,打开一个连接,发送一条消息,一旦收到响应,主机将关闭。查看我们的 Chrome 开发页面以获取示例应用程序/扩展程序:https://developer.chrome.com/apps/nativeMessaging

我希望这对某人有所帮助,如果您有任何改进,请告诉我!

【问题讨论】:

    标签: vb.net stdout stdin chrome-native-messaging


    【解决方案1】:
     Sub Main() ' Recursive Version
        Try
            Dim stdin As Stream = Console.OpenStandardInput()
            Dim stdout As Stream = Console.OpenStandardOutput()
    
            Dim MsgLength As Integer = 0
            Dim InputData As String = ""
            Dim LenBytes As Byte() = New Byte(3) {}
            stdin.Read(LenBytes, 0, 4)
            MsgLength = BitConverter.ToInt32(LenBytes, 0)
            Dim Buffer As Byte() = New Byte(MsgLength - 1) {}
            stdin.Read(Buffer, 0, Buffer.Length)
            InputData = Encoding.UTF8.GetString(Buffer)
    
            Dim Str As String = Newtonsoft.Json.JsonConvert.SerializeObject("[" & Now & "] Arrrr!")
            Dim buff() As Byte = Encoding.UTF8.GetBytes(Str)
            stdout.Write(BitConverter.GetBytes(buff.Length), 0, 4)
            stdout.Write(buff, 0, buff.Length)
            Main()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Oh, Snap!")
        End Try
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 2015-02-27
      • 2015-09-02
      • 1970-01-01
      相关资源
      最近更新 更多