通过代码将程序在Win7/Win8下设置成以兼容模式运行

        有时我们开发的程序在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
Windows 98 / Windows Me                             对应WIN98
Windows NT 4.0 (Service Pack 5)                  对应NT4SP5
Windows 2000                                                   对应WIN2000
Windows XP                                                       对应WINXP
Windows XP (Service Pack 2)                         对应WINXPSP2
Windows XP (Service Pack 3)                         对应WINXPSP3
Windows Server 2003 (Service Pack 1)        对应WINSRV03SP1
Windows Server 2008 (Service Pack 1)        对应WINSRV08SP1
Windows Vista                                                   对应VISTARTM
Windows Vista (Service Pack 1)                     对应VISTASP1
Windows Vista (Service Pack 2)                     对应VISTASP2
Windows 7                                                          对应WIN7RTM

        将程序设置成兼容模式的代码如下所示:(在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 );
                } 


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值