请问:关于"只启动一个程序实例"和"命令行参数"的有关问题
请教:关于"只启动一个程序实例"和"命令行参数"的问题?
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
------解决方案--------------------
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
------解决方案--------------------