为什么80%的码农都做不了架构师?>>>   

//工程引用此单元就能防止同时出现多个实例
unit MultInst;interfaceusesWindows ,Messages, SysUtils, Classes, Forms;implementationconstSTR_UNIQUE    = '{2BE6D96E-827F-4BF9-B33E-8740412CDE96}';MI_ACTIVEAPP  = 1;  {激活应用程序}MI_GETHANDLE  = 2;  {取得句柄}variMessageID    : Integer;OldWProc      : TFNWndProc;MutHandle     : THandle;BSMRecipients : DWORD;function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint):Longint; stdcall;
beginResult := 0;if Msg = iMessageID thenbegincase wParam ofMI_ACTIVEAPP: {激活应用程序}if lParam<>0 thenbegin{收到消息的激活前一个实例}{为什么要在另一个程序中激活?}{因为在同一个进程中SetForegroundWindow并不能把窗体提到最前}if IsIconic(lParam) thenOpenIcon(lParam)elseSetForegroundWindow(lParam);Application.Terminate; {终止本实例}end;MI_GETHANDLE: {取得程序句柄}beginPostMessage(HWND(lParam), iMessageID, MI_ACTIVEAPP,Application.Handle);end;end;endelseResult := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);
end;procedure InitInstance;
begin{取代应用程序的消息处理}OldWProc    := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,Longint(@NewWndProc)));{打开互斥对象}MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, STR_UNIQUE);if MutHandle = 0 thenbegin{建立互斥对象}MutHandle := CreateMutex(nil, False, STR_UNIQUE);endelse beginApplication.ShowMainForm  :=  False;{已经有程序实例,广播消息取得实例句柄}BSMRecipients := BSM_APPLICATIONS;BroadCastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE,@BSMRecipients, iMessageID, MI_GETHANDLE,Application.Handle);end;
end;initialization{注册消息}iMessageID  := RegisterWindowMessage(STR_UNIQUE);InitInstance;finalization{还原消息处理过程}if OldWProc <> Nil thenSetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(OldWProc));{关闭互斥对象}if MutHandle <> 0 then CloseHandle(MutHandle);end.

转载于:https://my.oschina.net/hermer/blog/319568

防止程序重复执行的单元相关推荐

  1. php 程序重复执行命令,重复执行bat命令.bat

    重复执行bat命令.bat :start ping -n 5 127.0.0.1 >nul start cmd /c "cd/d C:\Users\Administrator\Desk ...

  2. python怎么编写重复程序,python重复执行怎么写

    python如何用for循环控制多次执行一个自定义函数? 首先我定义一个取随机数的函数: import random def R(): print random #脚本里面直接这样写就好了import ...

  3. 计算机科学概论(2)数据的操控和程序的执行

    1.CPU是什么?它有什么作用? CPU(Central Processing Unit,中央处理器)负责操控数据在不同位置间的移动及对数据进行处理.它是计算机的核心部件.它主要由三个部分组成:算数/ ...

  4. WordPress工作原理之程序文件执行顺序

    在了解WordPress挂载机制时,一直有一个疑惑,到底是WordPress的内核源文件先执行还是主题文件里functions.php文件先执行.为了解决这个问题,想了解WordPress的工作原理, ...

  5. 冯诺依曼计算机程序及其执行,第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析...

    第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 第 4 章 冯.诺依曼计算 ...

  6. python语言是编译型语言-Python程序的执行过程原理(解释型语言和编译型语言)...

    Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的 ...

  7. python运行程序-Python程序的执行过程

    1.C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,计算机是不能识别高级语言的,所以,必须要通过编译,链接等手段,将.c文件转换成可执行文件,可执行文件就是纯二进制文件,然后计算机才 ...

  8. python重复执行_关于计时器:在Python中每x秒重复执行一次函数的最佳方法是什么?...

    我想永远每60秒在Python中重复执行一个函数(就像目标C中的NSTimer一样). 这段代码将作为守护进程运行,实际上就像使用cron每分钟调用python脚本一样,但不需要用户设置. 在这个关于 ...

  9. C++程序的执行过程

    要理解一个程序的执行过程,首先要理解什么是编译器.我们用C语言写的程序,计算机只能识别机器语言(二进制指令),计算机并不能理解.因此,必须 将C语言转换为机器语言.编译器就是用来实现这一功能的.编译器 ...

最新文章

  1. Android 开发利用wifi调试
  2. Java Integer的缓存策略
  3. SpriteBuilder中的粒子系统属性
  4. 哪个厂商搭载鸿蒙系统,神助攻!魅族官宣接入鸿蒙,导致概念股由绿翻红,3支直接涨停...
  5. 【备份】信工apache中有关http.conf的虚拟目录相关配置参考
  6. 活动合作 | 2018GAITC大会:AI领袖、应用指南、窥见风口,还能从中获得更多
  7. python表白代码-如何用Python代码向心爱的姑娘花式表白?
  8. linux序列比对程序,Linux程序管理:top.htop.glances,dstat等命令使用方法
  9. 入门Sysmac Studio,白菜妹子是这样做的。
  10. cad插件_CAD插件燕秀工具箱2.81
  11. 高德城市编码json_sql_excel 三级联动json合集
  12. 三分钟教你开通支付宝收款二维码
  13. Android常用adb shell命令
  14. uniapp返回上一页并刷新数据
  15. ansible模块管理与主机清单配置
  16. 微信营销分析之最有效的微信推广技巧
  17. MySQL EXISTS 关键字使用
  18. 2020-09-10 MYSQL按时间段分组查询当天,每小时,15分钟数据分组
  19. ios 开发 键盘 android,UiOS开发中ITextView回收或关闭键盘使用方法总结
  20. enet分割_[论文笔记] 图像语义分割——ENet(ICLR 2017)

热门文章

  1. oracle监听错误与hosts文件配置
  2. Codeforces Round #321 (Div. 2) D Kefa and Dishes(dp)
  3. 实习生笔试面试题总结
  4. 跨平台图表控件TeeChart使用教程:导入XML数据
  5. t-sql使用小记2010-01-27
  6. Apache简单配置(4)搭建Discuz 7.0.0论坛
  7. linux每天进步一点点-7月4.5.6日
  8. 解耦的故事(一)-tmfc的开关(转)
  9. 多线程-010-后台线程
  10. 剑指offer十九之顺时针打印矩阵