怎样判断一个程序是否已经运行中?

时间:2021-01-20 09:00:07
经常遇到的一个问题,客户在使用程序时,点击好几下快捷图标,以至于打开好几个程序,请问有没有一段判断程序已经运行中的代码?
我想通过判断程序的“应用”是否已经运行的方法判断,而不是通过判断程序主窗口是否已经打开的方式判断.

14 个解决方案

#1


查以前的贴子

#2


那我把分数给谁呢?

#3


问问题以前,先查查以前的贴子,可能你就能找到答案

#4


FUNCTION ulong FindWindowA(ulong classname,string windowname) LIBRARY "user32.dll"
FUNCTION ulong ShowWindow(ulong hwnd,ulong nCmdShow) LIBRARY "user32.dll";  Function Boolean CloseHandle(ulong hObject ) Library "kernel32.dll" 
         Ulong lu_class
setnull(lu_class)
ls_name = "卓越软星"//窗口名称
l_handle = FindWindowA(lu_class, ls_name)

if l_handle > 0 then
ShowWindow(l_handle,1)
end if
Halt Close

#5


ldk(你的温柔其实如刀) 的对呀
大家都用这个,你不知道? 呵呵

#6


不是通过判断程序主窗口是否已经打开的方式判断程序是否运行有两种方法
1、有个API函数是判断某个EXE程序是否被载入内存运行(我记不得是哪个函数了)。
2、用PB6.5创建一个C++ userobject或用VC创建一个DLL,在Application的Open事件中通过访问DLL库中的标识变量来确认DLL是否被加载,只要DLL被加载过一次就说明应用已经运行。

#7


1、通过窗口名称Findwin..(比较简陋)~~
2、互斥体Createmu..~~
3、原子(程序员杂志2001某期有例子)~~

#8


blazingstar(天遥) :我的程序编译的是静态连接库pbd,现在的情况不允许我对程序作大的调整,只能在现有的程序上加以修改,也就是说不可能改用dll.能不能麻烦你想一想第一种方法.

SOFTFUN_CSDN(SOFTFUN) : 请详细一些.何谓"互斥体Createmu..","原子"

#9


正好用

#10


我写了个例程,怎么给你呀?

#11



我的方法是不用FindWindowA,而是调用C++ UserObject。

使用这种方法不需要对你的程序进行调整。用法非常简单。

只要在Application的Open事件中写下面的代码即可

uo_single single

single=create uo_single  //创建uo_single对象实例

if not single.isused() then   //通过判断uo_single是否被调用过来判断程序是否运行过

open(w_main)

else

messagebox("提示","本程序只能运行一个实例")

end if

destroy single

#12


能不能给我一个简单的例程,一定给分
我的email : chwgamer@sohu.com

#13


blazingstar(天遥)
能不能给我一个简单的例程,一定给分
我的email : chwgamer@sohu.com 

#14


收分!

已经发邮件给你了。

#1


查以前的贴子

#2


那我把分数给谁呢?

#3


问问题以前,先查查以前的贴子,可能你就能找到答案

#4


FUNCTION ulong FindWindowA(ulong classname,string windowname) LIBRARY "user32.dll"
FUNCTION ulong ShowWindow(ulong hwnd,ulong nCmdShow) LIBRARY "user32.dll";  Function Boolean CloseHandle(ulong hObject ) Library "kernel32.dll" 
         Ulong lu_class
setnull(lu_class)
ls_name = "卓越软星"//窗口名称
l_handle = FindWindowA(lu_class, ls_name)

if l_handle > 0 then
ShowWindow(l_handle,1)
end if
Halt Close

#5


ldk(你的温柔其实如刀) 的对呀
大家都用这个,你不知道? 呵呵

#6


不是通过判断程序主窗口是否已经打开的方式判断程序是否运行有两种方法
1、有个API函数是判断某个EXE程序是否被载入内存运行(我记不得是哪个函数了)。
2、用PB6.5创建一个C++ userobject或用VC创建一个DLL,在Application的Open事件中通过访问DLL库中的标识变量来确认DLL是否被加载,只要DLL被加载过一次就说明应用已经运行。

#7


1、通过窗口名称Findwin..(比较简陋)~~
2、互斥体Createmu..~~
3、原子(程序员杂志2001某期有例子)~~

#8


blazingstar(天遥) :我的程序编译的是静态连接库pbd,现在的情况不允许我对程序作大的调整,只能在现有的程序上加以修改,也就是说不可能改用dll.能不能麻烦你想一想第一种方法.

SOFTFUN_CSDN(SOFTFUN) : 请详细一些.何谓"互斥体Createmu..","原子"

#9


正好用

#10


我写了个例程,怎么给你呀?

#11



我的方法是不用FindWindowA,而是调用C++ UserObject。

使用这种方法不需要对你的程序进行调整。用法非常简单。

只要在Application的Open事件中写下面的代码即可

uo_single single

single=create uo_single  //创建uo_single对象实例

if not single.isused() then   //通过判断uo_single是否被调用过来判断程序是否运行过

open(w_main)

else

messagebox("提示","本程序只能运行一个实例")

end if

destroy single

#12


能不能给我一个简单的例程,一定给分
我的email : chwgamer@sohu.com

#13


blazingstar(天遥)
能不能给我一个简单的例程,一定给分
我的email : chwgamer@sohu.com 

#14


收分!

已经发邮件给你了。