长久没用VS2008了,今天正好有个小项目需要用它编译,结果打开就跳出了如下提示:
本来这种情况经常遇到,找个激活码重新激活以下就可以了,但是在Win7 + VS2008的情况下这个方法出了一点小问题,并不是找不到激活码,而是找不到重新输入激活码的位置。网上普遍介绍了两种方法:一种是在安装前修改安装配置文件中的key,显然不适用于已经安装好的情况;另一种就是我前面提到的重输激活码,但是Win7下找不到输入位置。
我们打开控制面板,右键VS2008:
出现如下界面:
加载完后,单击下一步:
本来在上图的红色矩形框位置处应该可以输入激活码更新的,但是在Win7下未显示。浏览了许多网站和贴吧,总结以下两点解决方法,一是重新运行安装程序,重新安装(当然先修改),按照贴吧中的说法,因为没有更新内容,所以应该很快。但是实际测试下来,测试版还是测试版(并且依然只剩下15天),不知道是否有人成功的。
另一种就是将隐藏的输入框显示出来,网上有这种补丁程序,通过查找上图这个窗口,将其上的所有窗口显示出来,进而更新key。当然,这种方法应该在打开上图窗口的情况下以管理员身份运行。
下面是我写的一个小程序:
在打开窗口“Microsoft Visual Studio 2008 安装程序 - 维护页”的情况下,点击“显示”,结果如下:
为了便于输入激活码,我添加一个输入框,本来想建一个激活码数组循环激活的,但是后面测试了两个激活码就激活成功了,就不再继续了。
下面是关键代码:
void
CVS2008_Patch_KavenDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// 要查找的VS2008版本列表
const
TCHAR
* szCaption[] = {
_T(
"Microsoft Visual Studio 2008 安装程序 - 维护页"
),
// 简体中文版
_T(
"Microsoft Visual Studio 2008 安裝程式 - 維護頁"
),
// 繁体中文版
_T(
"Microsoft Visual Studio 2008 Setup - Maintenance Page"
),
// 英文版
_T(
"Microsoft Visual Studio 2008 セットアップ - メンテナンス ページ"
)
// 日文版
};
HWND
hWnd;
UINT
i, uNum;
// 定位“Microsoft Visual Studio 2008 安装程序 - 维护页”窗口
uNum =
sizeof
(szCaption) /
sizeof
(
const
TCHAR
*);
for
( i = 0; i < uNum; i++ )
{
hWnd = ::FindWindow( NULL, szCaption[i] );
if
( hWnd != NULL )
{
// 窗口发现
break
;
}
}
if
( i == uNum )
{
// 没有找到VS2008维护页窗口
AfxMessageBox( _T(
"没有发现VS2008维护窗口,请先保证该窗口启动!"
) );
return
;
}
// 进入第1层子窗口
hWnd = :: GetTopWindow( hWnd );
// 进入第4个子窗口
for
( i = 0; i < 3; i++ )
{
hWnd = :: GetNextWindow( hWnd, GW_HWNDNEXT );
}
// 进入第2层子窗口
hWnd = :: GetTopWindow( hWnd );
// 进入第9个子窗口
for
( i = 0; i < 8; i++ )
{
hWnd = :: GetNextWindow( hWnd, GW_HWNDNEXT );
}
// 进入注册码填写窗口
for
( i = 0; i < 5; i++ )
{
// 激活文本框
::ShowWindow( hWnd, SW_SHOW );
::EnableWindow( hWnd, TRUE );
// 保存
m_hWndEdit[i] = hWnd;
// 进入下一个文本框
hWnd = :: GetNextWindow( hWnd, GW_HWNDNEXT );
}
// 进入升级按钮
for
( i = 0; i < 2; i++ )
{
hWnd = :: GetNextWindow( hWnd, GW_HWNDNEXT );
}
// 激活升级按钮
::ShowWindow( hWnd, SW_SHOW );
//::EnableWindow( hWnd, TRUE );
m_hWndEdit[5] = hWnd;
AfxMessageBox(_T(
"隐藏窗口已显示!"
));
return
;
}
void
CVS2008_Patch_KavenDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
if
(m_hWndEdit[0] == NULL)
{
OnBnClickedButton1();
}
UpdateData();
int
nStart = 0;
int
nPos = m_key.Find(_T(
"-"
));
CStringArray arrayKey;
while
(nPos != -1)
{
arrayKey.Add(m_key.Mid(nStart, nPos - nStart));
nStart = nPos + 1;
nPos = m_key.Find(_T(
"-"
), nStart);
}
arrayKey.Add(m_key.Right(5));
if
(arrayKey.GetSize() != 5)
{
AfxMessageBox(_T(
"激活码输入有误(形如:XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT),请重新输入!"
));
GetDlgItem(IDC_EDIT1)->SetFocus();
}
else
{
for
(
int
i = 0; i < 5; i++)
{
::SendMessage(m_hWndEdit[i], WM_SETTEXT, NULL, (
LPARAM
)arrayKey.GetAt(i).GetString());
}
}
if
(::IsWindowEnabled(m_hWndEdit[5]))
{
// 发送两次该消息
::SendMessage(m_hWndEdit[5], BM_CLICK, NULL, NULL);
::SendMessage(m_hWndEdit[5], BM_CLICK, NULL, NULL);
}
}
|
程序运行截图:
程序(CSDN传个资源不显示,放到百度云上了):http://pan.baidu.com/s/1sjyQYdf