vc如何判断一个程序是否在运行?
答案:3 悬赏:10 手机版
解决时间 2021-04-27 14:18
- 提问者网友:雾里闻花香
- 2021-04-26 16:48
vc如何判断一个程序是否在运行?
最佳答案
- 五星知识达人网友:青尢
- 2021-04-26 17:10
//InstanceName 自定义用于表示应用程序的唯一标识名
//hWndClassName 窗体的注册类名 CreateWindow 函数中指定
//hWndWinName 窗体名 CreateWindow 函数中指定
//mOperate 操作判断变量
BOOL OperateMutex( LPCWSTR InstanceName,LPCWSTR hWndClassName, LPCWSTR hWndWinName, BOOL mOperate)
{
HANDLE hMutex;
hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,InstanceName);
switch(mOperate)
{
case APP_OPEN: //OPEN = 启动程序
if(hMutex==NULL)
{
hMutex = CreateMutex(NULL,FALSE,InstanceName);
if( (hMutex == NULL) || (GetLastError()==ERROR_ALREADY_EXISTS))
{
ActiveOldApp(hWndClassName,hWndWinName);
return FALSE; //程序已经启动或有错误发生
}
else
{
return TRUE;
} //第一次启动程序
}
else
{
ActiveOldApp(hWndClassName,hWndWinName);
return FALSE; //程序已经启动
}
break;
case APP_CLOSE: //CLOSE = 退出程序
ReleaseMutex(hMutex);
CloseHandle(hMutex);
break;
}
return TRUE;
}
//激活已启动的同一个程序
//参数:hWndClassName 窗体的注册类名 CreateWindow 函数中指定
// hWndWinName 窗体名 CreateWindow 函数中指定
BOOL ActiveOldApp( LPCWSTR hWndClassName, LPCWSTR hWndWinName)
{
HWND hWndApp,hWndPopup;
if (hWndApp = FindWindow(hWndClassName,hWndWinName))
{
//PutLog( "已经启动的实例的窗口句柄是%ld", hWndApp );
SendMessage( hWndApp, WM_ACTIVE, 0, 0 );
hWndPopup = GetLastActivePopup(hWndApp);
//PutLog( "GetLastActivePopup得到的窗口句柄是%ld", hWndPopup );
return TRUE;
}
else
{
return FALSE;
}
}
//hWndClassName 窗体的注册类名 CreateWindow 函数中指定
//hWndWinName 窗体名 CreateWindow 函数中指定
//mOperate 操作判断变量
BOOL OperateMutex( LPCWSTR InstanceName,LPCWSTR hWndClassName, LPCWSTR hWndWinName, BOOL mOperate)
{
HANDLE hMutex;
hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,InstanceName);
switch(mOperate)
{
case APP_OPEN: //OPEN = 启动程序
if(hMutex==NULL)
{
hMutex = CreateMutex(NULL,FALSE,InstanceName);
if( (hMutex == NULL) || (GetLastError()==ERROR_ALREADY_EXISTS))
{
ActiveOldApp(hWndClassName,hWndWinName);
return FALSE; //程序已经启动或有错误发生
}
else
{
return TRUE;
} //第一次启动程序
}
else
{
ActiveOldApp(hWndClassName,hWndWinName);
return FALSE; //程序已经启动
}
break;
case APP_CLOSE: //CLOSE = 退出程序
ReleaseMutex(hMutex);
CloseHandle(hMutex);
break;
}
return TRUE;
}
//激活已启动的同一个程序
//参数:hWndClassName 窗体的注册类名 CreateWindow 函数中指定
// hWndWinName 窗体名 CreateWindow 函数中指定
BOOL ActiveOldApp( LPCWSTR hWndClassName, LPCWSTR hWndWinName)
{
HWND hWndApp,hWndPopup;
if (hWndApp = FindWindow(hWndClassName,hWndWinName))
{
//PutLog( "已经启动的实例的窗口句柄是%ld", hWndApp );
SendMessage( hWndApp, WM_ACTIVE, 0, 0 );
hWndPopup = GetLastActivePopup(hWndApp);
//PutLog( "GetLastActivePopup得到的窗口句柄是%ld", hWndPopup );
return TRUE;
}
else
{
return FALSE;
}
}
全部回答
- 1楼网友:山河有幸埋战骨
- 2021-04-26 18:43
枚举进程,查找x.exe,如果有2个就干掉其中一个,或者干脆不执行Shell
- 2楼网友:痴妹与他
- 2021-04-26 17:41
1. 创建一个 atom
2. 在程序运行的时候判断 atom 是否一斤创建。
或者使用进程枚举的方法,自己判断
2. 在程序运行的时候判断 atom 是否一斤创建。
或者使用进程枚举的方法,自己判断
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯