您的位置:首页 > 其它

在win7里 修改注册表 让excel独占进程

2012-12-03 16:21 232 查看
http://www.comeitbar.com/news/4494.html

 

 

Excel2010\2007 在一个窗口打开文件的本意原是为了节省内存。但是很多使用 Windows 7 的同学还是喜欢两个窗口一拉一靠左右排列,既便于比较,也不妨碍操作。问题是,打开多个 excel 文件时,它总是显示在一个窗口中啊,怎样在不同的窗口中打开文件呢?

  Excel2010\2007 在一个窗口打开文件的本意原是为了节省内存。但是很多使用 Windows 7 的同学还是喜欢两个窗口一拉一靠左右排列,既便于比较,也不妨碍操作。问题是,打开多个 excel 文件时,它总是显示在一个窗口中啊,怎样在不同的窗口中打开文件呢?

  比较安全的方法嘛,就是直接从开始菜单中再次打开 Excel 程序,然后在新的 Excel 程序中使用“文件-打开”来打开文件。等于是打开了一个新的 excel.exe 进程。(更绝的方法就是直接在任务栏上鼠标中键单击 Excel 程序图标打开一个新的程序)

  不过,如果你机器内存很多,又想一劳永逸地改变的话,可以试试下面这个方法。

  1.使用快捷键组合“Win+R”调出运行命令框,键入 regedit.exe,回车,打开注册表编辑器。



  若弹出用户账户控制窗口,询问“您要允许以下程序对此计算机进行更改吗?”请点“是”以继续。



  2.备份注册表

  提示: 如果注册表修改不当可能会出现严重的问题。因此,请确保您认真执行这些步骤。为增加保护,请修改之前备份注册表。

  定位到注册表键值:HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open

  右击,选择“导出”。



  在修改之前,我们先为其做一下备份。



  做好备份后,就可以大胆修改了。

  3.修改 Open\command 值。

  展开“Open\command”,在右边细节窗口:

  双击打开“默认”,将其键值改为"C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" "%1"

  (如果您使用的是 Office 2007, 把 Office 14 改为 Office 12。另外,千万不要丢了引号)



  然后,双击 command,将鼠标光标移到数值数据最后,用"%1"代替/dde

  (如果使用的是 Office 2007, 用"%1"代替/e)



  重命名 Open\ddeexec。选中“ddeexec”,右击,选择“重命名”。



  为其取个新名字,例如“ddeexec2”。



  4.用相同的办法,对 HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open 进行备份和修改。



  现在是不是能在单独的窗口中打开 Excel 文件呢?

 

 

 

=============================================================================================================================

(已解决)用代码实现每一个打开的excel独占一个excel进程

这样考虑是为了实现开发的excel文件保持个体特征,而不被后面打开的excel所干涉(如窗口覆盖等)
 

通过修改注册表的方式可以实现独进程

以下代码在xp和07测试通过,可以实现后续打开的excel独占各自的进程,由此实现开发的excel保持较大程度独立.

  Const HKEY_CLASSES_ROOT = -2147483648#

       Const HKEY_CURRENT_USER = -2147483647#

       Const HKEY_LOCAL_MACHINE = -2147483646#

       Const HKEY_USERS = -2147483645#

       Const REG_SZ = 1&         '字符串值

    Const REG_BINARY = 3&        '二进制值

    Const REG_DWORD = 4&        'DWORD

     Declare Function RegCreateKey Lib "advapi32.dll " Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long

     Declare Function RegCloseKey Lib "advapi32.dll " (ByVal hKey As Long) As Long

     Declare Function RegSetValueEx Lib "advapi32.dll " Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long '创建或改变一个键值,lpData应由缺省的ByRef型改为ByVal型

     Private Declare Function RegDeleteValue Lib "advapi32.dll " Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long       '删除一个键值

     Private Declare Function RegDeleteKey Lib "advapi32.dll " Alias "RegDeleteKeyA " (ByVal hKey As Long, ByVal lpSubKey As String) As Long            '删除一个主键

Sub Main1()

      Dim nKeyHandle  As Long, nValueType  As Long, nLength  As Long

      Dim sValue  As String

      sValue = ""

      Call RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\Excel.Sheet.12\shell\Open\ddeexec", nKeyHandle)

       Call RegDeleteValue(nKeyHandle, "") '删除值

      Call RegCloseKey(nKeyHandle)

    End Sub

Sub Main2()

      Dim nKeyHandle  As Long, nValueType  As Long, nLength  As Long

      Dim sValue  As String

      sValue = Chr(34) & "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" & Chr(34) & " /e " & Chr(34) & "%1" & Chr(34)

      Call RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\Excel.Sheet.12\shell\Open\command", nKeyHandle)

      Call RegSetValueEx(nKeyHandle, "", 0, REG_SZ, sValue, 100) '""表示默认值

      

       'Call RegSetValueEx(nKeyHandle, "My Value", 0, REG_SZ, sValue, 255)

      'Call RegDeleteKey(HKEY_CURRENT_USER, "New   Registry   Key ")

       'Call RegDeleteValue(nKeyHandle, "") '删除值

      Call RegCloseKey(nKeyHandle)

    End Sub
以下代码在xp和07测试通过,可以实现后续打开的excel独占各自的进程,由此实现开发的excel保持较大程度独立.

  Const HKEY_CLASSES_ROOT = -2147483648#

       Const HKEY_CURRENT_USER = -2147483647#

       Const HKEY_LOCAL_MACHINE = -2147483646#

       Const HKEY_USERS = -2147483645#

       Const REG_SZ = 1&         '字符串值

    Const REG_BINARY = 3&        '二进制值

    Const REG_DWORD = 4&        'DWORD

     Declare Function RegCreateKey Lib "advapi32.dll " Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long

     Declare Function RegCloseKey Lib "advapi32.dll " (ByVal hKey As Long) As Long

     Declare Function RegSetValueEx Lib "advapi32.dll " Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long '创建或改变一个键值,lpData应由缺省的ByRef型改为ByVal型

     Private Declare Function RegDeleteValue Lib "advapi32.dll " Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long       '删除一个键值

     Private Declare Function RegDeleteKey Lib "advapi32.dll " Alias "RegDeleteKeyA " (ByVal hKey As Long, ByVal lpSubKey As String) As Long            '删除一个主键

Sub Main1()

      Dim nKeyHandle  As Long, nValueType  As Long, nLength  As Long

      Dim sValue  As String

      sValue = ""

      Call RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\Excel.Sheet.12\shell\Open\ddeexec", nKeyHandle)

       Call RegDeleteValue(nKeyHandle, "") '删除值

      Call RegCloseKey(nKeyHandle)

    End Sub

Sub Main2()

      Dim nKeyHandle  As Long, nValueType  As Long, nLength  As Long

      Dim sValue  As String

      sValue = Chr(34) & "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" & Chr(34) & " /e " & Chr(34) & "%1" & Chr(34)

      Call RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\Excel.Sheet.12\shell\Open\command", nKeyHandle)

      Call RegSetValueEx(nKeyHandle, "", 0, REG_SZ, sValue, 100) '""表示默认值

      

       'Call RegSetValueEx(nKeyHandle, "My Value", 0, REG_SZ, sValue, 255)

      'Call RegDeleteKey(HKEY_CURRENT_USER, "New   Registry   Key ")

       'Call RegDeleteValue(nKeyHandle, "") '删除值

      Call RegCloseKey(nKeyHandle)

    End Sub
 

http://club.excelhome.net/thread-657901-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: