日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

只运行一个实例的方法

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 只运行一个实例的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在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 else 16 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 else 20 21 { 22 23 ReleaseMutex(Mutex); 24 25 } 26 27 28 29 }

?

轉載于:https://www.cnblogs.com/wind-net/archive/2012/08/29/2661709.html

總結

以上是生活随笔為你收集整理的只运行一个实例的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。