Windows7下安装完成的VS2008试用版激活方法

时间:2021-04-16 19:02:45

长久没用VS2008了,今天正好有个小项目需要用它编译,结果打开就跳出了如下提示:

Windows7下安装完成的VS2008试用版激活方法


本来这种情况经常遇到,找个激活码重新激活以下就可以了,但是在Win7 + VS2008的情况下这个方法出了一点小问题,并不是找不到激活码,而是找不到重新输入激活码的位置。网上普遍介绍了两种方法:一种是在安装前修改安装配置文件中的key,显然不适用于已经安装好的情况;另一种就是我前面提到的重输激活码,但是Win7下找不到输入位置。

我们打开控制面板,右键VS2008:

Windows7下安装完成的VS2008试用版激活方法


Windows7下安装完成的VS2008试用版激活方法


出现如下界面:

Windows7下安装完成的VS2008试用版激活方法


加载完后,单击下一步:


Windows7下安装完成的VS2008试用版激活方法


Windows7下安装完成的VS2008试用版激活方法


本来在上图的红色矩形框位置处应该可以输入激活码更新的,但是在Win7下未显示。浏览了许多网站和贴吧,总结以下两点解决方法,一是重新运行安装程序,重新安装(当然先修改),按照贴吧中的说法,因为没有更新内容,所以应该很快。但是实际测试下来,测试版还是测试版(并且依然只剩下15天),不知道是否有人成功的。

另一种就是将隐藏的输入框显示出来,网上有这种补丁程序,通过查找上图这个窗口,将其上的所有窗口显示出来,进而更新key。当然,这种方法应该在打开上图窗口的情况下以管理员身份运行。

下面是我写的一个小程序:

Windows7下安装完成的VS2008试用版激活方法


在打开窗口“Microsoft Visual Studio 2008 安装程序 - 维护页”的情况下,点击“显示”,结果如下:

Windows7下安装完成的VS2008试用版激活方法


Windows7下安装完成的VS2008试用版激活方法


为了便于输入激活码,我添加一个输入框,本来想建一个激活码数组循环激活的,但是后面测试了两个激活码就激活成功了,就不再继续了。


下面是关键代码:

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);
     }
}

程序运行截图:

Windows7下安装完成的VS2008试用版激活方法


程序(CSDN传个资源不显示,放到百度云上了):http://pan.baidu.com/s/1sjyQYdf