vc中如何保证同样的exe程序只有一个运行啊
各位大侠,我想实现这样的功能:
比方说我想让一个exe程序,如果它没有运行,那么就开始运行,如果这个exe程序已经运行了,那么就弹出对话框告诉用户已经运行了,并且将已经运行的程序调到最前面来,不知道有没有这种方法,
还请各位不吝赐教,我先谢谢了。
[解决办法]
枚举窗口
在程序入口initstance里
HANDLE m_hMutex = ::CreateMutex(NULL,TRUE,m_pszName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox("您已经运行了本软件!");//弹出对话框确认不能运行第二个实例。
return FALSE;
}
[解决办法]
《Windows核心编程》
[解决办法]
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------
USEFORM( "Unit1.cpp ", Form1);
//---------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// 创建互斥
HANDLE hMutex = ::CreateMutex(NULL, TRUE, "MyProjectRunFlag ");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
// 如果实例已经运行
HWND hWin = FindWindow( "TForm1 ", "Form1 ");
if(hWin)
{
if(!IsWindowVisible(hWin))
{
// 如果最小化状态就将窗体恢复
PostMessage(hWin, WM_SYSCOMMAND, SC_RESTORE, 0);
}
// 窗体置前
SetForegroundWindow(hWin);
BringWindowToTop(hWin);
}
if(hMutex)
CloseHandle(hMutex);
return 0;
}
//
try
{
Application-> Initialize();
Application-> CreateForm(__classid(TForm1), &Form1);
Application-> Run();
}
catch (Exception &exception)
{
Application-> ShowException(&exception);
}
catch (...)
{
try
{
throw Exception( " ");
}
catch (Exception &exception)
{
Application-> ShowException(&exception);
}
}
return 0;
}
[解决办法]
窗口置顶
::SetWindowPos(m_hWndTop ,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);