獲取PC硬體資訊方法一:利用Java Applet
Java Applet可以執行在網頁上面,實現功能是通過呼叫Java來獲取本地硬碟資訊,前提是本機必須安裝Java環境才能執行,不然會提示你安裝。
下面是程式碼:
package com.test; import java.applet.Applet; import java.awt.Graphics; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.NetworkInterface; public class HardWareUtils extends Applet{ public HardWareUtils(){ } private static final long serialVersionUID = 1L; @Override public void paint(Graphics paint) { super.paint(paint); paint.drawString("獲取硬體資訊", 10, 10); paint.drawString("CPU SN:" + HardWareUtils.getCPUSerial(), 10, 30); paint.drawString("主機板 SN:" + HardWareUtils.getMotherboardSN(), 10, 50); paint.drawString("C盤 SN:" + HardWareUtils.getHardDiskSN("c"), 10, 70); paint.drawString("MAC SN:" + HardWareUtils.getMac(), 10, 90); } /** * 獲取主機板序列號 * * @return */ public static String getMotherboardSN() { String result = ""; try { File file = File.createTempFile("realhowto", ".vbs"); file.deleteOnExit(); FileWriter fw = new java.io.FileWriter(file); String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n" + "Set colItems = objWMIService.ExecQuery _ \n" + " (\"Select * from Win32_BaseBoard\") \n" + "For Each objItem in colItems \n" + " Wscript.Echo objItem.SerialNumber \n" + " exit for ' do the first cpu only! \n" + "Next \n"; fw.write(vbs); fw.close(); Process p = Runtime.getRuntime().exec( "cscript //NoLogo " + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader(p .getInputStream())); String line; while ((line = input.readLine()) != null) { result += line; } input.close(); } catch (Exception e) { e.printStackTrace(); } return result.trim(); } /** * 獲取硬碟序列號 * * @param drive * 碟符 * @return */ public static String getHardDiskSN(String drive) { String result = ""; try { File file = File.createTempFile("realhowto", ".vbs"); file.deleteOnExit(); FileWriter fw = new java.io.FileWriter(file); String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n" + "Set colDrives = objFSO.Drives\n" + "Set objDrive = colDrives.item(\"" + drive + "\")\n" + "Wscript.Echo objDrive.SerialNumber"; // see note fw.write(vbs); fw.close(); Process p = Runtime.getRuntime().exec( "cscript //NoLogo " + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader(p .getInputStream())); String line; while ((line = input.readLine()) != null) { result += line; } input.close(); } catch (Exception e) { e.printStackTrace(); } return result.trim(); } /** * 獲取CPU序列號 * * @return */ public static String getCPUSerial() { String result = ""; try { File file = File.createTempFile("tmp", ".vbs"); file.deleteOnExit(); FileWriter fw = new java.io.FileWriter(file); String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n" + "Set colItems = objWMIService.ExecQuery _ \n" + " (\"Select * from Win32_Processor\") \n" + "For Each objItem in colItems \n" + " Wscript.Echo objItem.ProcessorId \n" + " exit for ' do the first cpu only! \n" + "Next \n"; fw.write(vbs); fw.close(); Process p = Runtime.getRuntime().exec( "cscript //NoLogo " + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader(p .getInputStream())); String line; while ((line = input.readLine()) != null) { result += line; } input.close(); file.delete(); } catch (Exception e) { e.fillInStackTrace(); } if (result.trim().length() < 1 || result == null) { result = "無CPU_ID被讀取"; } return result.trim(); } /** * 獲取MAC地址 */ public static String getMac() { try { byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < mac.length; i++) { if (i != 0) { sb.append("-"); } String s = Integer.toHexString(mac[i] & 0xFF); sb.append(s.length() == 1 ? 0 + s : s); } return sb.toString().toUpperCase(); } catch (Exception e) { return ""; } } }
執行效果如下:
注意:如果直接在Eclipse裡面執行正常,如果嵌入到網頁中想要正常獲取必須進行簽名。
對Java Applet進行簽名的方法如下:
怎樣對java小程式簽名受到很多人的關注,網上也有這些方面可供參考的文件,但都不是完整,在這裡我給出一份可具體操作的文件,希望能給大家一些幫助。 場景:test.jar:內含待簽名的java小程式 結果:簽名後,客戶端能自動下載java小程式,且java小程式能訪問客戶端的任何資源
步驟:
(1)將java小程式打包
jar cvf test.jar test.class
(2)生成名為chinani.store的金鑰庫,別名為chinani
keytool -genkey -keystore chinani.store -alias chinani
密碼:123456 (根據需要自己輸入) 以下根據需要輸入,最後確認:y
(3)匯出chinani.cer數字證書
keytool -export -keystore chinani.store -alias chinani -file chinani.cer
密碼:123456 (根據需要自己輸入)
(4)對test.jar檔案進行簽名
jarsigner -keystore chinani.store test.jar chinani
密碼:123456 (根據需要自己輸入)
最後寫一個html檔案,執行此檔案即可自動下載安裝執行java小程式HTML檔案內容如下:
<applet code=Test
archive="Test.jar"
width=320 height=300>
</applet>