|
主题: 如何检查程序已经运行?
|
颠狗
职务:普通成员
等级:1
金币:0.0
发贴:83
|
#12001/8/19 21:25:40
如何避免多次打开同一程序?(AW反应速度较慢,初学者很容易连续打开多个程序的)
|
与人同乐
职务:管理员
等级:6
金币:18.0
发贴:3928
|
#22001/8/20 21:17:27
用Winapi.u32里的FINDWINDOW() 找到后Quit()
if FindWindow("APWMainClass","YourName") then quit()
|
改将
职务:普通成员
等级:1
金币:0.0
发贴:102
|
#32001/12/3 15:17:07
好象不行哦!因为你一旦运行了这个程序。你用函数就能找到至少自身这个窗口。我的理解有错吗?
|
与人同乐
职务:管理员
等级:6
金币:18.0
发贴:3928
|
#42001/12/3 20:27:04
是的是的,这个办法用来防止多次启动其它“子”程序。
例如以前通过热区调用其它程序,用户经常会双击,造成多个实例,通过上述办法解决这一问题。
|
燕云
职务:普通成员
等级:2
金币:10.0
发贴:600
|
#52001/12/4 9:09:18
这个问题真有意思,一个在b,c,d下很简单的问题,在au中却要费大事! 方法一(基于文件变量):运行时在文件或注册表中写一个变量值,在程序结束的时候清空或赋予特征值。在运行时可以判断那个变量来决定是否启动程序! 存在的问题:当程序非正常关闭时,存在如何清空或赋予特征值的问题.
方法一(基于内存变量):在程序运行中创建一个互斥变量,当同时打开相同程序时,同一个互斥变量不能被创建,新打开的程序设置退出。 存在的问题:winapi.u32中没有CreateMutex函数(我的APi!啊!),现在想从WinExec("rundll32.exe kernel32.dll,…………)正在研究它的参数! 我不推荐用此方法(可能会造成混乱,但是大家可以研究研究) 雅君:燕云
云网媒体【YZCNET.COM】云网媒体开展软件技术、互联网技术、电子商务技术、多媒体设计等服务; 其中包括 :软件开发、网站建设、手机服务、多媒体设计、 图片及演示文稿服务等;
|
改将
职务:普通成员
等级:1
金币:0.0
发贴:102
|
#62001/12/4 10:36:40
嘿嘿,已经搞定了,利用budapi中的bawindowlist函数。 返回值为目前运行的所有符合要求的程序的句柄,每个句柄之间用换行符分开。如果返回值多于一行,既意味着发现了一个以上的程序实例在运行,当前程序便退出。 在程序中写: win_list:=bawindowList("APWMainClass","yourname") if LineCount(win_list)>1 then Quit(0) end if 就OK啦!
编辑历史:[这消息被kwwx编辑过(编辑时间2001-12-04 10:42:15)] [这消息被kwwx编辑过(编辑时间2001-12-04 10:44:53)]
|