12345678910111213141516171819202122232425262728293031323334353637 |
- $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
|