DDE通信(融合版)
ここに載せてあるソースコードは、参考のために載せてあります
サンプルコードは、一番下にLZHとしてあります
Option Explicit '[サンプルの動作確認] 'Project1.exeに別々のファイルを '2回ドロップ(コマンドラインによる起動)してみてください '(見た目は)新たに起動していないように見えると思います '[プロパティの設定] 'Form1の 'LinkMode = 1(ソース) 'にしています 'クライアントからDDE通信でデータが送られてきました Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer) Dim var As Variant On Error Resume Next '実行コマンドを分析します var = Split(CmdStr, ":", 2) '大文字小文字の認識をなくします var(0) = LCase(var(0)) Select Case var(0) 'OpenFileの実行を受けました Case "openfile" 'テキストボックスの内容を書き換えます Text1.Text = OpenFile(var(1)) End Select End Sub 'フォームをロードしました Private Sub Form_Load() On Error Resume Next '2重起動かチェックします If App.PrevInstance = False Then ' '単独起動の処理です ' Text1.Text = OpenFile(Command) Else ' '2重起動の処理です ' Me.Text1.LinkTopic = App.Title & "|" & Me.Name Me.Text1.LinkMode = vbLinkManual 'エラーが発生しました If Not (Err.Number = 0) Then MsgBox "Error: " & Err.Description, vbCritical Unload Me Else 'コマンドラインなしの場合は、 'メッセージボックスで警告します If Command = "" Then MsgBox "2重起動はできません", vbExclamation Else 'コマンドラインがある場合は、 'DDE通信を使い相手に '指定のファイルを開くよう命じます Text1.LinkExecute "OpenFile:" & Command DoEvents End If '2重起動なので処理を終えます Unload Me End If End If End Sub 'フォームのサイズを変更しました Private Sub Form_Resize() On Error Resume Next 'フォームのサイズにあわせて 'テキストボックスのサイズを調整します Text1.Move 0, 0, ScaleWidth, ScaleHeight End Sub 'ファイルを開いて文字列を返す関数です Function OpenFile(ByVal strPath As String) As String Dim fn As Integer Dim fz As Long Dim bytArray() As Byte fn = FreeFile fz = FileLen(strPath) ReDim bytArray(fz - 1) Open strPath For Binary As #fn Get #fn, , bytArray Close OpenFile = StrConv(bytArray, vbUnicode) End Function |