很多人都讨论过这个问题, 这里用Victor串口控件里面现成的共享内存功能来实现。
当程序运行第二次时只是激活第一次运行的窗口, 而不是再运行一个程序。
需要在主程序里实现, 下面
蓝色的部分是增加的内容:
#include <vcl.h> #pragma hdrstop #include "yb_base.h" //--------------------------------------------------------------------------- USEFORM("UnitTestMain.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { //两个程序不能有相同的标志,有相同标志的程序只能运行一个 TSharedMemory AppMark("VICTOR_20030526_2131",4096); //利用共享内存设置程序标志 if(AppMark.Exists) //程序已经运行了 { AppMark.ActiveAppWnd(); //激活已经运行的程序窗口 return 0; //退出程序 } AppMark.ClearBuffer(); //清除缓存
try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); AppMark.AppInfo->hMainWnd = Application->Handle; //句柄保存在共享内存里 Application->Run(); } catch (Exception &exception) { //.... 以后的内容省略 |