首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

vc中怎么保证同样的exe程序只有一个运行

2012-08-01 
vc中如何保证同样的exe程序只有一个运行啊各位大侠,我想实现这样的功能:比方说我想让一个exe程序,如果它没

vc中如何保证同样的exe程序只有一个运行啊
各位大侠,我想实现这样的功能:
比方说我想让一个exe程序,如果它没有运行,那么就开始运行,如果这个exe程序已经运行了,那么就弹出对话框告诉用户已经运行了,并且将已经运行的程序调到最前面来,不知道有没有这种方法,
还请各位不吝赐教,我先谢谢了。

[解决办法]
枚举窗口
在程序入口initstance里
HANDLE m_hMutex = ::CreateMutex(NULL,TRUE,m_pszName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox("您已经运行了本软件!");//弹出对话框确认不能运行第二个实例。
return FALSE;
}

[解决办法]
《Windows核心编程》
[解决办法]
//--------------------------------------- 

#include <vcl.h> 
#pragma hdrstop 
//--------------------------------------- 
USEFORM( "Unit1.cpp ", Form1); 
//--------------------------------------- 
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 

// 创建互斥 
HANDLE hMutex = ::CreateMutex(NULL, TRUE, "MyProjectRunFlag "); 
if(GetLastError() == ERROR_ALREADY_EXISTS) 

// 如果实例已经运行 
HWND hWin = FindWindow( "TForm1 ", "Form1 "); 
if(hWin) 

if(!IsWindowVisible(hWin)) 

// 如果最小化状态就将窗体恢复 
PostMessage(hWin, WM_SYSCOMMAND, SC_RESTORE, 0); 

// 窗体置前 
SetForegroundWindow(hWin); 
BringWindowToTop(hWin); 

if(hMutex) 
CloseHandle(hMutex); 
return 0; 

// 

try 

Application-> Initialize(); 
Application-> CreateForm(__classid(TForm1), &Form1); 
Application-> Run(); 

catch (Exception &exception) 

Application-> ShowException(&exception); 

catch (...) 

try 

throw Exception( " "); 

catch (Exception &exception) 

Application-> ShowException(&exception); 


return 0; 


[解决办法]
窗口置顶
::SetWindowPos(m_hWndTop ,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);

热点排行