如何避免程序重复启动?

jukyy 2005-10-13 04:30:49
小问题,如题。
希望是一旦双击了程序图标,再双击图标的时候就不要启动了(双击的时间间隔可能只有几秒钟甚至一秒钟)。谢谢!
...全文
171 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
网事随逢 2006-04-11
  • 打赏
  • 举报
回复
mark...
cczlp 2005-10-14
  • 打赏
  • 举报
回复
用文件映射最好
flowercity 2005-10-13
  • 打赏
  • 举报
回复
CreateMutex(0,1,"MyMainprj");
if(GetLastError() == 183)
{
MessageBox(0,"您的电脑上已经起动了本程序!","提醒:禁止多次运行。",MB_OK);
exit(-1);
};
jukyy 2005-10-13
  • 打赏
  • 举报
回复
程序是有多个窗口的,那就要考虑所有的窗口标题吧?能不能找一个统一的标识呢?
xibingwuqing 2005-10-13
  • 打赏
  • 举报
回复
学习
ccrun.com 2005-10-13
  • 打赏
  • 举报
回复
FAQ中说的很清楚了。三种以上的方法可以实现。
jone7319 2005-10-13
  • 打赏
  • 举报
回复
在WINmain函数最前部加入如下代码:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
const char *strMutexName = "地市级业务监控系统V1.0";//主窗口标题
HANDLE hMutex = CreateMutex(NULL, true, strMutexName);
if (ERROR_ALREADY_EXISTS == GetLastError() || NULL == hMutex)
{
HWND hWnd = FindWindow(NULL, strMutexName);
if (NULL != hWnd)
{
PostMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
SetForegroundWindow(hWnd);
}
//退出
return -1;
}
...............
}

XBox360 2005-10-13
  • 打赏
  • 举报
回复
//-------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title=Form1->Caption;
//TrayIcon1->Hint=Form1->Caption;
HANDLE PrevInstHandle;
HANDLE Mutex = OpenMutex(SYNCHRONIZE,false,Application->Title.c_str());

if (Mutex != NULL)
{
String AppTitle=Application->Title;
SetWindowText(Application->Handle,NULL);
PrevInstHandle = FindWindow("TApplication", AppTitle.c_str());
if (PrevInstHandle != 0)
{
if (IsIconic(PrevInstHandle))
ShowWindow(PrevInstHandle, SW_RESTORE);
else
BringWindowToTop(PrevInstHandle);

SetForegroundWindow(PrevInstHandle);
}
Application->ShowMainForm = false;
Application->Terminate();
}
else CreateMutex(null, false, Application->Title.c_str());
}
ccrun.com 2005-10-13
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=191924

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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