只运行一个实例的方法
来源:互联网 发布:nodejs传递数组到页面 编辑:程序博客网 时间:2024/05/04 07:34
在VC++ 中编程中,只运行一个实例的方法主要有两类:
1 遍历当前的所有窗口,查找相同的实例。为了便于查找,一般要事先设一个查找标志。
2 利用系统提供的互斥对象或信标,直接让系统抑制重复的实例。
在发现重复运行时,一般还有一个任务,就是激活已经存在的窗口。
一、 第一类方法的实现
下面是一个具体的例子,下图是示例代码运行的情况。
部分关键代码
1、在App的InitInstance()中枚举所有窗口,查找本程序实例
1 HWND oldHWnd = NULL; 2 3 EnumWindows(EnumWndProc,(LPARAM)&oldHWnd); //枚举所有运行的窗口 4 5 if(oldHWnd != NULL) 6 7 { 8 9 AfxMessageBox("本程序已经在运行了");10 11 ::ShowWindow(oldHWnd,SW_SHOWNORMAL); //激活找到的前一个程序12 13 ::SetForegroundWindow(oldHWnd); //把它设为前景窗口14 15 return false; //退出本次运行16 17 }
2、添加EnumWndProc窗口过程函数://通过自定义的属性名查找同类实例窗口
1 CString g_szPropName = "Your Prop Name"; //自己定义一个属性名 2 3 HANDLE g_hValue = (HANDLE)1; //自己定义一个属性值 4 5 6 7 BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam) 8 9 {10 11 HANDLE h = GetProp(hwnd,g_szPropName);12 13 if( h == g_hValue)14 15 {16 17 *(HWND*)lParam = hwnd;18 19 return false;20 21 }22 23 return true;24 25 }
3、在主窗口的 OnInitDialog()中添加属性 //设置窗口属性
1 SetProp(m_hWnd,g_szPropName,g_hValue);
2丶第二种方法:
控制台下:
1 HANDLE Mutex; 2 3 Mutex = CreateMutex(NULL, TRUE, "me"); 4 5 if(GetLastError() == ERROR_ALREADY_EXISTS) 6 7 { 8 9 cout << "only one instance can run!" << endl;10 11 return 1;12 13 }14 15 else16 17 {18 19 ReleaseMutex(Mutex);20 21 }
MFC下:
1 BOOL CtestInfoApp::InitInstance() 2 3 { 4 5 HANDLE Mutex; 6 7 Mutex = CreateMutex(NULL, TRUE, "me"); 8 9 if(GetLastError() == ERROR_ALREADY_EXISTS)10 11 {12 13 AfxMessageBox("only one instance can run!");14 15 return 0;16 17 }18 19 else20 21 {22 23 ReleaseMutex(Mutex);24 25 }26 27 …28 29 }
- 只允许一个实例运行的方法
- 只运行一个实例的方法
- 只运行一个实例进程的方法
- 只允许运行一个实例的方法
- 一种只允许程序的一个实例运行的方法
- 让程序只运行一个实例的方法
- C#中只运行一个实例的方法
- 让程序只运行一个实例的方法总结[转]
- 让程序只运行一个实例的方法总结
- 让程序只运行一个实例的四种方法
- VC让程序只运行一个实例的方法
- 让程序只运行一个实例的四种方法
- 让程序只运行一个实例的四种方法
- 让程序只运行一个实例的四种方法
- 让程序只运行一个实例的方法
- 只允许运行一个实例的三种方法
- 让程序只运行一个实例的四种方法
- 让程序只运行一个实例的四种方法
- 临界区
- Windows API ——CreateMutex——创建互斥对象
- Windows API——CreateEvent——创建事件
- 互斥对象、事件对象、关键代码段的应用和比较
- 信号量
- 只运行一个实例的方法
- _stdcall和_cdecl
- GetLastError演示
- 程序自删除代码
- filename.substr(filename.find_last_of('.') + 1)
- 中文错误信息的显示:GetLastErro的使用
- dll附加依赖项查看——dumpbin
- Socket TCP 简单聊天的实现
- 主机名、域名、IP、MAC地址的获取