VC 判断指定进程是否已经启动

VC/MFC 专栏收录该内容
5 篇文章 0 订阅

BOOL CTbsDlg::IsOpen(CString strFindFile )
{
 PROCESSENTRY32 pe32;
 pe32.dwSize = sizeof(pe32);
 HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if( hProcessSnap == INVALID_HANDLE_VALUE )
 {
  return FALSE;
 }

 BOOL bMore = Process32First( hProcessSnap,&pe32 );
 while(bMore)
 {
  bMore = Process32Next( hProcessSnap,&pe32 );
  CString strExeFile;
  strExeFile.Format("%s",pe32.szExeFile);
  if( strExeFile.CompareNoCase(strFindFile) == 0 )
  {
   CloseHandle( hProcessSnap );
   return TRUE;
  }
 }

 CloseHandle( hProcessSnap );
 return FALSE;
}

上面只是判断指定EXE文件名进程是否启动,若要判断指定路径EXE进程是否启动则要用MODULEENTRY32。如下:

BOOL CTbsDlg::IsOpen( CString strFindFile )
{
 int nPos = strFindFile.ReverseFind('\\');
 CString strExe = strFindFile.Mid(nPos + 1);

 PROCESSENTRY32 pe32;
 pe32.dwSize = sizeof(pe32);
 HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if( hProcessSnap == INVALID_HANDLE_VALUE )
 {
  return FALSE;
 }

 BOOL bMore = Process32First( hProcessSnap,&pe32 );
 while(bMore)
 {
  bMore = Process32Next( hProcessSnap,&pe32 );
  CString strExeFile;
  strExeFile.Format("%s",pe32.szExeFile);
  if( strExeFile.CompareNoCase(strExe) == 0 )
  {

   CloseHandle(hProcessSnap);
   return GetExePath( strFindFile,pe32.th32ProcessID );
   }
 }

 CloseHandle( hProcessSnap );
 return FALSE;
}

BOOL CTbsDlg::GetExePath( CString strFile,DWORD dwProcessID )
{
 CString strPath = "";
 MODULEENTRY32 me32;
 HANDLE hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwProcessID);
 if( hModuleSnap == INVALID_HANDLE_VALUE )
 {
  return FALSE;
 }
 
 me32.dwSize = sizeof(MODULEENTRY32);
 BOOL bModule = Module32First(hModuleSnap,&me32);
 while( bModule )
 {
  CString strExePath;
  strExePath.Format("%s",me32.szExePath);
  if( strExePath.CompareNoCase(strFile) == 0 )
  {
   CloseHandle(hModuleSnap);
   return TRUE;
  }
  bModule = Module32Next(hModuleSnap,&me32);
 }
 
 CloseHandle(hModuleSnap);
 return FALSE;
}

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值