Ejemplo n.º 1
0
// This function should be called once during program execution.
void SysLogMachineCaps()
{
	if ( !PCSX2_isReleaseVersion )
	{
		Console.WriteLn(Color_StrongGreen, "PCSX2 %u.%u.%u.r%d %s - compiled on " __DATE__,
			PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo,
			SVN_REV, SVN_MODS ? "(modded)" : ""
			);
	}
	else { // shorter release version string
		Console.WriteLn(Color_StrongGreen, "PCSX2 %u.%u.%u.r%d - compiled on " __DATE__,
			PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo,
			SVN_REV );
	}

	Console.WriteLn( "Savestate version: 0x%x", g_SaveVersion);
	Console.Newline();

	Console.WriteLn( Color_StrongBlack, "Host Machine Init:" );

	Console.Indent().WriteLn(
		L"Operating System =  %s\n"
		L"Physical RAM     =  %u MB",

		GetOSVersionString().c_str(),
		(u32)(GetPhysicalMemory() / _1mb)
	);

	u32 speed = x86caps.CalculateMHz();

	Console.Indent().WriteLn(
		L"CPU name         =  %s\n"
		L"Vendor/Model     =  %s (stepping %02X)\n"
		L"CPU speed        =  %u.%03u ghz (%u logical thread%s)\n"
		L"x86PType         =  %s\n"
		L"x86Flags         =  %08x %08x\n"
		L"x86EFlags        =  %08x",
			fromUTF8( x86caps.FamilyName ).Trim().Trim(false).c_str(),
			fromUTF8( x86caps.VendorName ).c_str(), x86caps.StepID,
			speed / 1000, speed % 1000,
			x86caps.LogicalCores, (x86caps.LogicalCores==1) ? L"" : L"s",
			x86caps.GetTypeName().c_str(),
			x86caps.Flags, x86caps.Flags2,
			x86caps.EFlags
	);

	Console.Newline();

	wxArrayString features[2];	// 2 lines, for readability!

	if( x86caps.hasMultimediaExtensions )			features[0].Add( L"MMX" );
	if( x86caps.hasStreamingSIMDExtensions )		features[0].Add( L"SSE" );
	if( x86caps.hasStreamingSIMD2Extensions )		features[0].Add( L"SSE2" );
	if( x86caps.hasStreamingSIMD3Extensions )		features[0].Add( L"SSE3" );
	if( x86caps.hasSupplementalStreamingSIMD3Extensions ) features[0].Add( L"SSSE3" );
	if( x86caps.hasStreamingSIMD4Extensions )		features[0].Add( L"SSE4.1" );
	if( x86caps.hasStreamingSIMD4Extensions2 )		features[0].Add( L"SSE4.2" );
	if( x86caps.hasAVX )							features[0].Add( L"AVX" );
	if( x86caps.hasFMA)								features[0].Add( L"FMA" );

	if( x86caps.hasMultimediaExtensionsExt )		features[1].Add( L"MMX2  " );
	if( x86caps.has3DNOWInstructionExtensions )		features[1].Add( L"3DNOW " );
	if( x86caps.has3DNOWInstructionExtensionsExt )	features[1].Add( L"3DNOW2" );
	if( x86caps.hasStreamingSIMD4ExtensionsA )		features[1].Add( L"SSE4a " );

	const wxString result[2] =
	{
		JoinString( features[0], L".. " ),
		JoinString( features[1], L".. " )
	};

	Console.WriteLn( Color_StrongBlack,	L"x86 Features Detected:" );
	Console.Indent().WriteLn( result[0] + (result[1].IsEmpty() ? L"" : (L"\n" + result[1])) );
	Console.Newline();
}
Ejemplo n.º 2
0
int wmain(int argc, wchar_t *argv[])
{
    //
    // 打印当前操作系统的名字.
    //

    wchar_t szName[512];
    if (GetOSName(szName, ARRAYSIZE(szName)))
    {
		setlocale(LC_CTYPE, ""); 
        wprintf(L"当前的操作系统: %s\n", szName);
    }
    else
    {

        wprintf(L"无法获得操作系统名字\n");
    }

    //
    // 打印当前操作系统的版本字符串.
    //

    wchar_t szVersionString[512];
    if (GetOSVersionString(szVersionString, ARRAYSIZE(szVersionString)))
    {
        wprintf(L"版本: %s\n", szVersionString);
    }
    else
    {
        wprintf(L"无法获得操作系统版本\n");
    }

    //
    // 确定当前操作系统是否是64位.
    //

    BOOL f64bitOS = Is64BitOS();
    wprintf(L"当前的操作系统是 %s64位\n", f64bitOS ? L"" : L"不是");

    //
    // 确定当前的进程是否是64位的. 
    //

    BOOL f64bitProc = Is64BitProcess();
    wprintf(L"当前的进程是 %s64位\n", f64bitProc ? L"" : L"不是 ");

    //
    // 确定运行在系统中的任意一个进程是否是64位进程.
    //

    if (argc > 1)
    {
        // 如果一个进程ID在命令行中被指定,则获取进程ID,并打开进程句柄.
        DWORD dwProcessId = _wtoi(argv[1]);
        if (dwProcessId != 0 /*conversion succeeds*/)
        {
            HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,
                dwProcessId);
            if (hProcess != NULL)
            {
                //  检测指定进程是否是64位.
                BOOL f64bitProc = Is64BitProcess(hProcess);
                wprintf(L"进程 %d 是 %s64-bit\n", dwProcessId, 
                    f64bitProc ? L"" : L"不是 ");

                CloseHandle(hProcess);
            }
            else
            {
                wprintf(L"打开进程(%d) 失败 w/err 0x%08lx\n", 
                    dwProcessId, GetLastError());
            }
        }
        else
        {
            wprintf(L"无效的进程 ID: %s\n", argv[1]);
        }
    }

    return 0;
}