C++系列 --- 檢查程序只有一個運行實例以及自動隱藏控制檯

一、檢查程序只有一個運行實例

通過創建CreateMutex

#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
	cout << "In this process!\n" << endl;

	// 創建互斥鎖
	HANDLE hMutex = CreateMutex(NULL, TRUE, L"XONE"); 

	// 表示程序已經存在
	if (GetLastError() == ERROR_ALREADY_EXISTS)
	{
		if (hMutex) CloseHandle(hMutex);  // 釋放資源
		
		MessageBox(NULL, L"XONE is already runing!", L"", 0);
		return -1;
	}

	getchar();
	return 0;
}

二、自動隱藏控制檯

1、預處理指令

#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")

在程序的前面添加這條預處理指定,就不會顯示控制檯。

2、WinMain:Win32程序

int XMain()
{
	MessageBox(NULL, L"In this process!", L"", 0);

	cout << "In this process!\n" << endl;

	getchar();
	return 0;
}

int main()
{
	return XMain();
}

int WINAPI WinMain(HINSTANCE h, HINSTANCE p, LPSTR cmd, int s)
{
	return XMain();
}

採用自定義一個新的XMain函數,並且生命兩個main類,一個是控制檯的main函數,一個是Win32的WinMain函數

通過兩個不同的main函數來調用公用的XMain函數,實現了在Win32程序中隱藏控制檯,在控制檯程序中顯示控制檯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章