如何在运行一个程序多次时,使它只产生一个进程。(300分)

  • 主题发起人 主题发起人 liuyj74
  • 开始时间 开始时间
L

liuyj74

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在运行一个程序多次时,使它只产生一个进程。<br><br>谢谢!
 
Var<br>&nbsp; &nbsp; hMutex:HWND;<br>&nbsp; &nbsp; Ret:Integer;<br>&nbsp;begin<br>&nbsp; Application.Initialize;<br>&nbsp; Application.Title := '我的程序;<br>&nbsp; hMutex:=CreateMutex(nil,False,'我的程序');<br>&nbsp; Ret:=GetLastError;<br>&nbsp; If Ret&lt;&gt;ERROR_ALREADY_EXISTS Then<br>&nbsp; &nbsp;Begin<br>&nbsp; &nbsp; Application.CreateForm(Tmain, main);<br>&nbsp; &nbsp; Application.Run;<br>&nbsp; &nbsp;End<br>&nbsp; Else<br>&nbsp; MessageBox(application.handle,'程序已经启动,无需再次运行','提示',MB_ICONASTERISK or MB_OK);<br>&nbsp; ReleaseMutex(hMutex);<br>&nbsp;end.<br><br>
 
var<br>&nbsp; HWndCalculator : HWnd;<br>begin<br>&nbsp; HWndCalculator :=FindWindow(nil, '窗体的标题');<br>&nbsp; if HWndCalculator = 0 then &nbsp;创建<br>&nbsp; &nbsp;else<br>&nbsp; &nbsp;setforegroundwindow(HWndCalculator)//激活窗口,并拉到最前面
 
cx66.com上有更多的介绍
 
var<br>&nbsp; Handle: Integer;<br>begin <br>&nbsp; handle := findwindow('TLYMain',nil);// 解决程序重入问题<br>&nbsp; if handle &lt;&gt; 0 then halt; //当然是善后工作了,搞定 &nbsp;Application.Initialize;
 
照sonie的方法修改工程文件
 
FindWindow<br>&nbsp; 查找已经存在的应用程序特有窗口<br><br>CreateSemaphore<br>CreateMutex<br>&nbsp; 互斥器、信号量用于线程同步<br><br>GlobalAddAtom<br>&nbsp; 定义系统原子信息<br><br>这些方法都可以,甚至你可以读写注册表、进程间管道通讯等等,满世界这类编程技巧,<br>去搜索引擎搜索一下就是一堆。
 
后退
顶部