防止一个没有窗体的WINDOWS程序的重复运行

用互斥(Mutex),Mutex本来是多线程同步用的,防止多个线程访问同一资源而引发冲突。用CreateMutex可以创建Mutex对象,实质上是一个kernel对象。

在任何Win32程序(包括GDI和Console)的启动部分加上以下代码(Console程序的main函数、MFC程序的CWinApp派生类的InitInstance成员函数、RawSDK程序的WinMain 函数):

hMutex=CreateMutex(
NULL,//nosecurityattributes
FALSE,//initiallynotowned
"RunOnlyOneInstance");//命名Mutex是全局对象
//在所有的process都可以访问到
if(hMutex==NULL||ERROR_ALREADY_EXISTS==::GetLastError())
{
//程序第二次或以后运行时,会得到Mutex已经创建的错误
returnFALSE;
}

嘿嘿,是不是不用FindWindow优雅简洁多了?

另外,如果要限定程序同时可运行n个实例怎么办?

Tips:用信号量(Semaphore)。

时间: 2024-10-31 19:56:29

防止一个没有窗体的WINDOWS程序的重复运行的相关文章

.net的bs程序中如何嵌入C#windows程序

问题描述 请教各位大师:我想在.net网站中嵌入一个小型的c#windows程序,我该怎么办呀,我先谢谢各位老师了

怎么把windows程序图标用鼠标拖到窗体程序中

问题描述 怎么把windows程序图标用鼠标拖到窗体程序中 怎么把windows程序图标用鼠标拖到窗体程序中,怎么在程序中管理这些图标,图标的程序执行? 解决方案 你可以响应鼠标的拖放事件,比如说oledrogover

Delphi编程调用指定的Windows程序

本实例介绍如何在自己的程序中调用指定的Windows程序. 首先启动一个新的项目,在空白的窗体上添加4个TButton组件.添加组件后的窗体如图1所示. 图1 添加组件后的窗体 其中WinExec按钮用于以WinExec函数来调用指定的Windows程序.ShellExecute按钮用于以ShellExecute函数来调用指定的Windows程序.CreateProcess按钮和TerminateProcess按钮用于实现对被调用程序更全面的操作,前者用于调用指定的Windows程序,而后者则用

菜鸟急求,关于windows程序界面设计的。自己想了好长时间了,百度了很多资料也没看到点眉目

问题描述 菜鸟急求,关于windows程序界面设计的.自己想了好长时间了,百度了很多资料也没看到点眉目 是这样的,我想在一个主窗口里,放置几个按钮控件,分别用来更新同一块矩形区域,但是每一个按钮按下,区域显示的内容是不一样的,并且擦除之前的内容,功能就 像图片里的那些按钮,能够控制下边显示的内容, 我用了InvalidateRect(hwnd,&rect,TRUE)发现区域只是闪了一下,并没有擦除任何内容,尤其是之前区域里的按钮控件也没有删除掉.导致新按钮和旧按钮都显示着. 查资料的时候,看到了

MFC 分割窗体(Splitter Windows)

MFC 分割窗体(Splitter Windows)<reference MSDN  Microsoft Foundation Class Library and Templates TNO 029> 文档描述MFC中的CSplitterWnd类,该类用来支持窗体的分割和管理分割后每一个子窗格(pane)的大小   1 分割窗体风格(Splitter Styles)CSplitterWnd类支持2种不同风格的分割窗口   1.1 静态分割(static splitter)分割的窗格(pane)

C#中windows窗体和windows Service怎样共享内存,或者它们之间能否实现共享内存?

问题描述 我的一个项目中需要在一个windows窗体和windowsService程序之间通过共享内存实现相互通信,请问这种方法可以吗?它们两者之间能否实现共享内存? 解决方案 解决方案二:参考c​#​内​存​共​享解决方案三:它两个有关系么!!解决方案四:要共享内存用MemoryMappedFile类(Donet4或以上)就可以了.但是,'相互通信'不仅仅是共享内存,还要有更新通知和同步机制.一般来说,相互通信比较简单的方式是管道(WCF也很常见),具体例子可见NamedPipeServerS

如何使用C#创建一个三层的数据库应用程序

程序|创建|数据|数据库 如何使用C#创建一个三层的数据库应用程序1.分析在我们这个程序中采用如下的层次:Web层,业务实体层,数据层.其中:业务实体层负责Web层与数据层之间的数据交换.数据层仅仅代表数据库.Web层通过业务实体层来访问数据库.我们的中间的业务实体层采用WebService.2.实例我们通过一个实例来学习三层架构.(1) 以sql2000为例建立TestUser数据库.表的sql脚本(在查询分析器中执行即可):/****** Object: Table [dbo].[Custo

从NT服务启动Windows程序

介绍 通常,NT服务是控制台应用程序,它没有消息循环.不必等到用户 登陆电脑,NT服务便能启动,并且在用户登出之后,它也不会停止运行.然而, 许多现存的ActiveX控件很难,有时候根本不可能在控制台程序中使用. 另一方面,MFC和VB程序都是Windows应用程序,所以在MFC或VB程序中使用 ActiveX控件相当简单.要是能使MFC和VB程序像NT服务一样运行就不错了: • 在用户登陆电脑之前就启动 • 在用户登出电脑之 后继续运行 可以用Windows程序的形式直接写NT服务,但是本文要

windows程序如何实现精准定时

  1. 精度不高 windows98大概是55ms,Windows NT大概是10ms. 2. WM_TIMER消息可能无法及时处理 WM_TIMER消息和其他消息一样,存放在正常的消息队列之中.如果程序处理其他消息,用了太长的时间,就耽误了WM_TIMER消息的处理,从效果上看就相当于定时器来晚了. 3. WM_TIMER消息可能会有遗漏 这样一来,如果一个windows程序在时间方面有苛刻的要求(例如,测试仪之类的软件),怎么办呢. "小兵以太网测试仪"采用的是如下的笨方法. 这