有时我们开发的程序在Wind7或Win8下面无法启动,必须将之设置成以兼容模式运行后才能启动。设置以兼容模式运行,可以手动修改程序的右键属性,将之设置成以兼容模式运行;但是对于开发出来的商用软件,让用户去手动设置不太现实,也不合适,所以需要我们通过代码将程序自动设置成以兼容模式运行。那么如何通过代码进行设置呢?
我们可以通过修改注册表来达到设置的目的。在HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers路径下,添加这样的项:"C:\Program Files\Test\Test.exe"="WINXP",其中"C:\Program Files\Test\Test.exe"是目标程序的安装路径,"WINXP"则表示以何种系统方式运行。各系统对应的字符串如下所示:(已经在Win8下通过手动设置以兼容性运行后查看注册表中对应字串进行了下列字串进行了验证,准确无误)
Windows 95 对应WIN95将程序设置成兼容模式的代码如下所示:(在Win8下将程序设置成以Win7兼容模式运行)
HKEY hKey; LPCTSTR strSubKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers"; long lRet = ::RegOpenKeyEx( HKEY_CURRENT_USER, strSubKey, 0, KEY_WRITE, &hKey ); if ( lRet == ERROR_SUCCESS ) { TCHAR achValue[] = { _T("WIN7RTM") }; CString strExePath = _T("C:\\Program Files\\Test\\Test.exe"); lRet = ::RegSetValueEx( hKey, strExePath, NULL, REG_SZ, (LPBYTE)&achValue, sizeof(achValue) ); RegCloseKey( hKey ); }