winapiwrapper.java

来自「jdic,显著提高swing性能的插件」· Java 代码 · 共 279 行

JAVA
279
字号
/* * Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is * subject to license terms. *  * This program is free software; you can redistribute it and/or modify * it under the terms of the Lesser GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. */ package org.jdesktop.jdic.desktop.internal.impl;/** * Bottom layer java wrapper for Windows registry relevant APIs *  * @version 0.9 */public class WinAPIWrapper {    static {        System.loadLibrary("jdic");		Runtime.getRuntime().addShutdownHook(new Thread() {			public void run() {shutDown();}		});    }     /**     * Windows handles to hives.     */    public final static int  HKEY_CLASSES_ROOT = 0x80000000;    public final static int  HKEY_CURRENT_USER = 0x80000001;    public final static int  HKEY_LOCAL_MACHINE = 0x80000002;      /* Windows error or status codes. */    public static final int ERROR_SUCCESS = 0;      /* Constants for Windows registry element size limits */    public static final int MAX_KEY_LENGTH = 255;    /* Constants used to interpret returns of native functions  */    private static final int OPENED_KEY_HANDLE = 0;    private static final int ERROR_CODE = 1;    private static final int SUBKEYS_NUMBER = 0;        /* Windows security masks */    public static final int KEY_READ = 0x20019;      /**     * Java wrapper for Windows registry API RegOpenKey()     * @param hKey Windows registry folder     * @param subKey key name     * @return ERROR_SUCCESS if succeed, or error code if fail     */    private static native int[] RegOpenKey(int hKey, byte[] subKey,            int securityMask);                                                     /**     * Java wrapper for Windows registry API RegCloseKey()     */    private static native int RegCloseKey(int hKey);      /**     * Java wrapper for Windows registry API RegQueryValueEx()     */    private static native byte[] RegQueryValueEx(int hKey, byte[] valueName);        /**     * Java wrapper for Windows AssocQueryString.     */    private static native byte[] AssocQueryString(byte[] fileExt, byte[] verb);      /*     * Java wrapper for Windows API ExpandEnvironmentStrings()     */    private static native byte[] ExpandEnvironmentStrings(byte[] envBytes);    	/**	 * Resolves the target file from a link file.	 * 	 * @param filePath The path name of the given file.	 * @return The target file path name.	 */	private static native String resolveLinkFile(byte[] filePath);    	/**	 * Launch the application for the given file.	 * @param filePath Path name of the given file.	 * @param verb Specify the verb to be executed.	 * @return error code	 */	private static native int shellExecute(byte[] filePath, byte[] verb);		/**	 * Opens the system default mailer with relevant information filled in.	 * 	 * @param toArray the email address array of the "To" field.	 * @param ccArray the email address array of the "Cc" field.	 * @param bccArray the email address array of the "Bcc" field.	 * @param subject the string of the "Subject" field.	 * @param body the string of the "Body" field.	 * @param attachArray the array of the abosolute paths of the attached files.	 */	private static synchronized native void openMapiMailer(String[] toArray, String[] ccArray, 		String[] bccArray, String subject, String body, String[] attachArray);	/**	 * Calls this method to uninitialize COM library.	 */	protected static native void shutDown();	/**	 * Native method to browser the given url in the given target window using IE.	 *  	 * @param urlStr the given url.	 * @param target the given name of the target browser windows.	 * @return true if the operation succeeds.	 */	private static native boolean nativeBrowseURLInIE(String urlStr, String target);    /**     * Returns this java string as a null-terminated byte array     */    private static byte[] stringToByteArray(String str) {        if (str == null) {            return null;        }            byte[] srcByte = str.getBytes();        int srcLength = srcByte.length;        byte[] result = new byte[srcLength + 1];        System.arraycopy(srcByte, 0, result, 0, srcLength);        result[srcLength] = 0;           return result;    }        /**     * Converts a null-terminated byte array to java string     */    private static String byteArrayToString(byte[] array) {        if (array != null) {            String temString = new String(array);            if (temString != null) {                return temString.substring(0, temString.length() - 1);            }        }        return null;    }    /**     * Suppress default constructor for noninstantiability.     */    private WinAPIWrapper() {}    /**     * Retrieves the data associated with the default or unnamed value of a specified      * registry key. The data must be a null-terminated string.     * @param hKey specified windows registry folder constant     * @param subKey given sub key (not null)     * @param valueName given value name (not null)     * @return content of the value, or null if fail or not exist     */    public static String WinRegQueryValueEx(int hKey, String subKey, String valueName) {        byte[] lpSubKey = stringToByteArray(subKey);        int[] openResult = RegOpenKey(hKey, lpSubKey, KEY_READ);            if (openResult == null) {            return null;         }        if (openResult[ERROR_CODE] != ERROR_SUCCESS) {            return null;        } else {            byte[] valueBytes;            byte[] lpValueName = stringToByteArray(valueName);			valueBytes =				RegQueryValueEx(openResult[OPENED_KEY_HANDLE], lpValueName);            RegCloseKey(openResult[OPENED_KEY_HANDLE]);                  if (valueBytes != null) {                if ((valueBytes.length == 1) && (valueBytes[0] == 0) && (valueName.equals("")) ){                    return null;                } else {                    return byteArrayToString(valueBytes);                }            } else {                return null;            }        }    }    /**     * Searches for and retrieves a file association-related string from the registry.     *      * @param fileOrProtocal The given file extension or url protocal name     * @param verb	The given verb     * @return The file association-related string for the given file extension and verb, or null     */    public static String WinAssocQueryString(String fileOrProtocal, String verb) {    	byte[] fileOrProtocalBytes = stringToByteArray(fileOrProtocal);    	byte[] verbBytes = stringToByteArray(verb);    	    	byte[] queryResult = AssocQueryString(fileOrProtocalBytes, verbBytes);		if (queryResult != null) {			if ((queryResult.length == 1) && (queryResult[0] == 0) && (queryResult.equals("")) ){				return null;			} else {				return byteArrayToString(queryResult);			}		} else {			return null;		}    }	/**	 * Resolves the target file from a link file.	 * 	 * @param filePath The path name of the given file.	 * @return The target file path name.	 */	public static String WinResolveLinkFile(String filePath) {		byte[] filePathBytes = stringToByteArray(filePath);		return resolveLinkFile(filePathBytes);	}    	/**	 * Launch the application for the given file.	 * @param filePath Path name of the given file.	 * @param verb Specify the verb to be executed.	 * @return true if succeed.	 */	public static boolean WinShellExecute(String filePath, String verb) {		byte[] filePathBytes = stringToByteArray(filePath);		byte[] verbBytes = stringToByteArray(verb);		int exeResult = shellExecute(filePathBytes, verbBytes);		if (exeResult > 32) {			return true;			} else {			return false;		}	}		public static boolean WinBrowseURLInIE(String urlStr, String target) {		return nativeBrowseURLInIE(urlStr, target);	}	/**	 * Opens the system default mailer with relevant information filled in.	 * 	 * @param toArray the email address array of the "To" field.	 * @param ccArray the email address array of the "Cc" field.	 * @param bccArray the email address array of the "Bcc" field.	 * @param subject the string of the "Subject" field.	 * @param body the string of the "Body" field.	 * @param attachArray the array of the abosolute paths of the attached files.	 */	public static synchronized void WinOpenMapiMailer(String[] toArray, String[] ccArray, 		String[] bccArray, String subject, String body, String[] attachArray) {		openMapiMailer(toArray, ccArray, bccArray, subject, body, attachArray);					}}  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?