//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//*******改动******
HWND hMutex;
try{
//尝试打开此程序特有的Mutex识别对象
hMutex = OpenMutex(MUTEX_ALL_ACCESS,0,"防止程序重复运行");
//若成功,则表示已有此程序正在执行中
//将此程序获得焦点或提到最前面即可
if (hMutex)
{ //寻找程序名称,返回handle
HWND han = FindWindow(NULL,"Form1");
if (han)
{ //提示已经重复打开此程序
ShowMessage("此程序重复打开!");
//取得显示在桌面的Form1窗口的handle,并提到最前面
HWND TophWnd = GetTopWindow(han);
if (TophWnd)
::SetForegroundWindow(TophWnd);
else
::SetForegroundWindow(han);
}
return 1;
}
//若此程序无特有的Mutex识别对象,则建立一新识别对象
else
CreateMutex(0,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);
}
}
//******改动******
}
//程序结束时,释放Mutex识别对象
__finally
{
::ReleaseMutex(hMutex);
}
//****************
return 0;
}
//---------------------------------------------------------------------------
//*************附加:FindWindowEx函数******************
// HWND FindWindowEx( HWND hwndParent, //父窗体句柄
// HWND hwndChildAfter, //子窗体或控件句柄
// LPCTSTR lpszClass, //查找窗体的类名
// LPCTSTR lpszWindow //查找窗体的标题
// );
//*****************************************************