[VC++ & IT] [English]

VC++による指定されたアプリケーション名(拡張子を含む)の全てのウィンドウを完全に閉じる例

PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);

HANDLE hSnap;

int i = 0;
BOOL ExistFlag;
do{
	BOOL bCmp;
	do{
		hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
		bCmp = FALSE;
		if (hSnap != INVALID_HANDLE_VALUE){
			BOOL b = Process32First(hSnap, &pe), OnceCFlag = TRUE;
			while (b){
				b = Process32Next(hSnap, &pe);
				if (!strcmp(pe.szExeFile, buf)){
					bCmp = TRUE;
					::SendMessage(GetWindowHandle(pe.th32ProcessID), WM_CLOSE, 0, 0);
					if (OnceCFlag){
						i++;
						OnceCFlag = FALSE;
					}
				}
			}

			CloseHandle(hSnap);
		}
	}while (bCmp && i < 100);
	
	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hSnap != INVALID_HANDLE_VALUE){
		BOOL b = Process32First(hSnap, &pe);
		ExistFlag = FALSE;
		while (b){
			b = Process32Next(hSnap, &pe);
			if (!strcmp(pe.szExeFile, buf))
				ExistFlag = TRUE;
		}

		CloseHandle(hSnap);
	}
}while (ExistFlag && i < 100);

Since 2014.5.22