Я хочу спросить, где я могу найти полный список устаревших API, потому что я больше не хочу его использовать.
EDIT: я не спрашиваю, что использовать вместо GetVersionEx
, я прошу полный список устаревших API.
Я хочу спросить, где я могу найти полный список устаревших API, потому что я больше не хочу его использовать.
EDIT: я не спрашиваю, что использовать вместо GetVersionEx
, я прошу полный список устаревших API.
Корпорация Майкрософт описала изменения в разделе изменения версии операционной системы в Windows. 8.1 и Windows Server 2012 R2. В левой части статьи вы можете перейти к другим вопросам, связанным с Совместимость клиента и сервера Windows 8.1 и Windows Server 2012 R2.
Поведение, которое вы испытываете, следующее:
В Windows 8.1 API GetVersion(Ex) объявлены устаревшими. Это означает, что, хотя вы по-прежнему можете вызывать API, если ваше приложение не предназначено специально для Windows 8.1, вы получите версию Windows 8 (6.2.0.0).
GetVersion(Ex)
устарела?
- person ST3; 22.10.2013
GetVersionEx
), вы можете прочитать, перейдя по предоставленной ссылке.
- person Martin Liversage; 22.10.2013
GetVersion(Ex)
API.
- person ST3; 22.10.2013
Кто-то на другом форуме указал мне на этот подход.
Включите GUID ОС Windows 8.1 в файл манифеста приложения
ваш .manifest должен включать Windows 8.1. и выглядеть так.
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--This Id value indicates the application supports Windows 8.1 functionality-->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
</application>
Одна проблема с этим подходом заключается в том, что ваши старые двоичные файлы всегда будут отображать неправильную версию Windows в Windows 8.1 и более поздних версиях Windows.
Другая проблема с этим подходом заключается в том, что GetVersionEx по-прежнему устарел, поэтому вы не сможете ориентироваться на набор инструментов платформы Visual Studio 2013. Вы должны установить для своего набора инструментов платформы значение Visual Studio 2012 или более ранней версии.
Обновление: на самом деле я вспомнил, что вы можете отключить это, используя что-то вроде этого.
#pragma warning (disable : 4996)
versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
POSVERSIONINFO pVersionInfo = (POSVERSIONINFO)&versionInfo;
if (::GetVersionEx(pVersionInfo))
{
if (6 == versionInfo.dwMajorVersion && 3 == versionInfo.dwMinorVersion)
{
wcout << _T("Windows 8.1 Detected") << endl;
}
else if (6 == versionInfo.dwMajorVersion && 2 == versionInfo.dwMinorVersion)
{
wcout << _T("Windows 8.0 Detected") << endl;
}
}
#pragma warning (default : 4996)
вы также можете использовать API NetWkstaGetInfo для получения версии локальной машины.
bool GetWindowsVersion(DWORD& major, DWORD& minor)
{
LPBYTE pinfoRawData;
if (NERR_Success == NetWkstaGetInfo(NULL, 100, &pinfoRawData))
{
WKSTA_INFO_100 * pworkstationInfo = (WKSTA_INFO_100 *)pinfoRawData;
major = pworkstationInfo->wki100_ver_major;
minor = pworkstationInfo->wki100_ver_minor;
::NetApiBufferFree(pinfoRawData);
return true;
}
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD major = 0;
DWORD minor = 0;
if (GetWindowsVersion(major, minor))
{
wcout << _T("Major:") << major << _T("Minor:") << minor << endl;
}
return 0;
}
Все, что я сказал, я написал два примера кода, чтобы получить версию Windows без использования API GetVersionEx или GetVersion. Я разместил их внизу страницы. Проблема в том, что для выполнения GetVersionEx API требуется всего около 10 микросекунд, в то время как для выполнения моих образцов кода требуется более 10-50 миллисекунд.
Получение версии Windows VerifyVersionInfo API
DWORD
, _TCHAR
, LPBYTE
, NERR_Success
, WKSTA_INFO_100
, а также <<
, ->
и ::
.
- person vapcguy; 18.10.2017
Согласитесь с другими в этом. если вы начинаете с нуля, в большинстве случаев не стоит поддерживать TCHAR. Если вы создаете совершенно новое приложение, вы хотите, чтобы оно работало гладко, по крайней мере, со строками UTF16 (например, .NET и java). Пункт практичности 1: вы не собираетесь создавать несколько версий своего приложения на основе того, какой препроцессор кодирования определен. было действительно достаточно сложно поддерживать вилку x64 против X86. Пункт практичности 2: Подавляющее большинство API Windows фактически по умолчанию используют версию W API. например, вызов SetWindowTextA просто вызовет ту же реализацию, что и SetWindowTextW.
_DEPRECATE
. - person Hans Passant   schedule 22.10.2013