您的位置:首页 > 其它

windows 下确保只有一个程序实例

2014-01-28 18:39 344 查看
1、 确保只有一个实例http://

#include <Windows.h>
#include <stdio.h>

int main ()
{
HANDLE hMutex = CreateMutexW(NULL, FALSE, L"ProgramName");
if (
(hMutex != NULL)
&& (::GetLastError() != ERROR_ALREADY_EXISTS)
)
{
//do program
getchar();

return 0;
}
else
{
printf("Program's instance is already running\n");
return 0;
}
}


2、如果是窗口程序,往往希望在发现程序已运行的情况下,将已运行的程序前置显示。

执行ForegroundProgram的DoForeground方法。

ForegroundProgram.h

代码如下:

#ifndef _FOREGROUND_PROGRAM_H_
#define _FOREGROUND_PROGRAM_H_

class ForegroundProgram
{
public:
static void DoForeground(wchar_t *sProgramWindowName);
protected:
static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);
public:
ForegroundProgram();
~ForegroundProgram();
private:
static wchar_t     ms_ProgramWindowName[1024];
};

#endif//_FOREGROUND_PROGRAM_H_


ForegroundProgram.cpp

代码如下:

#include "stdafx.h"
#include "ForegroundProgram.h"
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

wchar_t ForegroundProgram::ms_ProgramWindowName[1024] = {0};

ForegroundProgram::ForegroundProgram()
{
}

ForegroundProgram::~ForegroundProgram()
{
}

void ForegroundProgram::DoForeground(wchar_t *sProgramWindowName)
{
if (sProgramWindowName != NULL)
{
wcscpy(ms_ProgramWindowName, sProgramWindowName);

EnumWindows(EnumWindowsProc, NULL);
}
}

BOOL CALLBACK ForegroundProgram::EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
wchar_t sWindowName[1024];
::GetWindowTextW(hWnd, sWindowName, 1024);
if (wcsstr(sWindowName, ms_ProgramWindowName) != NULL)
{
ShowWindow(hWnd, SW_SHOW);
SetForegroundWindow(hWnd);
}

return TRUE;
}


ForegroundProgram代码下载地址:

点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: