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

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

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

    xhchc

    危波帆墻,笑談只在桃花上;與誰共尚,風(fēng)吹萬里浪; 相依相偎,不做黃泉想;莫惆悵,碧波潮生,一蕭自狂放……

     

    Java中操作Windows注冊表的代碼示例

    想做個東西,要獲IE的代理設(shè)置,看網(wǎng)上介紹基本都是讀取注冊表的方式,沒提到說借助于特定的 Win32 API。而 JDK 提供操作 Windows 的 API 也就是 Preferences,因為這個 API 也是跨平臺的,所功能比較弱,在 Win32 下只能用來操作 HKCUSoftwareJavaSoft 和 HKLMSoftwareJavaSoft 下及子節(jié)點的數(shù)據(jù)。

    自由訪問注冊表其他鍵的值光用 Java 是做不到的,必然方案就是 JNI,一開始也自己來實現(xiàn)這個 JNI 動態(tài)庫,后來懶了一下,想著網(wǎng)上應(yīng)該用現(xiàn)成的實現(xiàn),Google 了一下,果然不出所望,就是 http://www.trustice.com/java/jnireg/index.shtml 下的 registry-3.1.3.zip(包含源代碼)。可以利用它訪問、修改、導(dǎo)出注冊表項到文件等。解開 registry-3.1.3.zip,在 bin 目錄中可以看到兩個文件 ICE_JNIRegistry.dll 和 registry.jar,動態(tài)庫就是本地代碼實現(xiàn)。

    com.ice.jni.registry.Registry.main() 就是 registry 的示例代碼,動態(tài)庫 ICE_JNIRegistry.dll 也是在這個類的靜態(tài)塊中被加載的,記得要把 ICE_JNIRegistry.dll 放在它能夠被加載的位置上,比如你把 registry-3.1.3.zip 解壓到 c:registry-3.1.3,在命令行下你可以進(jìn)入到這個目錄中,并執(zhí)行

    c:registry-3.1.3>java -cp registry.jar com.ice.jni.registry.Registry ////ICE_JNIRegistry.dll 這個東西不知道放在哪,這個例子是我從網(wǎng)上找的,沒弄出來

    就可以在 command: 提示符下輸入命令操作注冊表了,輸入 help 會打印出所有能用指令:

    keys regKey -- print the key names
    values regKey -- print the value names
    data regKey subKey -- print the key's data
    string regKey subKey -- print REG_SZ key's string
    setbin regKey subKey  binaryString -- set REG_BINARY
    setdw regKey subKey int -- set REG_DWORD
    setstr regKey subKey string -- set REG_SZ
    setmulti regKey subKey semiColonString -- set REG_MULTI_SZ
    delkey regKey subKey -- delete key 'subKey' of regKey
    delval regKey subKey -- delete value 'subKey' of regKey
    export regKey fileName -- export registry key to fileName
    expand regKey valueName -- expand string value

     

    !! -- repeats last command
    $$ -- re-uses previous keyname
    Predefined Key Prefixes: (e.g. $0-9)
       $0=HKLMSystemCurrentControlSetcontrol
       $1=HKLMSoftware
       $2=HKLMSoftwareMiscrosoft
       $3=HKLMSoftwareMicrosoftWindowsCurrentVersion
       $4=HKLMSoftwareMicrosoftWindowsCurrentVersionProfileList
       $5=HKCUSoftware
       $6=HKCUSoftwareMicrosoft
       $7=HKCUAppEvents
       $8=HKCUAppEventsSchemes
       $9=HKCUAppEventsSchemes

    比如要讀取 IE 是否啟用代理設(shè)置就可以輸入指令

     

    command: data "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\" ProxyEnable

     

    顯示結(jié)果為:

     

    Value 'ProxyEnable' is [type=4,name=ProxyEnable]
    REG_DWORD '0' [x00000000]

     

    '0' 表示未啟用 IE 代理設(shè)置,如果啟用了代理設(shè)置,通過其他幾個字符串值可獲取到具體的代理設(shè)置。如

    command: data "%6\Windows\CurrentVersion\Internet Settings\" ProxyServer
    Value 'ProxyServer' is [type=1,name=ProxyServer]
    REG_SZ 'ftp=proxy.unmi.com:21;gopher=proxy.unmi.com:8080;http=proxy.unmi.com:8080;https=proxy.unmi.com:8080'

    上面用了一個內(nèi)置變量 %6 來代表 HKCUSoftwareMicrosoft。

     

    其他的指令,大家可以嘗試一下,這里我主要是關(guān)注于讀取鍵值的操作,接下來呢,我們來看看自己寫代碼如何來獲取鍵值。應(yīng)好好的參考 Registry 類的實現(xiàn)。

     

     

    1. package  com.unmi;   
    2.   
    3. import  com.ice.jni.registry.*;   
    4.   
    5. /**  
    6.  * @author Unmi  
    7.  */   
    8. public   class  RegistryManager   
    9. {   
    10.   
    11.      /**  
    12.      * @param args  
    13.      * @throws RegistryException   
    14.      * @throws NoSuchKeyException   
    15.      */   
    16.      public   static   void  main(String[] args)  throws  NoSuchKeyException, RegistryException   
    17.     {   
    18.         RegistryKey registryKey = Registry.openSubkey(Registry.HKEY_CURRENT_USER,   
    19.               "Software\Microsoft\Windows\CurrentVersion\Internet Settings" ,   
    20.              RegistryKey.ACCESS_READ);   
    21.         RegistryValue registryValue = registryKey.getValue( "ProxyEnable" );   
    22.          boolean  proxyEnable = ((RegDWordValue)registryValue).getData()!=  0 ;   
    23.            
    24.         System.out.println( "IE 是否啟用了代理設(shè)置: " +proxyEnable);   
    25.            
    26.          if (proxyEnable)   
    27.         {   
    28.             registryValue = registryKey.getValue( "ProxyServer" );   
    29.             System.out.println( "IE 代理服務(wù)器是: " + new  String(registryValue.getByteData()));   
    30.         }   
    31.     }   
    32. }  

     

    我在 IE 中為不同協(xié)議設(shè)置了代理后,執(zhí)行上面程序的輸出為(如果要取出 http 代理設(shè)置就分隔進(jìn)行字符串處理了):

     

    IE 是否啟用了代理設(shè)置: true
    IE 代理服務(wù)器是: ftp=proxy.unmi.com:21;gopher=proxy.unmi.com:8080;http=proxy.unmi.com:8080;https=proxy.unmi.com:8080

    如果對所有服務(wù)器均使用相同的代理服務(wù)器設(shè)置后,執(zhí)行上面程序的輸出為(默認(rèn)就是 http 代理設(shè)置了):

     

    IE 是否啟用了代理設(shè)置: true
    IE 代理服務(wù)器是: proxy.unmi.com:80

    大家可以繼續(xù)挖掘 registry 的修改鍵值及創(chuàng)建子鍵的功能。

    posted on 2008-08-06 20:43 chu 閱讀(531) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆檔案

    我的鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本久久久久亚洲中字幕| 亚洲欧美黑人猛交群| 亚洲综合网美国十次| 亚洲精品理论电影在线观看| 精品乱子伦一区二区三区高清免费播放| 德国女人一级毛片免费| 亚洲13又紧又嫩又水多| 中文字幕无码免费久久99| 亚洲精品国产精品乱码不卡√| 亚洲а∨天堂久久精品9966| 国产免费av片在线看| 亚洲精品无码专区在线| 免费国产综合视频在线看| 亚洲国产成人无码av在线播放| 在线播放免费人成视频网站 | 四虎在线最新永久免费| 亚洲成人免费在线观看| 久久精品成人免费国产片小草| 亚洲中文字幕不卡无码| 久久久久久久99精品免费| 亚洲黄色免费网站| 午夜成年女人毛片免费观看| 久久亚洲AV永久无码精品| 色偷偷亚洲男人天堂| 亚洲国产一成久久精品国产成人综合| 国产日韩在线视频免费播放| 亚洲AV日韩AV天堂一区二区三区| 久久国产精品成人片免费| 亚洲三级电影网址| 在线免费一区二区| 日韩大片在线永久免费观看网站| 日本媚薬痉挛在线观看免费| fc2成年免费共享视频网站| 亚洲精品老司机在线观看| 日本免费中文视频| 亚洲精华国产精华精华液网站| 中文字幕亚洲日韩无线码| 18勿入网站免费永久| 又硬又粗又长又爽免费看 | 无码的免费不卡毛片视频| 亚洲国产精品线在线观看|