1. 程式人生 > >MFC如何判斷一個程序已經存在

MFC如何判斷一個程序已經存在

通俗的講,CreateMutex就是用來判定是否存在一個指定的程序。呵呵,這樣就很好理解了。【MFC】判斷一個指定的程序是否存在--CreateMutex() CreateMutex() 說明: 建立一個互斥體(MUTEX) 返回值: Long,如執行成功,就返回互斥體物件的控制代碼; 零表示出錯。會設定GetLastError。即使返回的是一個有效控制代碼,但倘若指定的名字已經存在,GetLastError也會設為ERROR_ALREADY_EXISTS 引數表 引數 型別及說明 lpMutexAttributes SECURITY_ATTRIBUTES,指定一個SECURITY_ATTRIBUTES結構,或傳遞零值(將引數宣告為ByVal As Long,並傳遞零值),表示使用不允許繼承的預設描述符. bInitialOwner Long,如建立程序希望立即擁有互斥體,則設為TRUE。一個互斥體同時只能由一個執行緒擁有 lpName String,指定互斥體物件的名字。用vbNullString建立一個未命名的互斥體物件。如已經存在擁有這個名字的一個事件,則開啟現有的已命名互斥體。這個名字可能不與現有的事件、訊號機、可等待計時器或檔案對映相符 註解:   一旦不再需要,注意必須用CloseHandle函式將互斥體控制代碼關閉。從屬於它的所有控制代碼都被關閉後,就會刪除物件程序中止前,一定要釋放互斥體,如不慎未採取這個措施,就會將這個互斥體標記為廢棄,並自動釋放所有權。共享這個互斥體的其他應用程式也許仍然能夠用它,但會接收到一個廢棄狀態資訊,指出上一個所有程序未能正常關閉。這種狀況是否會造成影響取決於涉及到的具體應用程式 --------------------------------------------------------------------- xxx::OnInitDialog() //xxx::InitInstance() {         HANDLE dlgHandle = ::CreateMutex( NULL, FALSE, _T("ProcessTest.exe"));         if( GetLastError() == ERROR_ALREADY_EXISTS )         {                 AfxMessageBox("該應用程式已經存在!");                 this->EndDialog( 1 ); // return FALSE;         }         CloseHandle( dlgHandle ); } 建立互斥體可以在App類的InitInstance中,也可以在Dlg類的OnInitDialog中,不過推薦在前者中建立。當然,一定要在生成對話方塊之前才有效。