如何防止应用程序的多次加载?

lanfan 2003-01-11 03:24:16
用VC实现,API
...全文
43 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanfan 2003-01-12
  • 打赏
  • 举报
回复
谢了,结贴!
AthlonxpX86 2003-01-12
  • 打赏
  • 举报
回复
if( FindWindow(NULL,"窗口名")) exit(0);
stonex_2000 2003-01-12
  • 打赏
  • 举报
回复
就如阿笨猫那样,用个互斥量就搞定了。
lanfan 2003-01-11
  • 打赏
  • 举报
回复
好像有利用Windows API的函数GetModuleHandle和GetModuleUsage实现的方法,哪位知道?
zhang_zhibin 2003-01-11
  • 打赏
  • 举报
回复
在应用程序类的InitInstance()函数的开始处定义的名字来创建一个互斥体,并保存该互斥体的句柄到一个为类成员变量的句柄中。
如果应用程序的另一个实例已经存在,CreatMutex()函数就返回一个句柄给已存在的互斥体对象。并且GetLastError()函数返回
ERROR_ALREADY_EXISTS。可以通过返回一个FALSE值来终止程序的运行。

为了避免重复,可以用生成的GUID来作为互斥体的名字

#define RUN_ONCE "{1B14C6C2-1AFC-4691-8324-8BC81FFC4AC3}"

BOOL CVVApp::InitInstance()
{
m_hOneInstance = ::CreateMutex( NULL,FALSE,UNIQUE_NAME );
if ( GetLastError() = ERROR_ALREADY_EXISTS )
{
AfxMessageBox( "Application already running!" );
return FALSE ;
}
}

重载应用程序类的ExitInstance()函数,关闭该互斥体的句柄:

int CVVApp::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
CloseHandle(m_hOneInstance);

return CWinApp::ExitInstance();
}

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧