當前位置:編程學習大全網 - 編程語言 - 如何編程實現以下效果,詳見內。高分!!!

如何編程實現以下效果,詳見內。高分!!!

原理很簡單,只要在已運行的程序中查找是否已經存在該應用程序,如果存在就激活它,否則就開始運行。

壹個簡單的辦法就是用應用程序的執行文件名創建互斥對象(mutex object)(API為CreateMutex),這樣,每次在程序開始執行的時候,若創建失敗,則表示該應用程序正在運行中,通過遍歷操作系統的所有運行程序,並比較它們的屬性,找到正在運行的窗口,激活它。否則,表示該應用程序在之前沒有運行副本,於是就正常啟動並運行該程序就可以了。

關鍵API:

CreateMutex()

SetProp()

GetProp()

可以通過幫助文檔了解以上API的說明

以下給妳壹段VC++中BOOL CXXXApp::InitInstance()的相關代碼(返回FALSE表示應用程序退出):

//m_pszExeName為應用程序的執行文件名

::CreateMutex(NULL, TRUE, m_pszExeName);

if(GetLastError() == ERROR_ALREADY_EXISTS)

{

//Find previous application's main window

CWnd* pPrevWnd = CWnd::GetDesktopWindow()->GetWindow(GW_CHILD);

while(pPrevWnd)

{

//Does this window have the previous instance tag set?

if(::GetProp(pPrevWnd->GetSafeHwnd(),m_pszExeName))

{

//Found window, set focus to the window

//First restore window if it is currently iconic.

if(pPrevWnd->IsIconic())

pPrevWnd->ShowWindow(SW_RESTORE);

//Set focus to main window

pPrevWnd->SetForegroundWindow();

//If window has a pop-up window, set focus to pop-up.

pPrevWnd->GetLastActivePopup()->SetForegroundWindow();

//找到了原先的應用程序主窗口pPreWnd,就可以把啟動本程序時的參數

//或者其它數據傳遞給pPreWnd,然後交由pPreWnd處理就可以了

//========>>>>>估計妳關心的問題關鍵就在這裏<<<<<========

return FALSE;

}

//Did not find window, get next window in list.

pPrevWnd = pPrevWnd->GetWindow(GW_HWNDNEXT);

}

TRACE("Could not find previous instance main window!\n");

return FALSE;

}

//創建主窗口

CMainFrame* pMainFrame = new CMainFrame;

m_pMainWnd = pMainFrame;

if (!pMainFrame->LoadFrame(IDR_MAINFRAME))

return FALSE;

// The main window has been initialized, so show and update it.

pMainFrame->ShowWindow(m_nCmdShow);

pMainFrame->UpdateWindow();

//Associate a tag with the window so we can locate it later.

::SetProp(pMainFrame->GetSafeHwnd(),m_pszExeName,(HANDLE)1);

//沒有找到,繼續做該做的事兒...

//...

補充:

1。查找原先運行的應用程序時,用應用程序的執行文件名更好些,因為窗口標題可能會在程序運行期間發生變化

2。只要能得到原先應用程序的窗口實例(如窗口指針或者句柄),就可以把數據或消息發送給它

3。剛才沒有看見妳用的是VB(估計是在我寫以上文字時加上的),特意寫了段VC的代碼(辛苦啊),其實不管是vc還是vb,原理是壹樣的,就不再重復寫壹遍了,諒解哦!

  • 上一篇:三份師範大學生求職簡歷樣本。
  • 下一篇:年輕人為什麽願意學習新知識 新技能
  • copyright 2024編程學習大全網