#include < fstream >
#include "tlhelp32.h"

BOOL CSpedd_testDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO: 特別な初期化を行う時はこの場所に追加してください。
	m_dwBefore = 0;
	SetTimer(1, 1000, NULL);	
	return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

void CSpedd_testDlg::OnButton2() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
	// 空きメモリサイズ

/*
	// 構造体
	typedef struct _MEMORYSTATUSEX {
	  DWORD dwLength;                     // 構造体のサイズ
	  DWORD dwMemoryLoad;                 // メモリの使用率(%)
	  DWORDLONG ullTotalPhys;             // 物理メモリの搭載容量
	  DWORDLONG ullAvailPhys;             // 物理メモリの空き容量
	  DWORDLONG ullTotalPageFile;         // ページングの搭載容量
	  DWORDLONG ullAvailPageFile;         // ページングの空き容量
	  DWORDLONG ullTotalVirtual;          // 仮想メモリの搭載容量
	  DWORDLONG ullAvailVirtual;          // 仮想メモリの空き容量
	  DWORDLONG ullAvailExtendedVirtual;  // 仮想メモリの拡張空き容量
	} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;

	// プロトタイプ宣言
	BOOL GlobalMemoryStatusEx(
	  LPMEMORYSTATUSEX lpBuffer  // メモリステータスの構造体
	);
*/
	// 情報収集
	//MEMORYSTATUS msex = { sizeof(MEMORYSTATUS) };
	MEMORYSTATUS msex;
	GlobalMemoryStatus( &msex );

	// 物理メモリの使用容量
	DWORD dwUsed = (msex.dwTotalPhys - msex.dwAvailPhys);
	// 物理メモリの空き容量
	DWORD dwFree = (msex.dwAvailPhys);
	// 物理メモリの搭載容量
	DWORD dwSize = (msex.dwTotalPhys);
	
	CTime cTime = CTime::GetCurrentTime();           // 現在時刻
	CString str = cTime.Format("%Y/%m/%d %H:%M:%S");

	CString s;
	s.Format("%lu : %lu : %lu\n", dwUsed>>=20, dwFree>>=20, dwSize>>=20);
	str += " " + s;

	DWORD sa=0;
	if(m_dwBefore == 0) m_dwBefore = dwFree;
	if(m_dwBefore >= dwFree){
		sa=m_dwBefore - dwFree;
	}
	else{
		sa=dwFree - m_dwBefore;
	}
	if(sa > 0){
		TRACE(str);
		std::ofstream ofs( "c:\\test\\testlog.txt", std::ios::out | std::ios::app );


		ofs << str.GetBuffer(str.GetLength())
			//<< std::endl
			;
			m_dwBefore = dwFree;
	}
}

void CSpedd_testDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
	OnButton2();	
	CDialog::OnTimer(nIDEvent);
}

void CSpedd_testDlg::OnButton3() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
	
	HANDLE hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) ;
	PROCESSENTRY32 pe32 ;
	pe32.dwSize = sizeof pe32 ;

	if (Process32First (hSnapshot, &pe32))
	{
		do {TRACE ("プロセスID=%ld, ファイル名=%s\n", pe32.th32ProcessID, pe32.szExeFile) ;}
		while (Process32Next (hSnapshot, &pe32)) ;
	}
	CloseHandle (hSnapshot) ;
}