vc如何判断一个程序是否在运行?
展开全部
一般通过注册表实现吧,不过也可以通过配置文件实现。现在教你通过注册表实现:
如果一个程序从未被运行过,那么它是不可能对注册表有所操作的,所以我们可以在程序运行是就检测一次注册表中某个值是否存在,如果不存在就给出提示操作。当然一旦程序被运行,首先是要检测那个值是否存在,而接着就必须要向某个你指定的位置写值,不然每次都检测到程序是第一次运行,显然是不合理的。至于按钮是否第一次被按下,也是同理的。
你可以用:
regopenkeyex()打开注册表(对注册表操作之前必须先打开它)
regqueryvalueex()检测注册表中指定的值是否存在
regsetvalueex()对指定位置写值
regdeletekey()删除注册表的值或项
这些函数上百度百科看它们的用法,很详细!
如果一个程序从未被运行过,那么它是不可能对注册表有所操作的,所以我们可以在程序运行是就检测一次注册表中某个值是否存在,如果不存在就给出提示操作。当然一旦程序被运行,首先是要检测那个值是否存在,而接着就必须要向某个你指定的位置写值,不然每次都检测到程序是第一次运行,显然是不合理的。至于按钮是否第一次被按下,也是同理的。
你可以用:
regopenkeyex()打开注册表(对注册表操作之前必须先打开它)
regqueryvalueex()检测注册表中指定的值是否存在
regsetvalueex()对指定位置写值
regdeletekey()删除注册表的值或项
这些函数上百度百科看它们的用法,很详细!
展开全部
//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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询