int CAboutDlg::GetWindowsVersion(LPSTR strVersion) { TCHAR lpszSysPath[512]; /* address of buffer for Windows directory */ GetWindowsDirectory(lpszSysPath, 512); lstrcat(lpszSysPath,_T("\\system\\user.exe")); BYTE abData[512]; DWORD handle; DWORD dwSize; typedef struct tagLANGANDCP { WORD wLanguage; WORD wCodePage; } LANGANDCP; LANGANDCP FAR *lpBuffer; // holds lang and codepage dwSize = GetFileVersionInfoSize(lpszSysPath, &handle); #ifdef _DEBUG if(!dwSize) return 0; #endif GetFileVersionInfo(lpszSysPath, handle, dwSize, abData); VerQueryValue(abData, _T("\\VarFileInfo\\Translation"), (VOID FAR* FAR*)&lpBuffer, (UINT FAR *)&dwSize); VerLanguageName (lpBuffer->wLanguage, strVersion, 512); return LOBYTE(LOWORD(GetVersion())); // windows version greater than 3.x? }
// Translate a language code (e.g. 0x0407) into the text // representation (e.g. "Deutsch (Deutschland)"). UnicodeString __fastcall TVersionInfo::TranslateVersionLanguageName(DWORD Language) { const int GrowthConstant = 50; wchar_t* LanguageStringBuffer; DWORD BufferSize; DWORD ApiResult; UnicodeString ResultString; BufferSize = GrowthConstant; LanguageStringBuffer = NULL; try { while (true) { delete[] LanguageStringBuffer; LanguageStringBuffer = new wchar_t[BufferSize]; // VerLanguageName returns the MAX of length of bytes required // or bytes copied to the string buffer. ApiResult = VerLanguageName(Language, LanguageStringBuffer, BufferSize); if (ApiResult == 0) { // If there is an error (signalled by ApiResult == 0), // return an empty string. The Windows API documentation // does not indicate that there is additional error // information that would allow a call to RaiseLastWin32Error() // to yield a meaningful result. ResultString = ""; break; } else { if (ApiResult > BufferSize-1) { // Buffer was too small for language name. // Increase buffer size and try again. BufferSize = BufferSize + GrowthConstant; } else { // Successfully retrieved the name... ResultString = LanguageStringBuffer; // ... so we now may leave the loop. break; } } } } __finally { delete[] LanguageStringBuffer; } return ResultString; }
String VarFileInfoTranslation::getLanguage() const { TCHAR langstr[100]; if(VerLanguageName(languageID,langstr,ARRAYSIZE(langstr)) == 0) { return _T("?"); } else { return langstr; } }
CString CFileVersion::GetProductLanguage() { CString strLanguage; DWORD nSize = 256; TCHAR lpData[256]; DWORD nResult; nResult = VerLanguageName(m_dwLangCharset, lpData, nSize); if ((nResult != 0) && (nResult < nSize - 1)) strLanguage = (LPCTSTR)lpData; return strLanguage; }
//=========================================================================== void GetVersionOfFile (char *pszAppName, // file char *pszVerBuff, // receives version int iVerBuffLen, // size of buffer char *pszLangBuff, // receives language int iLangBuffLen) // size of buffer { DWORD dwScratch; DWORD * pdwLangChar; DWORD dwInfSize ; UINT uSize; BYTE * pbyInfBuff; char szVersion [32]; char szResource [80]; char * pszVersion = szVersion; dwInfSize = GetFileVersionInfoSize (pszAppName, &dwScratch); if ( dwInfSize > 0) { pbyInfBuff = new BYTE [dwInfSize]; memset (pbyInfBuff, 0, dwInfSize); if ( pbyInfBuff > 0 ) { if (GetFileVersionInfo (pszAppName, 0, dwInfSize, pbyInfBuff)) { if ( VerQueryValue (pbyInfBuff, "\\VarFileInfo\\Translation", (void**)(&pdwLangChar), &uSize) ) { if ( VerLanguageName ( LOWORD (*pdwLangChar), szResource, sizeof(szResource)) ) if ( pszLangBuff != NULL && iLangBuffLen != 0 ) strncpy (pszLangBuff, szResource, iLangBuffLen); wsprintf (szResource, "\\StringFileInfo\\%04X%04X\\FileVersion", LOWORD (*pdwLangChar), HIWORD (*pdwLangChar)); if ( VerQueryValue (pbyInfBuff, szResource, (void**)(&pszVersion), &uSize)) strncpy (pszVerBuff, pszVersion, iVerBuffLen-1); } } delete [] pbyInfBuff; } } }
void OS::GetLanguage(char** szLanguage) { HKL *hkl; int count = GetKeyboardLayoutList(0, 0); if (0 != count) { hkl = (HKL*)LocalAlloc(LPTR, count); if (NULL != hkl) { GetKeyboardLayoutList(count, hkl); //szLanguage = (char*)VirtualAlloc(0, count, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (NULL != szLanguage) { for (int i = 0; count != i; ++i) { szLanguage[i] = (char*)VirtualAlloc(0, MAX_LANG_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); VerLanguageName(LOWORD(hkl[i]), szLanguage[i], MAX_LANG_SIZE); } } } } //LocalFree(hkl); }
void CLocaleScanner::ScanLocale () { CLogFile log; log.Write("CLocaleScanner::ScanLocale Start" ,true); try { // Retirieve the information about the locale. TCHAR chPage[7]; TCHAR szCurrency[7]; TCHAR szVal[MAX_PATH]; TCHAR szFormatString[100]; // Get currently ised code page. ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, chPage, 7); m_iCodePage = atoi (chPage); // Get default OEM code page. ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_IDEFAULTCODEPAGE, chPage, 7); m_iOEMCodePage = atoi (chPage); // Get country name in english. ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SENGCOUNTRY , szVal, MAX_PATH); m_strCountry = szVal; // Get country code ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ICOUNTRY , chPage, 7); m_iCountryCode = atoi (chPage); // Get language name. ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SENGLANGUAGE , szVal, MAX_PATH); m_strLanguage = szVal; // Get TimeFormat String ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT , szFormatString, 100); m_strTimeFormat = szFormatString; // Get Date Format String ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SLONGDATE , szFormatString, 100); m_strDateFormat = szFormatString; // Get the string used for local currency. ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SCURRENCY, szCurrency, 7); m_strCurrency = szCurrency; // Get time format specifier i.e. 12 hour (AM/PM) or 24 hour format // is used to indicate time. ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szVal, 3); if (atoi (szVal) == 0) { m_strTimeFormatSpecifier = "AM / PM 12-hour format"; } else { m_strTimeFormatSpecifier = "24-hour format"; } // Get calendar type ::GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ICALENDARTYPE, szVal, 3); switch (atoi (szVal)) { case 1: m_strCalendarType = ("Gregorian - Localized"); break; case 2: m_strCalendarType = ("Gregorian - English strings always"); break; case 3: m_strCalendarType = ("Year of the Emperor - Japan"); break; case 4: m_strCalendarType = ("Year of Taiwan"); break; case 5: m_strCalendarType = ("Tangun Era - Korea"); break; case 6: m_strCalendarType = ("Hijri - Arabic lunar"); break; case 7: m_strCalendarType = ("Thai"); break; case 8: m_strCalendarType = ("Hebrew - Lunar"); break; case 9: m_strCalendarType = ("Gregorian Middle East French"); break; case 10: m_strCalendarType = ("Gregorian Arabic"); break; case 11: m_strCalendarType = ("Gregorian Transliterated English"); break; case 12: m_strCalendarType = ("Gregorian Transliterated French"); break; default: m_strCalendarType = ("Unknown"); } LANGID langId; // Get the ID of the language identifier. langId = ::GetSystemDefaultLangID (); DWORD dwSize, dwError, dwReturnedSize; char szLanguage[MAX_PATH]; // Get the string for the language identifier. dwSize = MAX_PATH; dwReturnedSize = VerLanguageName (langId, szLanguage, dwSize); if (dwReturnedSize <= dwSize) { m_strLocaleLocalLanguage = szLanguage; } // Get time zone information. TIME_ZONE_INFORMATION info; TCHAR szTimezone[31]; dwError = ::GetTimeZoneInformation (&info); if (TIME_ZONE_ID_INVALID != dwError) { wsprintf(szTimezone, "%S", info.StandardName); m_strLocaleTimeZone = szTimezone; } m_bDetected = TRUE; } catch (CException *pEx) { throw pEx; } log.Write("CLocaleScanner::ScanLocale End" ,true); }
void print_version_info(char *progname) { DWORD dummy, infosize; if (!(infosize = GetFileVersionInfoSize(progname, &dummy))) { puts("(no version info)"); return; } else { void *info = malloc(infosize); VS_FIXEDFILEINFO *fixed_info; UINT fixed_len; if (!info) { puts("(error on malloc"); return; } GetFileVersionInfo(progname, 0, infosize, info); VerQueryValue(info, "\\", &fixed_info, &fixed_len); /* File Version */ printf("File Version: %d.%d.%d.%d\n", HIWORD(fixed_info->dwFileVersionMS), LOWORD(fixed_info->dwFileVersionMS), HIWORD(fixed_info->dwFileVersionLS), LOWORD(fixed_info->dwFileVersionLS)); /* Product Version */ printf("Product Version: %d.%d.%d.%d\n", HIWORD(fixed_info->dwProductVersionMS), LOWORD(fixed_info->dwProductVersionMS), HIWORD(fixed_info->dwProductVersionLS), LOWORD(fixed_info->dwProductVersionLS)); { /* File Flags */ DWORD flags = fixed_info->dwFileFlags & fixed_info->dwFileFlagsMask; fputs("Flags: ", stdout); if (!flags) fputs("(none)", stdout); if (flags & VS_FF_DEBUG) fputs("Debug ", stdout); if (flags & VS_FF_PRERELEASE) fputs("Prerelease ", stdout); if (flags & VS_FF_PATCHED) fputs("Patched ", stdout); if (flags & VS_FF_PRIVATEBUILD) fputs("PrivateBuild ", stdout); if (flags & VS_FF_INFOINFERRED) fputs("InfoInferred ", stdout); if (flags & VS_FF_SPECIALBUILD) fputs("SpecialBuild ", stdout); putchar('\n'); } { /* File OS. */ fputs("OS: ", stdout); switch (LOWORD(fixed_info->dwFileOS)) { case VOS__WINDOWS16: fputs("16-Bit Windows", stdout); break; case VOS__PM16: fputs("16-Bit Presentation Manager", stdout); break; case VOS__PM32: fputs("32-Bit Presentation Manager", stdout); break; case VOS__WINDOWS32: fputs("Win32", stdout); break; default: fputs("(unknown)", stdout); break; } fputs(" on ", stdout); switch (MAKELONG(0, HIWORD(fixed_info->dwFileOS))) { case VOS_DOS: puts("MS-DOS"); break; case VOS_OS216: puts("16-Bit OS/2"); break; case VOS_OS232: puts("32-Bit OS/2"); break; case VOS_NT: puts("NT"); break; default: puts("(unknown)"); break; } } /* file type */ fputs("Type: ", stdout); switch (fixed_info->dwFileType) { case VFT_APP: puts("Exe"); break; case VFT_DLL: puts("DLL"); break; case VFT_DRV: switch (fixed_info->dwFileSubtype) { case VFT2_DRV_COMM: puts("driver (serial)"); break; case VFT2_DRV_PRINTER: puts("driver (printer)"); break; case VFT2_DRV_KEYBOARD: puts("driver (keyboard)"); break; case VFT2_DRV_LANGUAGE: puts("driver (language)"); break; case VFT2_DRV_DISPLAY: puts("driver (screen)"); break; case VFT2_DRV_MOUSE: puts("driver (mouse)"); break; case VFT2_DRV_NETWORK: puts("driver (network)"); break; case VFT2_DRV_SYSTEM: puts("driver (system)"); break; case VFT2_DRV_INSTALLABLE: puts("driver (installable)"); break; case VFT2_DRV_SOUND: puts("driver (sound)"); break; case VFT2_UNKNOWN: default: puts("driver (unknown)"); break; } break; case VFT_FONT: switch (fixed_info->dwFileSubtype) { case VFT2_FONT_RASTER: puts("font (raster)"); break; case VFT2_FONT_VECTOR: puts("font (vector)"); break; case VFT2_FONT_TRUETYPE: puts("font (truetype)"); break; case VFT2_UNKNOWN: default: puts("font (unknown)"); break; } break; case VFT_VXD: printf("virtual device (VxD), device id == %ld\n", fixed_info->dwFileSubtype); break; case VFT_STATIC_LIB: puts("static Lib"); break; case VFT_UNKNOWN: default: puts("(unknown)"); break; } /* languages and strings */ { LPDWORD langs; UINT len, i; char buffer[MAX_PATH]; VerQueryValue(info, "\\VarFileInfo\\Translation", &langs, &len); for (i = 0; i < len; i += sizeof(*langs), langs++) { /* Get the string name for the language number. */ VerLanguageName(LOWORD(*langs), buffer, sizeof(buffer)); fputs("- ", stdout); puts(buffer); ShowStrings(info, *langs); } } free(info); } }
BOOL PrintFileHeader( FILE * fp ) { TCHAR str[ 1024 ]; _fputts( APP_NAME, fp ); #ifdef _UNICODE _fputts( TEXT( " (Unicode)\r\n" ), fp ); #else _fputts( TEXT( " (ANSI)\r\n" ), fp ); #endif SYSTEMTIME st; GetLocalTime( &st ); TIME_ZONE_INFORMATION tzi; GetTimeZoneInformation( &tzi ); int tz = abs( (int) tzi.Bias ); int tz_sign = ( tzi.Bias < 0 ) ? ( +1 ) : ( -1 ) ; // if Bias is negative, TZ is positive int tz_h = tz / 60; int tz_m = tz - tz_h * 60; wsprintf( str, TEXT( " %4d-%02d-%02d %02d:%02d:%02d.%03d%s%02d:%02d\r\n\r\n" ), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, tz_sign > 0 ? TEXT( "+" ) : TEXT( "-" ), tz_h, tz_m ); _fputts( str, fp ); OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); GetVersionEx( &osvi ); TCHAR tmpstr[ 256 ] = TEXT( "Unknown OS" ); if( osvi.dwMajorVersion == 4UL ) { if( osvi.dwMinorVersion == 0UL ) lstrcpy( tmpstr, TEXT( "Windows NT 4.0" ) ); else if( osvi.dwMinorVersion == 90UL ) lstrcpy( tmpstr, TEXT( "Windows Me" ) ); } else if( osvi.dwMajorVersion == 5UL ) { if( osvi.dwMinorVersion == 0UL ) lstrcpy( tmpstr, TEXT( "Windows 2000" ) ); else if( osvi.dwMinorVersion == 1UL ) lstrcpy( tmpstr, TEXT( "Windows XP" ) ); else if( osvi.dwMinorVersion == 2UL ) lstrcpy( tmpstr, TEXT( "Windows Server 2003 R2, Windows Server 2003, or Windows XP Professional x64 Edition" ) ); } else if( osvi.dwMajorVersion == 6UL ) { if( osvi.dwMinorVersion == 0UL ) lstrcpy( tmpstr, _T( "Windows Vista or Windows Server \"Longhorn\"" ) ); } wsprintf( str, TEXT( "%s ( OS Version: %lu.%lu Build %lu, %s )\r\n" ), tmpstr, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber, osvi.szCSDVersion ); _fputts( str, fp ); LANGID lang = GetSystemDefaultLangID(); VerLanguageName( (DWORD) lang, tmpstr, 255UL ); wsprintf( str, TEXT( " System Language: %u (%s)\r\n" ), lang, tmpstr ); _fputts( str, fp ); LCID lcid = GetSystemDefaultLCID(); GetLocaleInfo( lcid, LOCALE_SNATIVELANGNAME, tmpstr, 255UL ); wsprintf( str, TEXT( " System Locale: %lu (%s)\r\n" ), lcid, tmpstr ); _fputts( str, fp ); lang = GetUserDefaultLangID(); VerLanguageName( (DWORD) lang, tmpstr, 255UL ); wsprintf( str, TEXT( " User Language: %u (%s)\r\n" ), lang, tmpstr ); _fputts( str, fp ); lcid = GetUserDefaultLCID(); GetLocaleInfo( lcid, LOCALE_SNATIVELANGNAME, tmpstr, 255UL ); wsprintf( str, TEXT( " User Locale: %lu (%s)\r\n" ), lcid, tmpstr ); _fputts( str, fp ); _fputts( TEXT( "\r\n" ), fp ); return TRUE; }
/*=========================================================================== * ReadContinuousLogData *--------------------------------------------------------------------------- * Description: Puts the node in continuous mode, reads the sensor data and * prints to the screen and logs data to user file until the user * interrupts. * * Return: HANDLE - handle to the opened comport *===========================================================================*/ void ReadContinuousLogData(int portNum) { int iCount = 0; BOOL bStopContinuous = FALSE; DWORD dwcharsRead = 0; I3dmgx3Set Record; BYTE cmd_return; int Curs_posY = 0; int Curs_posX = 0; int status = 0; int error_record = 0; int valid_check = 0; int valid_count = 0; char consoleBuff[60] = {0}; long valid_rec = 0; unsigned char error_cmd; char ComLogFile[256]; FILE *m_logFile; int LogFlag = 0; int error_count = 0; int errorCode =0, i=0; char fw[20] = {0}; char sn[20] = {0}; char mListSep[4]; char mDecSep[4]; LANGID langId; char szLanguage[256]; /*MAX_PATH]; */ char idchar[] = {'\x02', '\x00', '\x01', '\x03', '\x04'}; int m_timerconst = 62500; unsigned long AA_Time_Stamp=0; unsigned long AA_s_prev =0; float AA_convert = 0.0; float AA_prev = 0.0; struct __timeb64 timebuffer; char *timeline; _ftime64( &timebuffer ); timeline = _ctime64( & ( timebuffer.time ) ); while (LogFlag != 1){ printf("Enter Name of LogFile to use:"); scanf("%s", &ComLogFile); // 255); printf("logFile %s\n", ComLogFile); if ( ( m_logFile= fopen( ComLogFile, "w")) == NULL){ printf("File: %s not opened\n", ComLogFile); if(++error_count > 2) return; }else LogFlag = 1; } fprintf(m_logFile, "[SESSION START TAG]\n"); fprintf(m_logFile, "Session Start Time:%.19s.%hu \n", timeline, timebuffer.millitm ); fprintf(m_logFile, "Time Source: HOST\n"); GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SLIST,mListSep,4); fprintf(m_logFile, "List Separator: %s\n", mListSep); GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SDECIMAL,mDecSep,4); fprintf(m_logFile, "Decimal Separator: %s\n", mDecSep); langId = GetSystemDefaultLangID (); i = VerLanguageName (langId, szLanguage, 256); //dwSize = MAX_PATH; fprintf(m_logFile, "Language: %s\n", szLanguage); while(valid_check == 0) { errorCode = i3dmgx3_getFirmwareVersion(portNum, &fw[0]); if (errorCode < 0){ purge_port(portNum); printf("Firmware Error %d\n",errorCode); if (valid_count++ > 6) { printf("Please Halt Current Data Display and Retry, count %d\n", valid_count); return; } }else if (errorCode >= 0){ valid_check = 1; } } /*------------------------------------------------------------------ * 0xEA get serial information number, model and options (as string) *-----------------------------------------------------------------*/ valid_count =0; for ( i=0; i<4; i++){ //cycles through the valid device options errorCode = i3dmgx3_getDeviceIdentiy(portNum, idchar[i], &sn[0]); if (errorCode < 0){ purge_port(portNum); i--; if (valid_count++ >6){ printf("Error Read Device Identity: %s\n", explainError(errorCode)); } } else{ switch( i ) { case 0: fprintf(m_logFile, "Device Name: %s\n",sn); break; case 1: fprintf(m_logFile, "Device Model: %s\n",sn); break; case 2: fprintf(m_logFile, "Device FirmWare Version: %s\n", fw); fprintf(m_logFile, "Device Serial Number: %s\n", sn); break; case 3: fprintf(m_logFile, "Device Options: %s\n", sn); break; case 4: default: break; } } } fprintf(m_logFile, "Command C2\n[DATA START TAG]\n\t Time%s Accel X%s Accel Y%s Accel Z%s AngRate X%s AngRate Y%s AngRate Z%s Ticks\n", mListSep, mListSep, mListSep, mListSep, mListSep, mListSep, mListSep); //put the node in continuous mode status =SetContinuousMode(portNum, 0xC2); printf("setcontinuous is %d", status); //set up the output for the data printf("\n\n"); printf("Reading streaming data (hit s to Stop streaming).\n"); printf("C2___________________________Acceleration_______________________________\n"); printf(" X Y Z \n"); /* acceleration values go here */ printf("\n\n\n"); printf("C2____________________________Angular_Rate______________________________\n"); printf(" X Y Z \n"); /* angle rate values go here */ getConXY(&Curs_posX, &Curs_posY); printf("\n\n\n\n"); //continue until the user hits the <s>top key while(!bStopContinuous) { if(ReadNextRecord(portNum, &Record, &cmd_return) != SUCCESS) error_record++; if (cmd_return == 0xC2){ if (AA_s_prev == 0){ fprintf(m_logFile, "\t 0.00"); AA_s_prev = Record.timer; //AA_Time_Stamp; } else { AA_convert = ((float)(Record.timer - AA_s_prev)/m_timerconst); //19660800); AA_s_prev = Record.timer; //AA_Time_Stamp; AA_prev = AA_prev + AA_convert; fprintf(m_logFile, "\t%6.2f", AA_prev); } //move to the acceleration position and print the data sprintf(consoleBuff, "\t%2.6f\t\t%2.6f\t\t%2.6f", Record.setA[0], Record.setA[1], Record.setA[2]); fprintf(m_logFile, "%s %2.6f%s %2.6f%s %2.6f%s ", mListSep, Record.setA[0],mListSep, Record.setA[1], mListSep, Record.setA[2], mListSep); setConXY(Curs_posX, Curs_posY -5, &consoleBuff[0]); sprintf(consoleBuff, "\t%2.6f\t\t%2.6f\t\t%2.6f", Record.setB[0], Record.setB[1], Record.setB[2]); fprintf(m_logFile, "%2.6f%s %2.6f%s %2.6f%s %u\n", Record.setB[0], mListSep, Record.setB[1], mListSep, Record.setB[2], mListSep, Record.timer); setConXY(Curs_posX, Curs_posY, &consoleBuff[0]); valid_rec++; }else if (cmd_return != 0xc4){ if((cmd_return == 0xCB || cmd_return == 0xD3) && error_record == 0) error_cmd = cmd_return; else error_record++; } //check for a key every 50 iterations if(iCount++ > 50) { int ch = 0; if(ReadCharNoReturn(&ch)){ bStopContinuous = (ch == 's' || ch == 'S'); } //reset the counter iCount = 0; } } printf("\n\n\nStopping Continuous Mode..."); StopContinuousMode(portNum); printf("stopped.\n"); fclose(m_logFile); if (error_record > 0) printf("Number of records received in error were %d and received successfully %d\n", error_record, valid_rec); else printf("All %d records read successfully.\n", valid_rec); }