vb+Flex的关于FlashPlayer的检测
2010年11月03日
应该很少见到使用vb+flex这样的方式开发的项目吧,自己就曾经遇过这样的一个项目,其实更好的应该是c++ + flex, vb,c++这些作为Flex的外层,它的工作就是跟系统交互并为Flex提供服务,而这样结合,比起air, 性能应该更好,我不明白air还有什么用武之地,至少我不会再用它了--|||...
vb+flex,在vb中,要使用到ActiveX控件ShockwaveFlash
回过头先说FlashPlyer的两个内核版本:
Adobe Flash Player ActiveX: ie ActiveX控件
Adobe Flash Player plugin: 非ie的插件,例如firefox
Adobe Flash Player ActiveX是再熟悉不过的了,并且是非常的普及的了,几乎所有需要运行swf都会安装它,也只安装了它, vb才能正常使用ShockwaveFlash,因为它会注册该控件。
基于此,vb+flex,如何去检测用户的电脑是否可以正常使用软件(是否安装了Adobe Flash Player ActiveX),我们自然想到了要去检测注册表,而现在的系统有32位和64位的,因此就有了: Dim K As String '首先检测32位的键值 K = GetRegString(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\Adobe Flash Player ActiveX", "DisplayVersion") K = Trim(K) If (K = "") Then '再尝试检测64位的键值 K = GetRegString(HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVer sion\Uninstall\Adobe Flash Player ActiveX", "DisplayVersion") K = Trim(K) If (K = "") Then Call err.Raise(-1, , "flash cannot found") Else K = GetVersionNum(K) 'GetVersionNum用户获取版本好的Interger数字 End If Else K = GetVersionNum(K) End If ver = CInt(K) If ver < 10 Then GoTo xx 'xx 用于处理当版本好小于10的情况 End If 如果没有安装,或者版本过低,我们当然要求用户重新安装最新的版本,如果用户联网了,那么就应该就要使用ie直接跳转到Adobe的官网获取新版的Adobe Flash Player ActiveX, 但有些情况用户无法连接网络(需要使用程序提供的原安装档),而且用户之前可能安装过最新版的Adobe Flash Player ActiveX, 但后来卸载过了,这时候,你会发现,您无法再安装旧的版本(感觉Adobe真的有点霸道,有点不爽吧),所以程序中需要在执行安装之前,必须做点事,那就是把标志新版的注册表键值删除掉: Call DeleteNewestFlashPlayer 代码如: DeleteRegeditValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Macromedia\FlashPlayer\SafeVersions", "10.0") DeleteRegeditValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Macromedia\FlashPlayer\SafeV ersions", "10.0") 当然,你可能还要顾及到以后的11,12,13,14.... 删除完之后: If MsgBox("系统的Adobe Flash版本小於10,请转到网址""http://www.adobe.com/go/getflashplayer""获取最新的版本。", vbOKCancel, "电子书所需控件太旧") = VbMsgBoxResult.vbOK Then ShellExecute 0, "open", "iexplore.exe", "http://www.adobe.com/go/getflashplayer", "", 1 End If 事实上,Adobe把SafeVersions/10.0这个键值改为最新的,当安装时候,检测到比它低的,它就不允许安装,其实也可以将他改低就可以安装了,但是没有必要,直接将它删除了吧,一了百了。
不知是否还有更好的办法....
2010年11月03日
应该很少见到使用vb+flex这样的方式开发的项目吧,自己就曾经遇过这样的一个项目,其实更好的应该是c++ + flex, vb,c++这些作为Flex的外层,它的工作就是跟系统交互并为Flex提供服务,而这样结合,比起air, 性能应该更好,我不明白air还有什么用武之地,至少我不会再用它了--|||...
vb+flex,在vb中,要使用到ActiveX控件ShockwaveFlash
回过头先说FlashPlyer的两个内核版本:
Adobe Flash Player ActiveX: ie ActiveX控件
Adobe Flash Player plugin: 非ie的插件,例如firefox
Adobe Flash Player ActiveX是再熟悉不过的了,并且是非常的普及的了,几乎所有需要运行swf都会安装它,也只安装了它, vb才能正常使用ShockwaveFlash,因为它会注册该控件。
基于此,vb+flex,如何去检测用户的电脑是否可以正常使用软件(是否安装了Adobe Flash Player ActiveX),我们自然想到了要去检测注册表,而现在的系统有32位和64位的,因此就有了: Dim K As String '首先检测32位的键值 K = GetRegString(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\Adobe Flash Player ActiveX", "DisplayVersion") K = Trim(K) If (K = "") Then '再尝试检测64位的键值 K = GetRegString(HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVer sion\Uninstall\Adobe Flash Player ActiveX", "DisplayVersion") K = Trim(K) If (K = "") Then Call err.Raise(-1, , "flash cannot found") Else K = GetVersionNum(K) 'GetVersionNum用户获取版本好的Interger数字 End If Else K = GetVersionNum(K) End If ver = CInt(K) If ver < 10 Then GoTo xx 'xx 用于处理当版本好小于10的情况 End If 如果没有安装,或者版本过低,我们当然要求用户重新安装最新的版本,如果用户联网了,那么就应该就要使用ie直接跳转到Adobe的官网获取新版的Adobe Flash Player ActiveX, 但有些情况用户无法连接网络(需要使用程序提供的原安装档),而且用户之前可能安装过最新版的Adobe Flash Player ActiveX, 但后来卸载过了,这时候,你会发现,您无法再安装旧的版本(感觉Adobe真的有点霸道,有点不爽吧),所以程序中需要在执行安装之前,必须做点事,那就是把标志新版的注册表键值删除掉: Call DeleteNewestFlashPlayer 代码如: DeleteRegeditValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Macromedia\FlashPlayer\SafeVersions", "10.0") DeleteRegeditValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Macromedia\FlashPlayer\SafeV ersions", "10.0") 当然,你可能还要顾及到以后的11,12,13,14.... 删除完之后: If MsgBox("系统的Adobe Flash版本小於10,请转到网址""http://www.adobe.com/go/getflashplayer""获取最新的版本。", vbOKCancel, "电子书所需控件太旧") = VbMsgBoxResult.vbOK Then ShellExecute 0, "open", "iexplore.exe", "http://www.adobe.com/go/getflashplayer", "", 1 End If 事实上,Adobe把SafeVersions/10.0这个键值改为最新的,当安装时候,检测到比它低的,它就不允许安装,其实也可以将他改低就可以安装了,但是没有必要,直接将它删除了吧,一了百了。
不知是否还有更好的办法....