限制程式執行例項數 (轉)
限制一個同時只能執行一個例項的方法一般有兩種,即使用“訊號”與FindWindow,通常第一種方法較為,而第二種方法必須知道Window的CLASS(在MFC中是很痛苦的,而且一旦CLASS NAME變了以後程式也要跟著改),否則可能就會出錯。然而這兩種方法都只能限制程式執行一次,如果要控制程式執行次數,比如3次,則使用以上的兩種方法就會很困難。前段時間寫了一個HOOK,其中用到了共享變數,在這個程式寫完後我突發奇想,不知道這個東西在EXE中是否有用?想到了那就試一試吧,一試,果然蠻爽的,居然也行,當時就想到這樣一來如果要限制一個程式同時只能執行一個例項不是很簡單,試了一下,當然毫無疑問的程式只執行了一個,程式碼如下:
1、在一個CPP中所有函式實體外加入以下幾句
#pragma data_seg("SHARDAT")
HWND ghMainWnd=NULL; //必須初始化,儲存主視窗HANDLE
#pragma data_seg()
#pragma comment(linker,"/section:SHARDAT,RWS")
2、在你的主視窗的OnCreate中對 ghMainWnd賦值
ghMainWnd = GetSafeHwnd();
3、程式執行時(如Initinstance)判斷 ghMainWnd 是否為NULL
if( ghMainWnd!=NULL && IsWindow(ghMainWnd) )
{
SendMessage( ghMainWnd, WM_YOURMESSAGE, ...
return ...
}
怎麼樣,比第一種方法簡單多了吧,有了以上程式碼,要限制程式執行次數就簡單了,如下:
1、在一個CPP中所有函式實體外加入以下幾句
#pragma data_seg("SHARDAT")
HWND ghMainWnd[10]={}; //儲存已執行的視窗HANDLE,沒太多用
int gRuned=0;
#pragma data_seg()
#pragma comment(linker,"/section:SHARDAT,RWS")
2、在你的主視窗的OnCreate中對 ghMainWnd賦值
if( gRuned<10 )
ghMainWnd[gRuned] = GetSafeHwnd();
gRuned++;
3、注意,必須在適當的時候減小 gRuned, 如在OnDestroy中等
4、程式執行時(如Initinstance)判斷 ghMainWnd 是否為NULL
if( gRuned>=MAX_RUN )
{
SendMessage( ghMainWnd, WM_YOURMESSAGE, ...
return ...
}
注意:在對gRuned操作時要注意同步
其中MAX_RUN可以儲存到REG或INI中,根據不同情況來設定
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993636/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux執行緒(程式)數限制Linux執行緒
- Linux 執行緒(程式)數限制分析Linux執行緒
- 程式執行例項數量的控制――大全篇[原創]
- 限制文字框只能夠輸入數字程式碼例項
- javascript限制textarea文字框輸入字元個數程式碼例項JavaScript字元
- 執行緒問題2(注意例項變數)執行緒變數
- 通用執行緒:Awk 例項,第 1 部分(轉)執行緒
- js呼叫執行exe應用程式程式碼例項JS
- Python程式和執行緒例項詳解Python執行緒
- C#多執行緒程式設計例項C#執行緒程式設計
- 【限制程式只開啟一個例項】
- java多執行緒例項Java執行緒
- js將小數轉換為整數程式碼例項JS
- javascript動態建立並執行css程式碼例項JavaScriptCSS
- Activiti的流程例項【ProcessInstance】與執行例項【Execution】
- javascript測試程式碼的執行時間程式碼例項JavaScript
- [轉]BDB例項程式碼
- Thread 併發執行例項thread
- 單節點執行ASM例項ASM
- 數字轉換為中文大寫例項程式碼
- js將字串轉換為數字程式碼例項JS字串
- javascript將字串轉換為整數程式碼例項JavaScript字串
- javascript將物件轉換為數字程式碼例項JavaScript物件
- 網頁倒數計時跳轉程式碼例項網頁
- 應用程式每次只能執行一個例項(C#)C#
- 僅允許程式一個例項執行VC6
- .net使用Task多執行緒執行任務 .net限制執行緒數量執行緒
- win32 單例項程式執行-無視窗程式也可Win32單例
- js將小數轉換為整數簡單程式碼例項JS
- 突破常規限制執行asp木馬(轉)
- C#實現單例項執行C#單例
- dddsample一個可執行的例項
- JVM 位元組碼執行例項分析JVM
- 3.1.5.5 啟動例項到限制模式模式
- jQuery限制上傳圖片格式和大小程式碼例項jQuery
- 轉: Windows控制程式碼數的限制Windows
- JavaScript取餘數程式碼例項JavaScript
- 數字轉換為漢字大寫形式程式碼例項