首页 > 代码库 > 如何关闭CBox(2.4版本)的强制升级窗口
如何关闭CBox(2.4版本)的强制升级窗口
今天启动2.4.0.9版本的CBox,提示检测到新版本,必须更新到新版本后才能使用,提示窗口如下所示。此次升级是强制升级,如果选择不升级(点击升级提示窗口中右下角的“退出按钮”或者右上角的“关闭”),此时整个CBox程序都会退出,从而导致CBox没法使用。
由于是强制性的,所以没办法只能升级,结果升级后,新版本的CBox(3.0版本)竟然比2.4版本的难用的多,而且内容也少了很多,再就是新版本的界面效果与2.4相比特别难看。真搞不懂,央视做CBox请的是哪家公司,竟然把CBox做的越来越烂了,审美观念严重有问题,更别说用户体验了。2.4版本界面与3.0的新版本界面如下所示。
2.4版本界面
3.0版本界面
所以还是装回了2.4的版本,但是启动后要强制升级啊,不升级就没法使用。于是尝试着找一些方法看时候能将CBox的升级功能给屏蔽掉。比如如果有包含版本号的配置文件或者注册表信息,直接将版本号修改成最新的(或者是很大的版本号),但是找了半天也没找到,包括显示所有的掩藏文件以及到C:\Documents and Settings\XXXXX\Application Data\CBox目录都去找了。然后看了一下安装目录下是否有类似于Updater.exe升级exe文件,如果有直接将之删除掉,这样CBox就没发进行版本检测了。很不幸的是,exe也没有,倒是有一个Updater.dll动态库文件,这个文件删不得的,因为CBox.exe会依赖这个库,如果将之删除,CBox.exe启动时会报缺少Updater.dll动态库文件。
尝试到这里,依旧没有办法阻止CBox的强制升级。是不是没有办法了呢?仔细的看了一下,弹出的提示框是非模态的,主窗口还是能操作的。于是想到一个稍微麻烦一点的办法,既然你能捕捉到用户点击关闭和退出的事件,那么我是不是可以尝试一下得到升级提示窗口的句柄,直接将提示窗口销毁掉,从而使之不影响CBox的使用呢?于是用VC自带的Spy++工具抓到了升级窗口的类名(UpdateWindow)和标题名(Update),那么我可以调用系统API函数EnumWindows,枚举一下当前的所有的窗口,与升级提示窗口的类名及标题名比对,如果相同的话,对应的句柄就是升级提示窗口的句柄,直接给这个句柄发送WM_CLOSE消息,直接将之关闭掉。代码写好后测试了一下,果然可以达到我们想要的效果,升级提示窗口销毁了,主窗口可以正常的使用。相关的代码如下所示:
BOOL CALLBACK EnumWindowsProc( HWND hwnd, // handle to parent window LPARAM lParam // application-defined value ) { TCHAR achClassName[MAX_PATH] = { 0 }; ::GetClassName( hwnd, achClassName, sizeof(achClassName)/sizeof(TCHAR) ); TCHAR achWndTitle[MAX_PATH] = { 0 }; ::GetWindowText( hwnd, achWndTitle, sizeof(achWndTitle)/sizeof(TCHAR) ); if ( !_tcscmp( achClassName, _T("UpdateWindow") ) && !_tcscmp( achWndTitle, _T("Update") ) ) { ::SendMessage( hwnd, WM_CLOSE, 0, 0 ); int i = 0; } return TRUE; } void CTestCBoxWndDlg::OnBnClickedBtnTest() { ::EnumWindows( EnumWindowsProc, NULL ); }
这样做就稍微麻烦一点,每次启动CBox后都会弹出升级提示窗口,然后我们需要启动我们的工具软件将升级提示窗口销毁掉。但是这也是没办法的办法。再就是有时不注意点击了更新,或者别用使用了我的电脑给我更新了,这样事后我还得手动装回老版本。无意中发现CBox安装目录下有个DuiLib.dll文件,哈哈,原来CBox使用duilib库实现的。并且图片文件和xml配置文件就在安装目录的\skin\default目录下,为了避免点击到更新,我们可以将提示窗口对应的update.xml中最顶层的布局的Visible属性改为false,这样虽然升级提示窗口还会显示,但是窗口只有背景图片,其他的按钮控件的什么都不显示了,这样就不会点击到更新按钮的机会了。update.xml文件的内容如下所示,至修改了一个地方:
<?xml version="1.0" encoding="utf-8"?> <Window size="246,163" caption="0,0,0,26" roundcorner="3,3" showdirty="false" > <Font name="微软雅黑" size="10" /> <Font name="微软雅黑" size="13" /> <Font name="微软雅黑" size="14" /> <Font name="宋体" size="13" bold="true" /> <Font name="宋体" size="12" bold="true" /> <Font name="宋体" size="12" /> <Font name="宋体" size="14" bold="true" /> <Font name="微软雅黑" size="8" /> <Default name="Edit" value=http://www.mamicode.com/"enabled="false" bordercolor="#FF000000" bordersize="1" font="8" textcolor="#FF666666"" />>最后附上关闭CBox升级提示窗口的工具软件界面: