通过查找进程文件名的个数来判断进程程序是否打开1、传入参数:strName为进程名称,比如(CString strName= "test.exe";)
int GetProcessCount(const TCHAR* strName)
{
int count = 0;
try
{
TCHAR sztarget[MAX_PATH];
lstrcpy(sztarget, strName);
CharLowerBuff(sztarget, MAX_PATH);
PROCESSENTRY32 my;
HANDLE l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (((int)l) != -1)
{
my.dwSize = sizeof(my);
if (Process32First(l, &my))
{
do
{
CharLowerBuff(my.szExeFile, MAX_PATH);
if (lstrcmp(sztarget, my.szExeFile) == 0)
{
count++;
}
} while (Process32Next(l, &my));
}
CloseHandle(l);
}
}
catch (std::exception e)
{
std::cout << e.what() << std::endl;
}
return count;
}
如果返回值个数为0,则进程未被打开,否则表示进程已经存在。
2、返回值为0,重新打开完整路径下对应的.exe文件,否则显示对应界面与窗口之上
其中dir为应用程序文件所在路径,比如:(dir= "D:\test.exe";)
char dir[MAX_STRING_LEN]={0};
if(GetProcessCount(strName) == 0)
{
WinExec(dir,false);
//ShellExecute(NULL, _T("open"), dir, NULL, NULL, SW_SHOWMAXIMIZED);
}
else
{
HWND hWnd = FindWindow(NULL,"test");
if (hWnd)
{
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
}