Windows下实现程序单一运行

一 引言

      程序单一运行就是在一个操作系统中,一个程序只有一个实例在系统中运行.比如千千静听,你无法在系统中运行两个千千静听的实例.

 

二 需求描述

  • 程序的单一运行
  • 当系统中已有一个程序运时,将改程序的窗口激活并最大化.

三 实现概述

1,使用CreateMutex创建一个全局互斥量,并且使用SetProp往MainWnd中添加一个新项.

2,当第二个程序的实例在InitInstance的时候,CreateMutex会失败,并且GetLastError()会得到一个ERROR_ALREADY_EXISTS的错误代码.

3,枚举MainWnd中的CWnd,如果发现该CWnd,那么将其最大化.

 

四 所使用到的Win32 API以MFC库

CreateMutex 

创建一个互斥体(MUTEX)


CWnd::GetDesktopWindow()

函数功能:该函数返回桌面窗口的句柄。桌面窗口覆盖整个屏幕。桌面窗口是一个要在其上绘制所有的图标和其他窗口的区域。

 

CWnd::GetWindow 
该函数返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄。
 
BOOL SetProp(HWND hWnd,LPCTSTR lpString,HANDLE hData);
函数功能:该函数在指定窗口的属性表中增加一个新项,或者修改一个现有项。如果指定的字符串不在属性表中,那么就增加该新的项,新项中包含该字符串和句柄,否则就用指定的句柄替换该字符串的全前句柄。
 

HANDLE GetProp(HWND hWnd,LPCTSTR lpString);
 函数功能:该函数从给定窗口的属性列表中检索数据句柄。给定的字符串标识了要检索的句柄。该字符串和句柄必须在前一次调用SetProp函数时已经加到属性表中。

 

五 实现代码

 

在CSingleInstanceApp::InitInstance()中添加.

 


 在CMainFrame中加入WM_DESTROY的处理代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值