程序只运行一个实例,并激活前一个实例

原创 2005年03月03日 09:26:00

程序只运行一个实例,并激活前一个实例
作者:耿海增

下载本文示例工程(下载为VC知识库链接)


实现程序只运行一次的方法很多,但是原理都是一样的,就是运行第一次的时候设置一个标记,每次运行的时候检查该标记,如果有就说明已经运行了。

具体实现:

1、在程序初始化的时候 (InitInstance()) 枚举所有的窗口,查找本程序的实例是否存在
2、在主窗口初始化的时候在本窗口的属性列表中添加一个标记,以便程序查找.

部分关键代码

1、在App的InitInstance()中枚举所有窗口,查找本程序实例

HWND oldHWnd = NULL;
EnumWindows(EnumWndProc,(LPARAM)&oldHWnd);    //枚举所有运行的窗口
if(oldHWnd != NULL)
{
	AfxMessageBox("本程序已经在运行了");
	::ShowWindow(oldHWnd,SW_SHOWNORMAL);          //激活找到的前一个程序
	::SetForegroundWindow(oldHWnd);                //把它设为前景窗口
	return false;                                  //退出本次运行
}
2、添加EnumWndProc窗口过程函数:
//添加的标识只运行一次的属性名
CString  g_szPropName = "Your Prop Name";   //自己定义一个属性名
HANDLE   g_hValue = (HANDLE)1;               //自己定义一个属性值
 
BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
{
	HANDLE h = GetProp(hwnd,g_szPropName);
	if( h == g_hValue)
	{
		*(HWND*)lParam = hwnd;
		return false;
	}
	return true;
}
3、在主窗口的 OnInitDialog()中添加属性
//设置窗口属性
SetProp(m_hWnd,g_szPropName,g_hValue);
版权声明:本文为博主原创文章,欢迎转载

Java Swing 每次打开只运行一个实例,并激活任务栏里的程序

import java.awt.AWTException; import java.awt.Dimension; import java.awt.Image; import java.awt.Menu...
  • lovoo
  • lovoo
  • 2016年09月14日 21:40
  • 2092

程序只运行一个实例,并激活已运行的程序

进程的互斥运行:CreateMutex函数实现只运行一个程序实例   正常情况下,一个进程的运行一般是不会影响到其他正在运行的进程的。但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程...

程序只有一个实例运行

  • 2011年10月09日 10:37
  • 25KB
  • 下载

程序只运行一个实例,并激活已运行的实例[12月15日更新]

只允许一个实例的方法比较简单: 在InitInstance() 函数里加入如下代码,利用互斥量来保证只运行一次 HANDLE m_hMutex = CreateMutex(NULL, TR...
  • arbel
  • arbel
  • 2011年12月10日 11:17
  • 781

让程序只运行一个实例

  • 2008年12月25日 13:18
  • 115KB
  • 下载

保证应用程序只有一个实例运行

  • 2009年11月16日 19:18
  • 762B
  • 下载

VC保证应用程序只有一个实例在运行

http://www.cnblogs.com/lxshanye/archive/2013/05/22/3093182.html   HANDLE m_hMutex = ::CreateMutex(...

只允许运行程序的一个实例

  • 2011年05月10日 01:33
  • 5KB
  • 下载

使程序一运行一个实例(29KB)

  • 2006年02月23日 09:05
  • 29KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序只运行一个实例,并激活前一个实例
举报原因:
原因补充:

(最多只允许输入30个字)