我用VB编了一个小程序,用innosetup打包的,但是安装到桌面后的快捷方式可以正确调用程序,放到开始程序菜单里面的程序快捷方式和快速启动栏里面的快捷方式没法正确调用程序。请教这个问题根源出在什么地方?描述:桌面快捷方式的程序可以打开程序,当程序运行满足条件时可以调用安装目录的声音文件,开始程序里面的快捷方式也可以正常打开EXE程序,但是当条件满足时,声音并没有响,我做了一下对比,两个快捷方式在其右击属性里面有所不同,一个起始位置写了安装路径,另一个没有,有安装路径的能响,没有的不能响,但是不知道在程序里面写怎么避免这个,请教高手给予指导?谢谢!不知道大家听懂没?呵呵...

解决方案 »

  1.   

    (1)检查快捷方式指向的路径。
    (2)程序里面使用 App.Path & "\filename" 来代表文件路径。
      

  2.   

    发帖前就确认过了,程序里面用的就是相对路径,不是绝对路径!
    musicPath = IIf(Right(App.path, 1) = "\", App.path, App.path & "\")
      

  3.   

    To: Caozhy从新检查过代码只有一个地方调用声音文件未带路径,如下3句所示:RetValue = mciSendString("OPEN test.rmi TYPE SEQUENCER ALIAS BackgroundMusic", "", 0, 0)  如果我改为下面路径的话:
    'RetValue = mciSendString("OPEN musicPath & test.rmi TYPE SEQUENCER ALIAS BackgroundMusic", "", 0, 0)(musicpath如下面2句所示)------1则后面有一句RetValue = mciSendString("STATUS BackgroundMusic MODE", MCIStatus, MCIStatusLen, 0)监测到MCIStatus=“”为空值,实际应该为=“stopped”,所以下面3句是有效的,而1句却不能正常调用声音,不知道为什么,也许问题就出在这,请教?Private Sub Form_Load()
            
    Dim my As Long
            Dim musicPath As String * 2048
            musicPath = IIf(Right(App.path, 1) = "\", App.path, App.path & "\")
            ' musicPath = IIf(Right(App.path, 1) = "\", App.path, App.path & "\test.rmi")
            'musicPath = App.path & "\test.rmi"-------2
            Debug.Print musicPath
            '###################################打开音乐
            IsMusicOn = True
             ' RetValue = mciSendString("OPEN " & "C:\" & "test.rmi TYPE SEQUENCER ALIAS BackgroundMusic", "", 0, 0)    
                'RetValue = mciSendString("OPEN " & "C:\Program Files\BMP ONLINE CALL SYSTEM" & "\" & "test.rmi TYPE SEQUENCER ALIAS BackgroundMusic", "", 0, 0)
             RetValue = mciSendString("OPEN test.rmi TYPE SEQUENCER ALIAS BackgroundMusic", "", 0, 0)                                           -------3
             'RetValue = mciSendString("OPEN musicPath & test.rmi TYPE SEQUENCER ALIAS BackgroundMusic", "", 0, 0)
             'RetValue = mciSendString("OPEN musicPath TYPE SEQUENCER ALIAS BackgroundMusic", 0&, 0, 0)
            '############################################..........
    End SubPrivate Sub Timer2_Timer()
    Dim strTitle As String
    Dim hdl As Long
    Dim MCIStatusLen As Integer
    Dim MCIStatus As String
    Dim Buffer As String * 128
    Dim Ret As Long
    Dim i
    strTitle = Space(765)If IsMusicOn = True Then
        MCIStatusLen = 15
        MCIStatus = String(MCIStatusLen + 1, " ")
        RetValue = mciSendString("STATUS BackgroundMusic MODE", MCIStatus, MCIStatusLen, 0)
        Wintextstr = ""
        Call EnumWindows(AddressOf EnumWindowsProc, 0)
        Call EnumWindowsProc(GetForegroundWindow, 0)    Debug.Print " MCIStatus="; MCIStatus, "MCIStatusLen="; MCIStatusLen,
        Debug.Print UCase(Left$(MCIStatus, 7)) = "STOPPED", Left(Replace(Wintextstr, " ", ""), 9) = "Messenger"
    If UCase(Left$(MCIStatus, 7)) = "STOPPED" And Left(Replace(Wintextstr, " ", ""), 9) = "Messenger" Then
          RetValue = mciSendString("PLAY BackgroundMusic FROM 0", "", 0, 0)
    ElseIf UCase(Left$(MCIStatus, 7)) = "STOPPED" And Left(Replace(Wintextstr, " ", ""), 9) = "信使服务" Then
          RetValue = mciSendString("PLAY BackgroundMusic FROM 0", "", 0, 0)
    ElseIf Left(Replace(Wintextstr, " ", ""), 9) <> "Messenger" And Replace(Wintextstr, " ", "") <> "信使服务" Then
        '此处不能调用Call StopMusic,否则失败
         mciSendString "stop BackgroundMusic", Buffer, Ret, 0   '注意stop BackgroundMusic
         RetValue = mciSendString("CLOSE BackgroundMusic FROM 0", "", 0, 0)  '注意有无FROM 0的区别End If
    End If
    End Sub