Post by wukw
我觉得肯定可以。一开始装SP2 的时候,都能用类似的办法欺骗过去!!
既然版主大人这么强,不妨再问一下:因为某些原因,我经常需要在 地区与语言选项里面切换中法文内码和相关的符号规则。我觉得很烦,后来又想到无非是修改注册表之后重启,请版主大人告诉俺,是修改哪三个注册键值? 俺干脆做个批处理修改三个键值,如果我足够强的话,再把东亚语言选项选上(估计也是修改某个键值),然后自动安装中文字体,最后自动... 可以是肯定的,Home版都能改成Pro版,这里只是骗一个安装程序而已。只是最后毕竟是要看效果的。
你的问题有两种解决办法。一种其实很简单,建立两个用户,分别使用不同的语言设置,把需要的特定程序安装到对应账户里。切换也不需要重启。当然你可能有特定需求,必须在同一账户里操作。不过我还是建议你能在两个账户上动脑子,毕竟一个是要重启的。
你的设想是可行的。但需要更改的键值比你想的多得多 下面是注册表对比结果(上行为中文,下行为法文):
更改非Unicode内码的变化:
HKLM\SYSTEM\ControlSet001\Control\Nls\CodePage\ACP: "936"
HKLM\SYSTEM\ControlSet001\Control\Nls\CodePage\ACP: "1252"
HKLM\SYSTEM\ControlSet001\Control\Nls\CodePage\OEMCP: "936"
HKLM\SYSTEM\ControlSet001\Control\Nls\CodePage\OEMCP: "850"
HKLM\SYSTEM\ControlSet001\Control\Nls\CodePage\MACCP: "10008"
HKLM\SYSTEM\ControlSet001\Control\Nls\CodePage\MACCP: "10000"
HKLM\SYSTEM\ControlSet001\Control\Nls\Language\Default: "0804"
HKLM\SYSTEM\ControlSet001\Control\Nls\Language\Default: "040c"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP: "936"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP: "1252"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP: "936"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP: "850"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\MACCP: "10008"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\MACCP: "10000"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\Default: "0804"
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\Default: "040c"
更改符号规则的变化:
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iCountry: "86"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iCountry: "33"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iCurrency: "0"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iCurrency: "3"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iDate: "2"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iDate: "1"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iLZero: "0"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iLZero: "1"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iNegCurr: "2"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iNegCurr: "8"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iTLZero: "0"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iTLZero: "1"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\Locale: "00000804"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\Locale: "0000040C"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\s1159: "AM"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\s1159: ""
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\s2359: "PM"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\s2359: ""
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sCountry: "République Populaire de Chine"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sCountry: "France"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sCurrency: "¥"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sCurrency: "€"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sDate: "-"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sDate: "/"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sDecimal: "."
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sDecimal: ","
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sLanguage: "CHS"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sLanguage: "FRA"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sList: ","
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sList: ";"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sLongDate: "yyyy'年'M'月'd'日'"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sLongDate: "dddd d MMMM yyyy"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sShortDate: "yyyy-M-d"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sShortDate: "dd/MM/yyyy"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sThousand: ","
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sThousand: " "
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sTimeFormat: "H:mm:ss"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sTimeFormat: "HH:mm:ss"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iTimePrefix: "1"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iTimePrefix: "0"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sMonDecimalSep: "."
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sMonDecimalSep: ","
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sMonThousandSep: ","
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\sMonThousandSep: " "
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iFirstDayOfWeek: "6"
HKU\S-1-5-21-1614895754-884357618-682003330-1003\Control Panel\International\iFirstDayOfWeek: "0"
注意S-1-5-21-1614895754-884357618-682003330-1003是你的安全标识符(SID),每个用户的SID都不一样,这个编码几乎不可能出现一样的情况,即使你在同一台电脑重装一次系统,SID都会发生变化。这也是为什么EFS加密目前不能破解的原因。所以鉴于此,你要做万用软件的话还有获取当前用户的SID这一工作,情况又变得复杂了。函数可以参考如下:
struct Fcrruntuser
{
char username[256];
char SID[256];
};
short FGetCurrentuserSID(Fcrruntuser*& nowuser)
{
int flag_2000=0;
int flag_nt=0;
int flag_98=0;
OSVERSIONINFO vi = { sizeof(vi) };
GetVersionEx(&vi);
if ((vi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (vi.dwMajorVersion < 5))
{
cout<<"This os is nt 4.0 for server or workstation version::"<<vi.dwMajorVersion<<endl;
cout<< "dwMajorVersion::" <<vi.dwMajorVersion<<endl;
cout<<"dwMinorVersion::"<<vi.dwMinorVersion<<endl;
cout<<"dwBuildNumber::"<<vi.dwBuildNumber<<endl;
flag_nt=1;
}
if ((vi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (vi.dwMajorVersion >= 5)) {
cout<<"This os is above win2000 version::"<<vi.dwMajorVersion<<endl;
cout<< "dwMajorVersion::" <<vi.dwMajorVersion<<endl;
cout<<"dwMinorVersion::"<<vi.dwMinorVersion<<endl;
cout<<"dwBuildNumber::"<<vi.dwBuildNumber<<endl;
flag_2000=1;
}
if (vi.dwPlatformId != VER_PLATFORM_WIN32_NT)
{
cout<<"ThisdwMajorVersion os is before win9X vesion::"<<endl;
cout<< "dwMajorVersion::" <<vi.dwMajorVersion<<endl;
cout<<"dwMinorVersion::"<<vi.dwMinorVersion<<endl;
cout<<"dwBuildNumber::"<<vi.dwBuildNumber<<endl;
flag_98=1;
}
if(flag_2000==1)
{
LPCTSTR data_set = "";
LPCTSTR data_set1 = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\";
HKEY hKey;
HKEY hKey1;
HKEY hKey2;
LONG ret;
LONG ret2;
LONG ret3;
LONG ret4;
LONG ret5;
LPBYTE lpszData = new BYTE[64];
LPTSTR lpData = new CHAR[256];
DWORD dwNameLen;
DWORD dwIndex = 0;
DWORD dwData;
DWORD type = REG_SZ;
ret = ::RegOpenKeyEx(HKEY_USERS, data_set, 0, KEY_ENUMERATE_SUB_KEYS, &hKey);
if(ret == ERROR_SUCCESS)
{
do
{
dwNameLen = 256;
ret2 = ::RegEnumKeyEx(hKey, dwIndex, lpData, &dwNameLen, NULL,
NULL, NULL, NULL);
if( ret2 != ERROR_NO_MORE_ITEMS)
{
ret3 = ::RegOpenKeyEx(hKey, lpData, 0, KEY_ENUMERATE_SUB_KEYS, &hKey1);
if (ret3 == ERROR_SUCCESS)
{
ret4 = ::RegOpenKeyEx(hKey1, data_set1, 0, KEY_READ, &hKey2);
if(ret4 == ERROR_SUCCESS)
{
dwData = 64;
ret5 = RegQueryValueEx(hKey2, "Logon User Name", NULL, &type, lpszData, &dwData);
if (ret5 == ERROR_SUCCESS)
{
strcpy(nowuser->username,(char*)lpszData);
cout<<nowuser->username<<endl;
strcpy(nowuser->SID,(char*)lpData);
cout<<nowuser->SID<<endl;
RegCloseKey( hKey2);
RegCloseKey( hKey1);
RegCloseKey( hKey);
return 1;
}
}
}
}
dwIndex++;
}
while(ret2 != ERROR_NO_MORE_ITEMS);
}
else
{
strcpy(nowuser->username,"NO LOGIN");
cout<<nowuser->username<<endl;
strcpy(nowuser->SID,".DEFAULT");
cout<<nowuser->SID<<endl;
}
RegCloseKey( hKey2);
RegCloseKey( hKey1);
RegCloseKey( hKey);
}
if(flag_nt==1)
{
char FRestrictRun_array[MAX2][64];
int length=0;
FlistCurrentuserSID(FRestrictRun_array,length);
// for(int i=0;i<length;i++)
// {
// cout<<FRestrictRun_array<<endl;
// }
if(length>1)
{
strcpy(nowuser->username,strdup(FRestrictRun_array[length-1]));
cout<<nowuser->username<<endl;
strcpy(nowuser->SID,strdup(FRestrictRun_array[length-1]));
cout<<nowuser->SID<<endl;
}else
{
strcpy(nowuser->username,".DEFAULT");
cout<<nowuser->username<<endl;
strcpy(nowuser->SID,".DEFAULT");
cout<<nowuser->SID<<endl;
}
}
if(flag_98==1)
{
char FRestrictRun_array[MAX2][64];
int length=0;
FlistCurrentuserSID(FRestrictRun_array,length);
// for(int i=0;i<length;i++)
// {
// cout<<FRestrictRun_array<<endl;
//}
if(length>1)
至于东亚字体,你别看只有一个勾,那可就不光是注册表的变化了。勾选一下这个选项不但变动了90多处键值,还需要增减一定数量的系统和字体文件。如果硬是要全数提取,也是可行的。监控硬盘读写即可找到所有增减的文件。但我个人觉得没有那个必要,因为这一项去不去实际对操作系统本身语言设置没有相关影响。我想应该你没有强行不让显示中文的需求吧
2007-7-16 10:49:47