<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    好好生活,努力工作,天天向上!

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

        最近在做一個(gè)客戶(hù)端監(jiān)控的功能,需要提取用戶(hù)電腦的CPU編號(hào)和網(wǎng)卡的編號(hào),采集用戶(hù)的登陸數(shù)據(jù),據(jù)我所知道直接通過(guò)Java來(lái)調(diào)用操作系統(tǒng)的信息是非常困難的事情(我好像沒(méi)有發(fā)現(xiàn)JavaAPI提供了這個(gè)功能),那這樣的話只能通過(guò)JNI訪問(wèn)系統(tǒng)的信息了,不過(guò)有個(gè)SWT擴(kuò)展的插件org.eclipse.swt.extension封裝了調(diào)用DLL的JNI方法,主要是負(fù)責(zé)底層操作系統(tǒng)的方法,不過(guò)可能會(huì)對(duì)程序的跨平臺(tái)性有點(diǎn)的影響,目前只能使用于Windows操作系統(tǒng),使用方法很簡(jiǎn)單,接下來(lái)請(qǐng)看:
     
       我們可以從http://www.sourceforge.net 上下載這個(gè)插件,直接搜索 swt extension 就可以搜到,新建一個(gè)工程,比如名稱(chēng)叫org.vwpolo.extend.example,這里要新建成一個(gè)插件項(xiàng)目,如果新建成個(gè)簡(jiǎn)單的Java工程的時(shí)候會(huì)出現(xiàn)個(gè)找不到類(lèi)的異常java.lang.NoClassDefFoundError: org/eclipse/swt/internal/win32/OS,項(xiàng)目新建好了后我們可以寫(xiě)個(gè)類(lèi)來(lái)測(cè)試一下,我寫(xiě)的測(cè)試類(lèi)為:

     1 import org.eclipse.swt.internal.extension.Extension;
     2 
     3 /**
     4  * 獲得操作系統(tǒng)的信息  。 
     5  * @author 劉堯興
     6  * <p>2009-6-3</p>
     7  */
     8 public class GetOSInfoApp {
     9   public static void main(String[] args) {
    10     System.out.println("計(jì)算機(jī)名稱(chēng): "+Extension.GetComputerName());
    11     System.out.println("系統(tǒng)登陸帳號(hào): "+Extension.GetUserName());
    12     System.out.println("系統(tǒng)CPU編號(hào): " + Extension.GetCPUID());
    13     System.out.println("系統(tǒng) MAC編號(hào): " + getMacId());
    14   }

            public static String getMacID() {
              int[] macs = Extension.GetMACAddress(0);
              StringBuffer stringBuffer = new StringBuffer();
             for (int i = 0; i < macs.length; i++) {
                stringBuffer.append(getHexString(macs[i], 2).toUpperCase());
                if (i != macs.length - 1)
                stringBuffer.append("-");
            }
            return stringBuffer.toString();
    15 }
       /**
        * 將十進(jìn)制轉(zhuǎn)換成十六進(jìn)制  。
        * @author 劉堯興
        * @param value
        * @param length
        * @return String
       */
       public static String getHexString(int value, int length) {
           String valueStr = Integer.toHexString(value);
           if(valueStr.length() == length)
             return valueStr;
           if(valueStr.length() > length)
             return valueStr.substring(0, length);
           valueStr = "0000"+valueStr;
           return valueStr.substring(valueStr.length()-length);
         }
    16 

    這個(gè)類(lèi)功能相當(dāng)?shù)暮?jiǎn)單,我的項(xiàng)目的文件結(jié)構(gòu)為


     注意要使程序順利運(yùn)行,必須要導(dǎo)入 swt-extension-win32.dll 這個(gè)文件,由于文件下載下來(lái)后有三個(gè)DLL文件,還有兩個(gè)是swt-gdip-win32.dll和swt-win32.dll,如果將他們?nèi)繉?dǎo)入進(jìn)來(lái)結(jié)果會(huì)拋出個(gè)這樣的異常
    Exception in thread "main" java.lang.UnsatisfiedLinkError: org.eclipse.swt.internal.C.PTR_sizeof()I
           at org.eclipse.swt.internal.C.PTR_sizeof(Native Method)
           at org.eclipse.swt.internal.C.
    <clinit>(C.java:24)
           at org.vwpolo.extend.example.GetSystemInfoApp.main(GetSystemInfoApp.java:
    6)
    這個(gè)異常出現(xiàn)的原因是找不到DLL文件或者是多個(gè)DLL文件沖突所造成的,去掉其他的DLL文件只要導(dǎo)入swt-extension-win32.dll, 運(yùn)行,這是控制臺(tái)打印的結(jié)果:
    計(jì)算機(jī)名稱(chēng): THINKPAD
    系統(tǒng)登陸帳號(hào): vwpolo
    系統(tǒng)CPU編號(hào): BFEBFBFF00000F64
    -0000000000000000
    系統(tǒng) MAC編號(hào): 00-01-6C-44-C5-??
    不過(guò)值得注意的是用這個(gè)辦法在配置雙網(wǎng)卡的電腦上會(huì)運(yùn)行不正常,我這里就碰到獲取不到網(wǎng)卡的情況,如果你是使用JDK 6.0的話,現(xiàn)在可以通過(guò)這種方式獲得網(wǎng)卡信息:
      /**
       * JDK1.6新特性獲取網(wǎng)卡MAC地址
       * 
    @return String
       
    */
      
    private static String getMac() {
        
    try {
          Enumeration
    <NetworkInterface> el = NetworkInterface.getNetworkInterfaces();
          
    while (el.hasMoreElements()) {
            
    byte[] mac = el.nextElement().getHardwareAddress();
            
    if (mac == null)
              
    continue;

            StringBuilder builder 
    = new StringBuilder();
            
    for (byte b : mac) {
              builder.append(hexByte(b));
              builder.append(
    "-");
            }
            builder.deleteCharAt(builder.length() 
    - 1);
            
    return builder.toString();

          }
        }
        
    catch (Exception exception) {
          exception.printStackTrace();
        }
        
    return null;
      }
    posted on 2009-06-03 09:52 VWPOLO 閱讀(2299) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): Java 技術(shù)SWT JFace

    Feedback

    # re: 使用SWT擴(kuò)展調(diào)用操作系統(tǒng)的信息 2009-06-03 17:08 Always BaNg.
    其實(shí)swt extension 32的作者就在blogjava上

    cnfree.blogjava.net  回復(fù)  更多評(píng)論
      

    # re: 使用SWT擴(kuò)展調(diào)用操作系統(tǒng)的信息 2009-06-04 10:08 VWPOLO
    @Always BaNg.
    呵呵,BlogJava里面高手如云,很希望能認(rèn)識(shí)一下  回復(fù)  更多評(píng)論
      

    # re: 使用SWT擴(kuò)展調(diào)用操作系統(tǒng)的信息 2009-06-09 10:44 VWPOLO
    對(duì)了,用這個(gè)插件調(diào)用網(wǎng)卡信息好像得到的信息好像不正確,不知道新的版本會(huì)不會(huì)修正這個(gè)問(wèn)題  回復(fù)  更多評(píng)論
      

    # re: 使用SWT擴(kuò)展調(diào)用操作系統(tǒng)的信息[未登錄](méi) 2009-10-30 09:17 vwpolo
    對(duì)了,原來(lái)這個(gè)方式獲得的網(wǎng)卡信息是十進(jìn)制的,需要將它轉(zhuǎn)換成十六進(jìn)制的這樣才能在操作系統(tǒng)的命令行中輸入ipconfig顯示的信息一致  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 7777久久亚洲中文字幕蜜桃| 中文字幕不卡高清免费| 久久亚洲国产成人精品性色| 四虎亚洲国产成人久久精品| 国产av天堂亚洲国产av天堂| 在线毛片片免费观看| 亚洲AV噜噜一区二区三区| 亚洲精品福利网泷泽萝拉| 亚洲日韩精品射精日| 免费大黄网站在线观看| 日本高清免费网站| 18禁成年无码免费网站无遮挡| 7m凹凸精品分类大全免费| 国产大片免费天天看| 牛牛在线精品免费视频观看| 亚洲乱亚洲乱妇24p| 亚洲日韩在线观看| 国产一级淫片免费播放电影| 在人线av无码免费高潮喷水| 真正全免费视频a毛片| 亚洲国产成人片在线观看无码| 亚洲AV无码专区日韩| 最近中文字幕无免费| 永久免费av无码入口国语片| 中国性猛交xxxxx免费看| 美女被羞羞网站免费下载| 香蕉97碰碰视频免费| 免费国产黄网站在线观看动图| 4480yy私人影院亚洲| 精品日韩亚洲AV无码| 18gay台湾男同亚洲男同| 亚洲黄色在线播放| 亚洲欧洲自拍拍偷综合| 亚洲国产成人手机在线电影bd| 亚洲精品视频在线观看免费| 亚洲区视频在线观看| 亚洲中文字幕AV每天更新| 婷婷久久久亚洲欧洲日产国码AV| 亚洲AV无码欧洲AV无码网站| 久久精品国产亚洲av影院| 亚洲婷婷综合色高清在线|