Delphi 10.4利用CreateMutex函数创建互斥对象实例防止程序中多次执行该对象
windows是个多用户多任务的操作系统,支持多个程序同时运行,如果你的程序不想让用户同时运行一个以上,
那应该怎样做呢? 本文将介绍避免用户同时运行多个程序的例子。
需要用到的函数CreateMutex ,CreateMutex 函数是windows中一个并不常用的函数,
该函数对象在系统中只能存在一个实例且是互斥体,所以利用这种特性就很简单的实现了我们的要求。
unit Winapi.Windows中的函数原声明:
// NT 4.0 bug workaround - NT 4.0 doesn't test bInitialOwner for zero/nonzero, it tests for 1
function _CreateMutex(lpMutexAttributes: PSecurityAttributes;bInitialOwner: Integer; lpName: LPCWSTR): THandle; stdcall; external kernel32 name 'CreateMutexW';function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: LPCWSTR): THandle;
beginResult := _CreateMutex(lpMutexAttributes, Integer(Boolean(bInitialOwner)), lpName);
end;
【参数说明】:
lpMutexAttributes 是一个SECURITY_ATTRIBUTES 结构类型的指针,可以设置为NULL。
bInitialOwner 是否初始化互斥体。
lpName 互斥体对象的名称。
函数返回一个互斥体句柄。
当程序运行时创建对象,如果对象已经存在就表明程序已经被运行了。。
【实现过程如下】:欢迎加入Delphi开发局QQ群:32422310 Delphi控件源码下载网站
新建一个工程,窗体明明为Form1.
添加一个Button按钮命名为Button1.
双击按钮添加代码
procedure TForm1.Button1Click(Sender: TObject); var hw : HWND; gt : Integer; begin Application.Initialize; Application.Title := 'runmyfile'; hw := CreateMutex(nil,False,'runmyfile'); {创建互斥体对象} gt := GetLastError; if gt <> Error_ALREADY_EXISTS then {如果没有发现互斥体对象} begin Application.CreateForm(TForm1,Form1); {创建窗体} Application.Run; end else begin Application.MessageBox('程序已经运行','提示',MB_OK); Application.Terminate; ReleaseMutex(hw);{释放互斥体} end; end;
Delphi 10.4利用CreateMutex函数创建互斥对象实例防止程序中多次执行该对象相关推荐
- c++使用CreateMuteX函数创建互斥对象单一运行实例
c++使用CreateMuteX函数创建互斥对象单一运行实例 #include "stdafx.h" #include <Windows.h>// 判断是否重复运行 B ...
- android socket 发送byte_如何正确地创建和销毁网络通讯程序中的Socket类的对象实例...
软件项目实训及课程设计指导--如何正确地创建和销毁软件应用系统中网络通讯中的Socket类的对象实例 1.基于TCP/IP协议的Socket通信相关的基础知识 (1)TCP/IP(Transmissi ...
- Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现)
Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现) 目录 matplotlib库中利用legend函数创建自定义图例 原始图像 在原始图像上创建自定义 ...
- matlab 利用polyfitpolyval函数进行基线矫正【matlab程序】
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %对原始数据进行基线矫正 %通过矫正,使起始 ...
- 在c语言程序中main函数的位置,在C语言程序中,main函数的位置_________。
在C语言程序中,main函数的位置_________. 答:可以放在任意位置 一切邪教组织及其活动都是诡秘的.邪恶的.危害社会的.非法的 答:正确 产品可以根据其耐用性和是否有形而分为( ) 答:非耐 ...
- Win32下利用_beginthread函数创建一个线程
// Win32_Thread.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <process.h> /* _ ...
- c语言变量值与数组元素值交换,编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素值。要求尽量用指针的方法实现。数组a...
满意答案 a810693885 推荐于 2016.01.08 采纳率:59% 等级:12 已帮助:5204人 #include void main() { int a[10],b[10]; vo ...
- 10分钟 在linux里创建.net core helloworld控制台程序
官方教程 安装linux https://www.cnblogs.com/LittleFeiHu/p/9749455.html 第一步 :选择和你本机适用的Linux版本,我这里用的是18.04. 第 ...
- 利用电脑上自带指纹识别嵌入程序中_Win 10 隐藏功能:不用任何软件就可实现手机投屏到电脑...
投屏工具我也介绍了不少,所有的都是需要安装第三方软件的. 不过,其实 Windows 10 就自带了手机投影到电脑的功能,不需要任何软件就能实现. 在设置中打开系统,找到投影到此电脑,在红框中根据你的 ...
最新文章
- 开发日记-20190816 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 24
- java 方法大全_java中的方法大全
- scp时候出现ssh Connection refused的解决方案
- SAP: 如何取物料主数据的特性值
- 判定一个点是否在三角形内
- CSS3中使用translate() 方法实现元素位置的移动
- Java-所有类型的Class对象
- 建武28a对讲机最大距离_小米对讲机再出新品:不但价格低,还能一键写频
- ibatis学习(一)--ibatis介绍以及用例 [转]
- android 免root 免流,安卓无需Root一键免流软件合集,具体哪个能用自测
- [贪心] UVa1153 顾客是上帝 (很巧妙的贪心)
- 计算机扫盲教程,cmd应用基础 扫盲教程 | Lellansin's 冰森
- 【Android】Error obtaining UI hierarchyError while obtaining UI hierarchy XML file: com.android...
- jay chou歌词 文本下载数据下载
- STM32L431(CubeMX)使用DHT11读取环境温度与湿度并通过串口打印
- pytorch的DP和DDP
- 网络打印机提示的“功能地址0x造成了一个保护错误”问题解决方案
- JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
- 应用安全技术趋势之 Top 5
- 基金 thread.php,这个时候,我们可以为基金“上会通过”做点什么?(附方案) - 基金申请 - 小木虫 - 学术 科研 互动社区...