WEB开发网      婵犻潧鍊婚弲顐︽偟椤栨稓闄勯柦妯侯槸閻庤霉濠婂骸浜剧紒杈ㄥ笚閹峰懘鎮╅崹顐ゆ殸婵炴垶鎸撮崑鎾趁归悩鐑橆棄闁搞劌瀛╃粋宥夘敃閿濆柊锕傛煙鐎涙ê鐏f繝濠冨灴閹啴宕熼鍡╀紘婵炲濮惧Λ鍕叏閳哄懎绀夋繛鎴濈-楠炪垽鎮归崶褍妲婚柛銊ュ缁傚秹鏁撻敓锟� ---闂佹寧娲╅幏锟�
开发学院软件开发VC 程序只运行一个实例,并激活前一个实例 阅读

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

 2006-07-20 11:37:54 来源:WEB开发网 闂侀潧妫撮幏锟�闂佸憡鍨电换鎰版儍椤掑倵鍋撳☉娆嶄沪缂傚稄鎷�婵犫拃鍛粶闁靛洤娲ㄩ埀顒佺⊕閵囩偟绱為敓锟�闂侀潧妫撮幏锟�  闂佺ǹ绻楀▍鏇㈠极閻愭娑樷枎閹邦剛娉氶梺鍛婎殔濞层劌鈻撻幋婵愬殫妞ゆ梻鍘х憴锟�
核心提示:本文示例源代码或素材下载 示例代码运行效果图如下:实现程序只运行一次的方法很多,但是原理都是一样的,程序只运行一个实例,并激活前一个实例,就是运行第一次的时候设置一个标记,每次运行的时候检查该标记,如果有就说明已经运行了,具体实现:1、在程序初始化的时候 (InitInstance()) 枚举所有的窗口

本文示例源代码或素材下载

示例代码运行效果图如下:

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

具体实现:

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);

Tags:程序 运行 一个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接