文件关联本来就不需要重起
方法:http://expert.csdn.net/Expert/topic/524/524025.xml?temp=.64555

解决方案 »

  1.   

    注册表手工是用F5刷新这个我看到了,但是编城代码里只是 REGSETVALUE 了一下,我的程序也是这么做的,但是不会在执行后马上修改关联并生效,请标出立即生效的代码段(摘自上面的帖子)  ◆手工:打开系统注册表,在HKEY_CLASSES_ROOT下找到.exc及另一主键名,找到此主键,将shellopencommand右侧显示栏内“C:WINDOWSNOTEPAD.EXE %1”改为“C:VISIO.EXE %1”(假设VISIO.EXE的访问路径是C:,具体视情况而定),按F5刷新系统注册表。 
      ◆编程:利用VB、Delphi、C++Builder等读写系统注册表,可自动改变文件打开方式。本文提供VB、Delphi编程实例。 
      二、编程实例: 
      ㈠利用VB编程 
      1、在VB5.0 IDE中,新建工程Project1,在Form1上添加命令按钮Command1。 
      2、选择菜单“工程”—“添加模块”—“模块”—“打开”,在Project1中添加模块Moudle1。 
      3、在Moudle1“通用—声明”部分声明API函数和常量。 
      Const REG_SZ = 1 
      Global Const HKEY_CLASSES_ROOT = &H80000000 
    Declare Function OSRegQueryValueEx Lib “advapi32”Alias 
    “RegQueryValueExA”(ByVal hKey As Long, ByVal lpszValueName As String, 
    ByVal dwReserved As Long, lpdwType As Long, lpbData As Any, cbData As Long) As Long   Declare Function OSRegOpenKey Lib “advapi32”Alias 
    “RegOpenKeyA”(ByVal hKey As Long, ByVal lpszSubKey As String, 
    phkResult As Long) As Long   Declare Function OSRegSetValueEx Lib“advapi32”Alias 
    “RegSetValueExA”(ByVal hKey As Long, ByVal lpszValueName As String, 
    ByVal dwReserved As Long, ByVal fdwType As Long, lpbData As Any, 
    ByVal cbData As Long) As Long   Declare Function OSRegCloseKey Lib“advapi32”Alias 
    “RegCloseKey”(ByVal hKey As Long) As Long   4、在Moudle 1中编写函数。 
      Function RegOpenKey(ByVal hKey As Long, ByVal lpszSubKey As String, 
    phkResult As Long) As Boolean 
       Dim lResult As Long 
       On Error GoTo 0 ` 关闭错误陷阱 
       lResult = OSRegOpenKey(hKey, lpszSubKey, phkResult) 
       If lResult = 0 Then 
       RegOpenKey = True 
       Else 
       RegOpenKey = False 
       End If 
      End Function 
      Function RegSetStringValue(ByVal hKey As Long, ByVal strValueName As String, 
    ByVal strData As String, Optional ByVal fLog) As Boolean 
       Dim lResult As Long 
       On Error GoTo 0 
       lResult = OSRegSetValueEx(hKey, strValueName, 0&, REG_SZ, ByVal strData, 
    LenB(StrConv(strData, vbFromUnicode)) + 1) 
       If lResult = 0 Then 
       RegSetStringValue = True 
       Else 
       RegSetStringValue = False 
       End If 
      End Function 
      Function StripTerminator(ByVal strString As String) As String 
       Dim intZeroPos As Integer 
       intZeroPos = InStr(strString, Chr$(0)) 
       If intZeroPos > 0 Then 
      StripTerminator=Left$(strString, intZeroPos - 1) 
       Else 
       StripTerminator = strString 
       End If 
      End Function 
      Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String, 
    strData As String) As Boolean 
       Dim lResult As Long 
       Dim lValueType As Long 
       Dim strBuf As String 
       Dim lDataBufSize As Long 
       RegQueryStringValue = False 
       On Error GoTo 0 
       lResult = OSRegQueryValueEx(hKey, strValueName, 0&, lValueType, ByVal 0&, 
    lDataBufSize) 
       If lResult = ERROR_SUCCESS Then 
       If lValueType = REG_SZ Then 
       strBuf = String(lDataBufSize, “”) 
       lResult = OSRegQueryValueEx(hKey, strValueName, 0&, 0&, ByVal strBuf, 
    lDataBufSize) 
       If lResult = ERROR_SUCCESS Then 
       RegQueryStringValue = True 
       strData = StripTerminator(strBuf) 
       End If 
       End If 
       End If 
      End Function 
      5、双击Command1,编写Click事件代码。 
      Private Sub Command1_Click() 
       Dim hKey As Long 
       Dim MyReturn As Long 
       Dim MyData As String 
       MyReturn = OSRegOpenKey(HKEY_CLASSES_ROOT, “.exc”, hKey) 
      MyReturn=RegQueryStringValue(hKey,“”,MyData) 
      MyReturn=OSRegOpenKey(HKEY_CLASSES_ROOT, MyData+“shellopencommand”,hKey) 
       MyReturn = RegSetStringValue(hKey,“”,“c:visio.exe 1%”, False) 
       If MyReturn Then 
       MsgBox “改变文件打开方式成功!”,vbInformation,“请注意” 
       Else 
       MsgBox “改变文件打开方式失败!”,vbExclamation,“请注意” 
       End If 
       OSRegCloseKey (hKey) 
      End Sub 
      6、按F5运行程序,在简体中文Windows95/NT/98、VB5.0/6.0环境中调试通过。 
      

  2.   

    什么系统下? 我在2000 和 ME 98 下怎么就不可以? WINAMP 依然用他的图标显示MP3文件,而双击后依然用WINAMP 打开, 并没用我的程序播放...
      

  3.   

    你用的Winamp正好是个特例,启动时会自动建立关联。如果要更改,要到Winamp的设置中改。