请问:关于"只启动一个程序实例"和"命令行参数"的有关问题

请教:关于"只启动一个程序实例"和"命令行参数"的问题?
Private   Sub   Form_Load()
        On   Error   Resume   Next
        If   App.PrevInstance   =   True   Then
              If   Trim(Command)   =   " "   Then
                      Call   MsgBox( "已经有一个程序实例正在运行,现将自动退出   ! ",   vbCritical   +   vbOKOnly,   "错误提示: ")
              Else
                      [color=#FF0000]问题在这里:[/color]
                      请教:我如何实现将 "Command "中的数据发送给已启动的实例,并让他执行相应操作?????
              End   If
              End
        End   If
End   Sub

------解决方案--------------------
楼主,你用App.PrevInstance 来判断“前一个实例”太不可靠了。
先不说命令行参数的问题,你用你的方法,编译成 .exe 文件试试:

假设文件名为:程序1.exe  :
你第一次运行 程序1  (没问题)
直接运行第二次,提示‘已经有一个程序实例正在运行’ (正常……)
但你把 程序1.exe 复制一个副本(在同一目录,当然名字不能相同;在不同目录,名字可以相同也可以不同),再运行副本,正常启动(根本不会提示‘已经有一个程序实例正在运行’了)…………


“单实例运行”比较可靠的方法是:
①采用全局原子 ②采用互斥体 ③采用事件对象
当然,还可以用 FindWindow() 或 FindWindowEx() 查找窗口来判断是否已经运行。
(其实我最常用的就是这样的, 从 Sub Main() 启动程序…… ^_^ )



至于传递命令行参数,毕竟参数不会太长,FindWindow()后,PostMessage()就行了。
也可以用DDE

------解决方案--------------------
你不能保证前一个实例正好空闲,所以通讯的方式最好采用任务队列:
任务队列用数据库或文件目录存储,后启动的实例将命令行对应的工作写到任务列表中,第一个实例用定时器定时扫描任务列表,处理新出现的任务。
------解决方案--------------------
copydata

用通信方式,找找资料吧
------解决方案--------------------
你这个就是进程间通信,建议用DDE,使用方法参考:
http://blog.****.net/sysdzw/article/details/4709445
------解决方案--------------------
探讨
楼主,你用App.PrevInstance 来判断“前一个实例”太不可靠了。
先不说命令行参数的问题,你用你的方法,编译成 .exe 文件试试:

假设文件名为:程序1.exe  :
你第一次运行 程序1  (没问题)
直接运行第二次,提示‘已经有一个程序实例正在运行’ (正常……)
但你把 程序1.exe 复制一个副本(在同一目录,当然名字不能相同;在不同目录,名字可以相同也可以不同……