アプリケーション間でコマンドライン引数でしか情報の引渡しが出来ないので、オブジェクトを文字列として渡してみるなどしてみました。
例えば、入力を行うSend
と受け取るReceive
があるとします。Send
は入力データが格納されているオブジェクトを文字列化し、Receive
はコマンドライン引数で入力値を受け取ります。
受け渡しするするオブジェクト
Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Binary Imports System.IO <Serializable()> _ Public Class SerializableArgument Implements ISerializable Public MessageText As String Public Check As Boolean Public Sub New() End Sub Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) MessageText = info.GetString("Text") Check = info.GetBoolean("Check") End Sub Protected Sub GetObjectData(ByVal info As SerializationInfo, _ ByVal context As StreamingContext) _ Implements ISerializable.GetObjectData info.AddValue("Text", MessageText) info.AddValue("Check", Check) End Sub Public Function ToDataString() As String Dim formatter As New BinaryFormatter Dim stream As New MemoryStream formatter.Serialize(stream, Me) Dim data As String = Convert.ToBase64String(stream.ToArray()) Return data End Function Public Shared Function FromDataString(ByVal data As String) As SerializableArgument Dim bytes() As Byte = Convert.FromBase64String(data) Dim formatter As New BinaryFormatter Dim serializeObject As SerializableArgument = _ CType(formatter.Deserialize(New MemoryStream(bytes)), SerializableArgument) Return serializeObject End Function End Class
渡す側のアプリ
Public Class SendForm Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' シリアライズ可能なオブジェクトの生成 Dim serializeObject As New SerializableArgument ' 渡したい情報 serializeObject.MessageText = TextBox1.Text serializeObject.Check = CheckBox1.Checked ' シリアライズする Dim data As String = serializeObject.ToDataString() Dim proc As New Process proc.StartInfo.FileName = "ReceiveApplication.exe" proc.StartInfo.Arguments = data proc.Start() End Sub End Class
受け側のアプリ
Public Class ReceiveForm Inherits System.Windows.Forms.Form Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim arg() As String = System.Environment.GetCommandLineArgs ' デシリアライズする Dim serializeObject As SerializableArgument = SerializableArgument.FromDataString(arg(1)) TextBox1.Text = arg(1) TextBox2.Text = serializeObject.MessageText CheckBox1.Checked = serializeObject.Check End Sub End Class
これで、送り側のアプリは、ReceiveApplication.exe "AAEAAAD/////AQAAAAAAAAAM(中略)"
として受け側のアプリを起動します。
受け側のアプリで AAEAAAD/////AQAAAAAAAAAM(中略)
の文字列をデシリアライズして入力値を使用する事が出来ます。
コマンドライン引数の最大長を気にしたら負けです。むぅ……