如何利用函数FileExist判断电脑中是否安装Photoshop?请高手帮忙,谢谢!

解决方案 »

  1.   

    就算安装了,也不一定安装在什么位置,遍历查找文件效率就太低了。
    如果安装了photoshop,注册表中会存在HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Photoshop这个项,而且下面还有一个以版本号命名的子项,比如HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Photoshop\8.0,里面有个ApplicationPath键,该键的值为photoshop的安装路径,比如C:\Program Files\Adobe\Photoshop CS\
      

  2.   

    枚举注册表项
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    里面就是系统所有安装的软件
      

  3.   


    '增加一个list1的列表框:
    '以下是编历HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall  下的所有键,
    '你看一下是否有你要的PhotoshopConst ERROR_NO_MORE_ITEMS = 259&
    Const HKEY_CURRENT_CONFIG = &H80000005
    Const HKEY_LOCAL_MACHINE = &H80000002
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
    Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As LongPublic Function LoadRes(ByVal ResString As String) As String()
       Dim hKey As Long
       Dim Cnt As Long
       Dim sName As String
       Dim sData As String
       Dim Ret As Long
       Dim RetData As Long
       Dim Data() As String
       Dim Count As Long
       
       Const BUFFER_SIZE As Long = 255
              
       Ret = BUFFER_SIZE
       If RegOpenKey(HKEY_LOCAL_MACHINE, ResString, hKey) = 0 Then
          sName = Space(BUFFER_SIZE)
           While RegEnumKeyEx(hKey, Cnt, sName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
               Count = Count + 1
               ReDim Preserve Data(Count) As String
               Data(Count) = Left$(sName, Ret)
               Cnt = Cnt + 1
               sName = Space(BUFFER_SIZE)
               Ret = BUFFER_SIZE
           Wend
           RegCloseKey hKey
       Else
           ReDim Data(0) As String
           Data(0) = "没有找到项目"
       End If
       
       LoadRes = Data()
    End FunctionPrivate Sub Form_Load()
      Dim Data() As String
      Data = LoadRes("Software\microsoft\windows\currentversion\uninstall")
      If UBound(Data) > 0 Then
         For i = 1 To UBound(Data)
            List1.AddItem Data(i)
         Next
      End If
    End Sub
      

  4.   

    http://topic.csdn.net/t/20050418/18/3946924.html
    下有个例子,是判断本机是否安装了MS   EXCEL,而换成Photoshop我就不知道如何改了?
      

  5.   

    万变不离其综.他也是编历注册表,只不过他编历的地方与的我不同.我编历的是.在卸载的地方是否有此软件,(只要可以卸载的软件,虽不定安装了,但是可以作为参考)而他编历的是. Excel 或word 文件是否有程序可以打开.(虽然可以打开Excel或Word的程序不一定是Office,但是一样可以参考)
      

  6.   

     可是用FileExist怎么能准确判断呢? 除非用户在安装photoshop时没更改安装路径直接安装在默认路径C:\program files下.
      

  7.   

    直接在注册表中 找关于.PSD文件的关联 然后FileExist 文件是否存在 
    这样 绿色版的 也能检查出来了 
      

  8.   

    楼上的方法也并不总是可靠,比如ACDSee安装时好像默认关联.psd格式文件的。
      

  9.   

    还枚举注册表呢,多麻烦。happy_sea 的办法可行,或者你可以检查注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths里有没有PhotoShop项,当然名字不一定是PhotoShop,可以找台有安装PhotoShop的机器看看即可。