$PBExportHeader$f_ifexerun.srf global type f_ifexerun from function_object end type forward prototypes global function integer f_ifexerun () end prototypes global function integer f_ifexerun ();s_Process lst_Process //进程结构 String ls_FileName[100],ls_CurExeName //最多100个进程,可改进 ULong ln_ProcessID,ln_SameCount,ln_Snapshot,ln_Circle,ln_Count ln_ProcessID = GetCurrentProcessId() //取当前进程的ID IF IsNull(ln_ProcessID) OR ln_ProcessID < 1 THEN RETURN -1 //出错则返回 ln_Snapshot = CreateToolhelp32Snapshot(2,0) //在堆上创建进程快照 If (ln_Snapshot < 1) THEN RETURN -1 //出错则返回 lst_Process.StructSize = 296 //Win32api的Process结构大小 ln_SameCount = 0 //复本数为0 IF Process32First(ln_Snapshot,lst_Process) = 0 THEN RETURN -1//取第一个进程失败则返回 ln_Count = 1 ls_FileName[ln_Count] = lst_Process.Filename //列举的进程名称放入数组 //如列举到的进程ID等于当前进程ID,则知道了当前进程的名称,保存 IF lst_Process.ProcessID = ln_ProcessID THEN ls_CurExeName = lst_Process.Filename DO WHILE TRUE //循环取列举的进程名称,放入数组 IF Process32Next(ln_Snapshot,lst_Process) = 0 THEN EXIT //列举完毕 ln_Count = ln_Count + 1 ls_FileName[ln_Count] = lst_Process.Filename IF lst_Process.ProcessID = ln_ProcessID THEN ls_CurExeName = lst_Process.Filename LOOP FOR ln_Circle = 1 TO ln_Count //计算系统中有几个同名进程 IF ls_CurExeName = ls_FileName[ln_Circle] THEN ln_SameCount = ln_SameCount+1 NEXT RETURN ln_SameCount //如当前进程无复本在运行,返回1;否则有几个在运行则返回几 end function