我要判断一个进程是否存在,但进程没有标题,也不知道pid号,好改怎么办啊!

解决方案 »

  1.   

    是你自己程序的进程还是其他程序的?如果是自己的,那就简单了.如果不是,那就用api把所有进程列出来再查找
      

  2.   

    我发现用我知道pid了,我想问题下WaitForSingleObject好用吗?cpu利用率怎么样,如果好的话,各位给个例子吗?谢谢
      

  3.   


     1. 如果知道processid, 直接用API openprocess 检测.
     2. WaitForSingleObject: 检测指定的进程并等待它运行结束,
        对你的工作没什么用;   3. 枚举进程列表:   win9X  环境使用toolhelp函数库。winnt/2k下没测试过.  ''函数声明
      Declare Function CreateToolhelp32Snapshot Lib "kernel32" 
       (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long  Declare Function Process32First Lib "kernel32" (ByVal 
       hSnapshot As Long, ByRef lppe As PROCESSENTRY32) As Boolean  Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot
       As Long, ByRef lppe As PROCESSENTRY32) As Boolean '' 常量定义:
      Public Const MAX_PATH = 260 - 1
      Public Const PROCESS_TERMINATE = &H1
      Public Const TH32CS_SNAPHEAPLIST = &H1
      Public Const TH32CS_SNAPPROCESS = &H2
      Public Const TH32CS_SNAPTHREAD = &H4
      Public Const TH32CS_SNAPMODULE = &H8
      Public Const TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST + 
       TH32CS_SNAPPROCESS + TH32CS_SNAPTHREAD + TH32CS_SNAPMODULE
      Public Const TH32CS_INHERIT = &H80000000  ''类型定义:
       Type PROCESSENTRY32
         dwSize As Long
         cntUsage As Long
         th32ProcessID As Long
         th32DefaultHeapID As Long
         th32ModuleID As Long
         cntThreads As Long
         th32ParentProcessID As Long
         pcPriClassBase As Long
         dwFlags As Long
         szExeFile(MAX_PATH) As Byte
       End Type  ''变量定义
       Public FSnapshotHandle As Long
       Public FProcessEntry32 As PROCESSENTRY32
       Public ContinueLoop As Boolean
       Public ProcID As Long               
       Public ProcName As String             ''代码:
     public function checkproc(ProcName As string) as boolean
      '' procname:需要检测的进程文件名(例如notepad.exe)  dim i as long
      dim ExeName As String      FSnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
          If FSnapshotHandle <> 0 Then
             FProcessEntry32.dwSize = Len(FProcessEntry32)
             ContinueLoop = Process32First(FSnapshotHandle, FProcessEntry32)         While ContinueLoop
                '取文件名
                For i = 0 To 260 - 1
                    ExeName = ExeName & Chr(FProcessEntry32.szExeFile(i))
                Next i
                
               ''去掉NULL  
              ExeName = LCase(Mid(ExeName, 1, InStr(1, ExeName, Chr(0)) - 1))
                
              If InStr(ExeName, ProcName) <> 0 Then     '系统管理
                 ProcID = FProcessEntry32.th32ProcessID
                 ProcName = ExeName
                 Checkproc=true
                 exit function
              End If           ContinueLoop = Process32Next(FSnapshotHandle, FProcessEntry32)
            Wend
         end if     '' CloseHandle FSnapshotHandle
         CloseHandle FSnapshotHandle end function