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函数创建互斥对象实例防止程序中多次执行该对象相关推荐

  1. c++使用CreateMuteX函数创建互斥对象单一运行实例

    c++使用CreateMuteX函数创建互斥对象单一运行实例 #include "stdafx.h" #include <Windows.h>// 判断是否重复运行 B ...

  2. android socket 发送byte_如何正确地创建和销毁网络通讯程序中的Socket类的对象实例...

    软件项目实训及课程设计指导--如何正确地创建和销毁软件应用系统中网络通讯中的Socket类的对象实例 1.基于TCP/IP协议的Socket通信相关的基础知识 (1)TCP/IP(Transmissi ...

  3. Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现)

    Py之matplotlib:在matplotlib库中利用legend函数创建自定义图例(代码实现) 目录 matplotlib库中利用legend函数创建自定义图例 原始图像 在原始图像上创建自定义 ...

  4. matlab 利用polyfitpolyval函数进行基线矫正【matlab程序】

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %对原始数据进行基线矫正 %通过矫正,使起始 ...

  5. 在c语言程序中main函数的位置,在C语言程序中,main函数的位置_________。

    在C语言程序中,main函数的位置_________. 答:可以放在任意位置 一切邪教组织及其活动都是诡秘的.邪恶的.危害社会的.非法的 答:正确 产品可以根据其耐用性和是否有形而分为( ) 答:非耐 ...

  6. Win32下利用_beginthread函数创建一个线程

    // Win32_Thread.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <process.h> /* _ ...

  7. c语言变量值与数组元素值交换,编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素值。要求尽量用指针的方法实现。数组a...

    满意答案 a810693885 推荐于 2016.01.08 采纳率:59%    等级:12 已帮助:5204人 #include void main() { int a[10],b[10]; vo ...

  8. 10分钟 在linux里创建.net core helloworld控制台程序

    官方教程 安装linux https://www.cnblogs.com/LittleFeiHu/p/9749455.html 第一步 :选择和你本机适用的Linux版本,我这里用的是18.04. 第 ...

  9. 利用电脑上自带指纹识别嵌入程序中_Win 10 隐藏功能:不用任何软件就可实现手机投屏到电脑...

    投屏工具我也介绍了不少,所有的都是需要安装第三方软件的. 不过,其实 Windows 10 就自带了手机投影到电脑的功能,不需要任何软件就能实现. 在设置中打开系统,找到投影到此电脑,在红框中根据你的 ...

最新文章

  1. 开发日记-20190816 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 24
  2. java 方法大全_java中的方法大全
  3. scp时候出现ssh Connection refused的解决方案
  4. SAP: 如何取物料主数据的特性值
  5. 判定一个点是否在三角形内
  6. CSS3中使用translate() 方法实现元素位置的移动
  7. Java-所有类型的Class对象
  8. 建武28a对讲机最大距离_小米对讲机再出新品:不但价格低,还能一键写频
  9. ibatis学习(一)--ibatis介绍以及用例 [转]
  10. android 免root 免流,安卓无需Root一键免流软件合集,具体哪个能用自测
  11. [贪心] UVa1153 顾客是上帝 (很巧妙的贪心)
  12. 计算机扫盲教程,cmd应用基础 扫盲教程 | Lellansin's 冰森
  13. 【Android】Error obtaining UI hierarchyError while obtaining UI hierarchy XML file: com.android...
  14. jay chou歌词 文本下载数据下载
  15. STM32L431(CubeMX)使用DHT11读取环境温度与湿度并通过串口打印
  16. pytorch的DP和DDP
  17. 网络打印机提示的“功能地址0x造成了一个保护错误”问题解决方案
  18. JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
  19. 应用安全技术趋势之 Top 5
  20. 基金 thread.php,这个时候,我们可以为基金“上会通过”做点什么?(附方案) - 基金申请 - 小木虫 - 学术 科研 互动社区...

热门文章

  1. 错过了竟是一生的遺憾
  2. ▷Scratch课堂丨【经典游戏系列】打地鼠1.3 - 地鼠太郎之毁灭之锤
  3. 有限元参考单元的质量矩阵计算
  4. [openwrt][wifi] 隐藏2.4G 5G的ssid
  5. 安卓点击页面其他地方取消EditText的焦点
  6. 街景字符识别3-字符模型识别
  7. THE、软科世界大学排名数据获取
  8. http与https概述
  9. Mac下Chrome和遨游浏览器的快捷键
  10. 使用Windows自带命令diskpart管理分区