//找到当前已经打开的程序实例
HWND hWnd=NULL;
HANDLE h = GetProp(hWnd,"Your Program Name");
if(hWnd!=NULL)
{
AfxMessageBox("该程序已经运行了!");
::ShowWindow(hWnd,SW_SHOWNORMAL); //激活找到的前一个程序
::SetForegroundWindow(hWnd);
}
在
::Initinstance()
{
if(OpenMutes(MUTEX_ALL_ACCESS,TRUE,"ABCDEFGH"))
return false;//返回FALSE 直接推出程序自动
CreateMutex(NULL,TRUE,"ABCDEFGH"); //创建 别的程序就无法启动了
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=492172
例2:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HANDLE hMutex;
WNDCLASSEX wcex;
MSG msg;
long top, left;
char strmsg[256];
unsigned long BackupSerial;
//---------------------------------------------------------------
// 2重起動防止
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, DATA_GUARD_MUTEX);
if(hMutex)
{
//if(lpCmdLine)
// DebugOut("WinMain - lpCmdLine = %s", lpCmdLine);
EnumWindows(&FindWindowProc, (LPARAM)lpCmdLine);
CloseHandle(hMutex);
return FALSE;
}
hMutex = CreateMutex(NULL, TRUE, DATA_GUARD_MUTEX);
。。。。。。
}
BOOL CALLBACK FindWindowProc(HWND hWnd, LPARAM lParam)
{
if(GetProp(hWnd, DATA_GUARD_WND))
{
if(lParam)
{
COPYDATASTRUCT cds;
memset(&cds, 0, sizeof(COPYDATASTRUCT));
char * pCmd;
pCmd = (char*)lParam;
DebugOut("FindWindowProc - WM_COPYDATA = %s", pCmd);
cds.cbData = strlen(pCmd) + 1;
cds.lpData = (PVOID)pCmd;
SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds);
}
SetForegroundWindow(hWnd);
ShowWindow(hWnd, SW_SHOW);
return FALSE;
}
return TRUE;
}
//---------------------------------------------------------------
// インスタンスの保存
g_hInst = hInstance;
浙公网安备 33010602011771号