'建立一个窗口,里面放一个PictureBox控件,名称为SendDDEObject '用手工先将窗口的LinkMode设置为1 '然后写入以下代码:Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer) '收到DDE信息 MsgBox CmdStr Cancel = False End Sub Private Sub Form_Load() Me.LinkTopic = "我的DDE" If App.PrevInstance Then If Command <> "" Then SendDDEString Command End If End End If End Sub Private Sub SendDDEString(DDEInfo As String) Dim t As Long '设置为无 DDE 交互 SendDDEObject.LinkMode = 0 '设置接收DDE目标 SendDDEObject.LinkTopic = App.Title & "|" & Me.LinkTopic '设置为手动模式启动DDE SendDDEObject.LinkMode = 2 '发送DDE信息 SendDDEObject.LinkExecute DDEInfo '返回DDE 响应消息的时间。 t = SendDDEObject.LinkTimeout '设置DDE 响应消息的时间。1/10秒为单位 SendDDEObject.LinkTimeout = 1 '设置为无 DDE 交互 SendDDEObject.LinkMode = 0 '将原来的DDE 响应时间设回来 SendDDEObject.LinkTimeout = t End Sub将程序编译后将文件多次拖放到编译好的EXE文件上看看效果
当第二个实例启动时发送DDE信息给第一个实例,第一个实例
设置WindowState = 0,第二个实例用END结束就可以了。
实在你不会还可以用网络嘛,只要两个进程可以通讯就可
以了不是吗?不过建议你还是使用DDE。
FindWindow
然后ShowWindow
否则
End
比如Media Player播放器,当点击一个MPG文件时播放一个影片
但点击另一个MPG时,原来的播放器就播放另一个影片,这就不
是单靠窗口句柄就可以做到的了,还是要回到进程间通讯这里。
所以用DDE的方法实现进程通讯比较好,因为DDE还可以把启动参
数一起传递给原来的实例,并且可以根据参数控制工作。
'用手工先将窗口的LinkMode设置为1
'然后写入以下代码:Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
'收到DDE信息
MsgBox CmdStr
Cancel = False
End Sub
Private Sub Form_Load()
Me.LinkTopic = "我的DDE"
If App.PrevInstance Then
If Command <> "" Then
SendDDEString Command
End If
End
End If
End Sub
Private Sub SendDDEString(DDEInfo As String)
Dim t As Long
'设置为无 DDE 交互
SendDDEObject.LinkMode = 0
'设置接收DDE目标
SendDDEObject.LinkTopic = App.Title & "|" & Me.LinkTopic
'设置为手动模式启动DDE
SendDDEObject.LinkMode = 2
'发送DDE信息
SendDDEObject.LinkExecute DDEInfo
'返回DDE 响应消息的时间。
t = SendDDEObject.LinkTimeout
'设置DDE 响应消息的时间。1/10秒为单位
SendDDEObject.LinkTimeout = 1
'设置为无 DDE 交互
SendDDEObject.LinkMode = 0
'将原来的DDE 响应时间设回来
SendDDEObject.LinkTimeout = t
End Sub将程序编译后将文件多次拖放到编译好的EXE文件上看看效果