2008-12-31 71 views

回答

1

我发现了一个Microsoft page描述的程序,只是没有在Java中。

所以我想问题变成如何从Java访问注册表。

+0

我建议修改这两个你的问题和标题,或者开始一个新的问题问题的性质是否已经改变。 – mmcdole 2008-12-31 18:26:25

1

我发现this site可能能够帮助你。这是一个Java注册表包装器,似乎有很多功能,但不知道实现的强大程度。

0

使用奥的斯的答案下面的代码很好地做到了。

static String getOutlookPath() { 
    // Message message = new Message(); 
    final String classID; 
    final String outlookPath; 

    { // Fetch the Outlook Class ID 
    int[] ret = RegUtil.RegOpenKey(RegUtil.HKEY_LOCAL_MACHINE, "SOFTWARE\\Classes\\Outlook.Application\\CLSID", RegUtil.KEY_QUERY_VALUE); 
    int handle = ret[RegUtil.NATIVE_HANDLE]; 
    byte[] outlookClassID = RegUtil.RegQueryValueEx(handle, ""); 

    classID = new String(outlookClassID).trim(); // zero terminated bytes 
    RegUtil.RegCloseKey(handle); 
    } 

    { // Using the class ID from above pull up the path 
    int[] ret = RegUtil.RegOpenKey(RegUtil.HKEY_LOCAL_MACHINE, "SOFTWARE\\Classes\\CLSID\\" + classID + "\\LocalServer32", RegUtil.KEY_QUERY_VALUE); 
    int handle = ret[RegUtil.NATIVE_HANDLE]; 
    byte[] pathBytes = RegUtil.RegQueryValueEx(handle, ""); 

    outlookPath = new String(pathBytes).trim(); // zero terminated bytes 
    RegUtil.RegCloseKey(handle); 
    } 

    return outlookPath; 
} 
0

下面是一个类似的问题略作修改的解决方案:https://stackoverflow.com/a/6194710/854664 请注意,我用的不是的.xls的.pst

import java.io.*; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class ShowOutlookInstalled { 
    public static void main(String argv[]) { 
     try { 
      Process p = Runtime.getRuntime() 
        .exec(new String[] { "cmd.exe", "/c", "assoc", ".pst" }); 
      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String extensionType = input.readLine(); 
      input.close(); 
      // extract type 
      if (extensionType == null) { 
       outlookNotFoundMessage("File type PST not associated with Outlook."); 
      } else { 
       String fileType[] = extensionType.split("="); 

       p = Runtime.getRuntime().exec(
         new String[] { "cmd.exe", "/c", "ftype", fileType[1] }); 
       input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
       String fileAssociation = input.readLine(); 
       // extract path 
       Pattern pattern = Pattern.compile("\".*?\""); 
       Matcher m = pattern.matcher(fileAssociation); 
       if (m.find()) { 
        String outlookPath = m.group(0); 
        System.out.println("Outlook path: " + outlookPath); 
       } else { 
        outlookNotFoundMessage("Error parsing PST file association"); 
       } 
      } 

     } catch (Exception err) { 
      err.printStackTrace(); 
      outlookNotFoundMessage(err.getMessage()); 
     } 


    } 

    private static void outlookNotFoundMessage(String errorMessage) { 
     System.out.println("Could not find Outlook: \n" + errorMessage); 

    } 
}