2007年12月15日 星期六

限定繼承 與拋 棄繼承

 
 

限定繼承與拋棄繼承父債真的要子還嗎?

〔黃蓮瑛/吳姝叡〕

一、情境

        王富豪含著金湯匙出生,從小過著茶來伸手飯來張口的富裕生活,而他的父親為栽培他成材,特地將他送到英國留學,希望日後能接掌家族事業。
       
有一天,王富豪突然接到來自台灣的電話,通知他,他的父親因公司營運不善,為解決財務困難,向地下錢莊借錢周轉,最後,因為負擔不起高額的利息,公司宣佈倒閉,王富豪的父親承受不了打擊,所以,心臟病突發過世了。王富豪聞訊,立即連夜趕回台灣,處理父親的後事。
       
當他回到台灣時,地下錢莊上門,要求他及他的兩個妹妹還錢,並威脅王富豪說:「父債子還乃天經地義,如果不還錢,就要你們好看」。

二、問題

1.什麼叫做「限定繼承」?什麼情形下應該主張「限定繼承」?如何主張?
2.
什麼叫做「拋棄繼承」?什麼情形下應該主張「拋棄繼承」?如何主張?

三、解說

        依民法規定,當發生繼承事件時,遺產上的權利義務,因繼承開始(被繼承人死亡)就當然移轉給繼承人,繼承人不用做承受的意思表示。不過,這樣一來,如果被繼承人所留下來的債務大於財產時,一律要繼承人承擔,對於繼承人而言,十分不公平,所以,民法設計有「限定繼承」及「拋棄繼承」兩種制度,來保障繼承人的權益。
       
限定繼承」是指:繼承人只從因繼承所得的財產,來償還被繼承人債務,如果有不足,繼承人不需要用自己的財產來償還,如果有剩餘,則歸繼承人。而且繼承人中一人主張「限定繼承」時,其他繼承人也被認為已同樣主張「限定繼承」。
       
繼承人如果就繼承的遺產要主張「限定繼承」,繼承人需要在繼承開始時起,三個月內,開具包括被繼承人財產及債務的遺產清冊,向被繼承人死亡時的住所地法院呈報。當法院收到繼承人的呈報後,應依職權,依公示催告程序公告,命被繼承人的債權人,須於一定期間內,報明債權,而在此期間內,繼承人不得對被繼承人的任何債權人,償還債務。當期限屆滿後,如果債務未超過財產時,繼承人須全額償還債務,如果超過時,繼承人則應按數額,比例計算,以遺產分別償還。不過,如果繼承人有隱匿遺產、在遺產清冊為虛偽的記載或意圖詐害被繼承人的債權人而處分遺產,則他就會喪失限定繼承的利益,也就是他不得主張只從因繼承所得的財產,來償還被繼承人債務。
       
「拋棄繼承」是指:繼承人對於被繼承人的遺產拋棄繼承的權利。繼承人不得只就被繼承人遺產的一部分拋棄,而須就全部的遺產拋棄,此當然包括財產。
       
繼承人如果想要拋棄繼承權,應該在知道得為繼承之日起二個月內以書面向法院為之,並以書面通知因拋棄繼承而應為繼承人的人。一經向法院為拋棄繼承的通知後,溯及至繼承開始時發生拋棄的效力,也就是不取得被繼承人的權利及財產,也不負擔被繼承人的義務及債務。而拋棄繼承跟限定繼承不同的地方,是當繼承人中的一人拋棄時,其效力並不會及於其他繼承人。

四、結論

        「限定繼承」是指繼承人只從因繼承所得的財產,來償還被繼承人債務,如果有不足,繼承人不需要用自己的財產來償還,如果有剩餘,則歸繼承人。因此,當繼承人如果不了解被繼承人的財產及負債狀況,又不想用自己的財產償還被繼承的債務時,可於繼承開始時起,三個月內,開具包括被繼承人財產及債務的遺產清冊,向被繼承人死亡時的住所地法院呈報,主張「限定繼承」。
       
「拋棄繼承」則是指繼承人對於被繼承人的全部遺產(包括財產及債務)拋棄繼承的權利。當繼承人已清楚知道被繼承人的債務大於財產時,或者繼承人根本不想繼承遺產時,繼承人可以在得為繼承之日起二個月內以書面向法院為拋棄繼承的主張,並書面通知因拋棄繼承而應為繼承人的人。
       
如果王富豪不確定他的父親所留下來的遺產,財產是否大於債務,也不想「父債子還」的話,他可以選擇「限定繼承」。如果王富豪已清楚知道他的父親所留下來的遺產,債務大於財產,則直接可以選擇「拋棄繼承」,不必選擇「限定繼承」,以免去主張「限定繼承」後,繁雜的後續處理程序。

 

相關法條

民法第一一五四條至第一一六三條;第一一七四條至第一一七六條之一。

 

 

 

如何辦理限定繼承

一、意義

  限定繼承乃繼承人限定以因繼承所得的遺產,償還被繼承人債務之意思表示。其責任僅限於遺產而已,雖被繼承人之債務超過遺產,繼承人亦無須以其自己之固有財產為清償。(民法第1154條)

二、期間
  (一)民法第1156六條:3個月期間。

  1.為限定之繼承者,應於繼承開始時起,3個月內,開具遺產清冊陳報法院。

 

  2.前項3個月期限,「法院」因繼承人之聲請,認為必要時,得延展之。

 

  3.此3個月之起算點,為「繼承開始時」。至於繼承人是否知悉繼承開始,則在所不問。

  (二)民法第1176條第7項:2個月期間。

  1.因他人之拋棄繼承而應為繼承之人,其限定繼承時,應於知悉其得繼承之日起2個月內為之。

 

  2.其起算點,為「自知悉其得繼承之日」,與��之一般情形有所不同。

三、方式
    限定繼承雖係保護繼承人而設,但對被繼承人之債權人影響甚大,自不能不規定其為一種「要式行為」。
  (一)開具遺產清冊

  「遺產清冊」乃記載非專屬於被繼承人本身之一切權利義務之簿冊,亦即就遺產所編製之財產目錄之謂。因為限定繼承係以因繼承所得之遺產為限,償還被繼承人之債務,則被繼承人之積極財產及消極財產如何,自應明確登載,使法院及利害關係人得以明瞭其情形,從而予以監督。並且應記載被繼承人之財產狀況(包括積極財產、消極財產)及繼承人已知之債權人、債務人。

  (二)呈報法院

  1.此之『法院』,依非訟事件法第76條規定,係指由繼承開始時被繼承人住所地法院。

 

  2.除開具遺產清冊外,陳報書應記載陳報人、被繼承人之姓名及最後住所、為限定繼承之意旨;如有其他繼承人者其姓名、性別、出生年月日、住居所。

  3.法院受理限定繼承之呈報時,應依公示催告程序公告,命被繼承人之債權人於一定期限內(此一定期限不得在3個月以下)報明其債權。(民法第1157條)。

四、效力
  (一)繼承人負有限責任

  限定繼承之繼承人雖繼承被繼承人之全部債務,但僅以其繼承所得之積極財產為限度,負其清償之責,而不以自己固有財產償還被繼承人之債務,僅負「有限責任」,且為以「遺產」為限度之「物的有限責任」。

  (二)財產分離的效果

  限定繼承既僅以其繼承所得之積極財產為限度,而償還繼承債務之態樣,則繼承財產與繼承人固有財產,即應予以嚴格分離,是故民法第1154條第3項規定,為限定繼承者,其對於被繼承人之權利義務,不因繼承而消滅,此為限定繼承之特徵。

  (三)共同繼承人視為「同為限定繼承」

  民法第1154條第2項規定,繼承人有數人,其中一人主張為限定繼承時,其他繼承人視為同為限定之繼承。此對其他繼承人並無任何不利益。

五、遺產之清算
  (一)公示催告

  1.繼承人為限定繼承之呈報後,依民法第1157條規定,法院應即開始公示催告程序公告,依民事訴訟法所定公示催告程序規定以裁定方式為之,聲請人於收受裁定後,依裁定所定之期間內登載公報、新聞紙或其他相類之傳播工具,如未依所定期間內登載者,視為撤回公示催告之聲請(民事訴訟法第542條)。該公示催告之內容係記載ぇ聲請人え申報權利之期間及在期間內應為申報之催告、ぉ因不申報權利而生之失權效果、お法院。

 

  2.關於申報權利期間,民事訴訟法第543條規定固為2個月以上,但為保護繼承債權人及受遺贈人之權利,民法第1157條特別規定不得在3個月以下,此部分應優先適用。

  (二)依法定程序清償債務、交付遺贈

  1.依民法第1158條規定,限定繼承人在前述公示催告債權所定之一定期限內,不得對於被繼承人之任何債權人償還債務,以確保繼承債權人之公平受償,因此,若公示催告程序期限已滿,自應依法定程序清償債務、交付遺贈。

 

  2.清償交付之順序

 

  (1)有優先權之債權:指依法律規定對遺產有優先受償權之債權而言,如抵押權、留置權等。此等權利無須於所定之一定期限內報明其債權,惟行使優先權之結果,就特定遺產不能受完全之清償時,其未能受償之殘餘債權,即與普通債權無異。

 

  (2)普通債權:於所定之一定期限內屆滿後,繼承人對於該一定期限內報明之債權及雖未依限報明但為繼承人所已知之債權,於清償有優先權之債權後,如有剩餘遺產,均應按其數額,比例計算分別償還之。

 

  (3)遺贈之交付:依民法第1160條規定,繼承人非依ぇえ所述償還債務後,不得對受遺贈人交付遺贈。惟僅限「遺贈」,若係被繼承人生前之贈與,則應解為普通債權之一,而有え之適用。

 

  (4)未依期限報明債權而又為繼承人所不知者,則該債權人,僅得就剩餘財產行使其權利(民法第1162條)。

  (三)違反清算程序之賠償責任(民法第1161條)

  1.繼承人違反民法第1157條至第1160條之規定,致被繼承人之債權人受有損害者,應負賠償之責。

 

  2.前項受有損害之人,對於不當受領之債權人或受遺贈人,得請求返還不當受領之數額,以符合公平償付之意旨。其請求權行使之期間,為民法第125條所定之一般期間(即15年)。

 

 

辦理拋棄繼承的手續為何

 

撰文:莊守禮律師







  按民法第一千一百四十七條規定:「繼承,因被繼承人死亡而開始。」,繼承人之所以依法成為繼承人,係因為被繼承人發生死亡之事實,在被繼承人死亡之前,是沒有所謂「繼承權」的存在,因此,若有人書立契約書、同意書、切結書之類的文件,聲明放棄將來對某某人之繼承權,這種聲明是不生拋棄繼承之效力的,或是有人為躲避債務,想預先辦理拋棄繼承之手續,以避免將來因繼承所得來之遺產被債權人查封拍賣,這也是天方夜譚,因為法院絕不會准其辦理這樣的手續,究其原因無他,只因為被繼承人尚未死亡,根本就不發生繼承之事實,當然無從辦起。   



  但是一旦被繼承人發生死亡之事實,而開始「繼承」之法律關係時,若明顯發現被繼承人所負之債務遠大於其所留之遺產,此時為了避免因繼承之發生而使自己因為是法定繼承人之身分而突然揹負龐大不可預知之債務,就絕對有必要趕快辦理拋棄繼承之手續,才能免去繼承債務纏身之後果,惟民法第一千一百七十四條第一項規定:「繼承人得拋棄其繼承權。」,第二項規定:「前項拋棄,應於知悉其得繼承之時起二個月內以書面向法院為之。並以書面通知因其拋棄而應為繼承之人。但不能通知者,不在此限。」,法條規定看起來是很明確,但是程序上要如何辦理卻不清楚,真正遇到要辦時該如何去辦,恐怕會是個大問題,所以便以此專篇來介紹辦理拋棄繼承之手續。



壹、應先備齊之文件:



一、被繼承人死亡證明書或除戶戶籍謄本(即辦畢被繼承人死亡登記之後再領取之戶籍謄本,其上有被繼承人死亡登記之記事)。



二、要辦理拋棄繼承之人的印鑑證明、戶籍謄本(代位繼承人要拋棄繼承時應一併檢附原應繼承之人的戶籍謄本,如此才能看出彼此的關係)。



三、繼承系統表(應製作至因拋棄繼承而為應繼承之人全部列入為妥)。



四、拋棄繼承之書面(可自行書寫聲明拋棄繼承之聲明書、拋棄書之類,只要聲明拋棄繼承之旨即可,不得附條件,簽名並需蓋用印鑑章)。



五、向因拋棄而成為應繼承之人為通知之證明(不能通知者不在此限)。



六、備具「民事狀紙」向法院聲請辦理。



貳、辦理之程序:



一、以書面先行通知因拋棄而應為繼承之人:



繼承人因為法律規定繼承順位之關係而有繼承先後之別,順位在前之繼承人繼承後,後順位之繼承人便無繼承之問題,亦無繼承之可能,若繼承順位在前之繼承人全部拋棄繼承時,則順位在後者便遞補成為應繼承之人,因而形成當順位在前之繼承人全部辦理拋棄繼承之時,亦同時將產生另一批應為繼承之人,為使該等因他人拋棄繼承而成為繼承人之人亦有機會辦理拋棄繼承之手續以避免繼承債務,並考量此權利之行使期限係自知悉其成為繼承人之時起算二個月內,故為免權利狀態不明之時間遷延過久,所以便要求拋棄繼承之人須以書面通知因拋棄而應為繼承之人,雖然本法條是將以書面通知之規定定在「以書面向法院為之」之後,但是法院在接到當事人之民事聲請狀時,卻將是否已以書面通知因拋棄而應為繼承之人之「書面」,列為審查准許與否之必要文件,如有欠缺,則通知當事人就此應為補正,為使辦理之程序順暢,所以應先發出通知之書面,並將該書面一併附入聲請狀作為證據之一為妥。



最好是以存證信函為通知之證明,附例稿如下:



 存證信函:



   敬啟者:緣被繼承人○○○不幸於民國○○年○○月○○日去世,本人等為其直系血親卑親屬而為第一順位之繼承人,惟被繼承人生前因經商失敗,在外積欠龐大之債務,所留之遺產絕不足清償其所留債務,是本人等幾經思量後決議辦理拋棄繼承之手續,而本人等拋棄繼承之後, 台端等即成為應繼承之人,爰依法為前述拋棄繼承之通知,並請 台端自行依法行使權利,以免受到損害,順頌時祺。



二、製作拋棄繼承聲明書:



聲明書:



  緣被繼承人○○○於民國○○年○○月○○日去世,聲明人等為其直系血親卑親屬及配偶而依法為第一順位之繼承人,惟因聲明人等無意繼承被繼承人之一切權利及義務,是特此聲明拋棄繼承權。



                立聲明書人:○○○  (簽名、蓋印鑑章)     



                      ○○○  (簽名、蓋印鑑章)



                      ○○○  (簽名、蓋印鑑章)







三、向法院提出民事書狀聲明拋棄繼承:



民事書狀:



民事 聲明拋棄繼承 狀



聲明人(即繼承人) ○○○ 住○○縣○○市○○路○○號



          ○○○ 住同右



    ○○○ 住同右



為具狀聲明拋棄繼承事: 



緣被繼承人○○○於民國○○年○○月○○日死亡,聲明人○○○係被繼承人之配偶,○○○及○○○二人則為被繼承人之子,聲明人等為被繼承人之第一順位繼承人,惟查,被繼承人○○○生前似曾向地下錢莊借貸不明數額之金錢,因而時有債權人上門找尋要求清償,致聲明人等困擾叢生,倘進行清償亦不知其金額上限多寡,且勢將影響原本小康之生活而致頓陷困境,是以聲明人等即有於法定二個月之期間內具狀聲明拋棄繼承,藉以免除繼承債務之必要,爰提呈被繼承人除戶謄本及聲明人等之戶籍謄本(證一),並檢具拋棄繼承聲明書(證二)、繼承系統表(證三)及已向因拋棄繼承而為應繼承之人通知之存證信函乙份(證四),狀請



鈞院鑒核,賜准予備查拋棄繼承之聲明,實為德便。



證據:



證一:戶籍謄本及除戶謄本正本三份。



證二:拋棄繼承聲明書。



證三:繼承系統表。



證四:存證信函乙份。



   謹     狀



台灣○○地方法院民事庭  公鑒



中    華    民    國    八十九 年   月     日



                 具狀人:○○○



                     ○○○



                     ○○○



                     



                   



參、向法院送狀之後,如格式及證據文件沒有問題,則法院依法會回覆一紙通知函,待接獲法院該紙通知函時,即表示拋棄繼承之手續業已辦妥,該函之內容略以:



台灣○○地方法院民事庭通知               股別:○



受文者:(即聲明人)                  文號:略 



主 旨:本件拋棄繼承准予備查。



說 明:台端○○年○○月○○日拋棄繼承狀陳稱:於○○年○○月○○日知悉對於



    被繼承人○○○(亡)自○○年○○月○○日開始繼承,表示拋棄一節,核



    與民法第一千一百七十四條規定,尚無不合,准予備查。

 

2007年12月14日 星期五

[轉貼]正則表達式學習筆記

 
[轉貼]正則表達式學習筆記

1、正則表達式的三種形式
首先我們應該知道 Perl 程序中,正則表達式有三種存在形式,他們分別是:

匹配:m/<regexp>/ (還可以簡寫為 /<regexp>/ ,略去 m)

替換:s/<pattern>/<replacement>/

轉化:tr/<pattern>/<replacemnt>/

這 三種形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整條語句中讀作 does,"!~" 表示不匹配,在整條語句中讀作 doesn't),並在左側有待處理的標量變量。如果沒有該變量和 =~ !~ 操作符,則默認為處理 $_ 變量中的內容。
另外還有:

foreach (@array) { s/a/b/; } # 此處每次循環將從 @array 數組中取出一個元素存放在 $_ 變量中,並對 $_ 進行替換處理。
while (<FILE>) { print if (m/error/); } # 這一句稍微複雜一些,他將打印 FILE 文件中所有包含 error 字符串的行。

替換操作 s/<pattern>/<replacement>/ 還可以在末尾加上 e 或 g 參數,他們的含義分別為:

s/<pattern>/<replacement>/g 表示把待處理字符串中所有符合 <pattern> 的模式全部替換為 <replacement> 字符串,而不是只替換第一個出現的模式。
s/<pattern>/<replacement>/e 表示將把 <replacemnet> 部分當作一個運算符,這個參數用的不多。

2 正則表達式中的常用模式
下面是正則表達式中的一些常用模式。

/pattern/  結果 
. 匹配除換行符以外的所有字符
x? 匹配 0 次或一次 x 字符串
x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次數
x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次數
.* 匹配 0 次或一次的任何字符
.+ 匹配 1 次或多次的任何字符
{m} 匹配剛好是 m 個 的指定字符串
{m,n} 匹配在 m個 以上 n個 以下 的指定字符串
{m,} 匹配 m個 以上 的指定字符串
[] 匹配符合 [] 內的字符
[^] 匹配不符合 [] 內的字符
[0-9] 匹配所有數字字符
[a-z] 匹配所有小寫字母字符
[^0-9] 匹配所有非數字字符
[^a-z] 匹配所有非小寫字母字符
^ 匹配字符開頭的字符
$ 匹配字符結尾的字符
\d 匹配一個數字的字符,和 [0-9] 語法一樣
\d+ 匹配多個數字字符串,和 [0-9]+ 語法一樣
\D 非數字,其他同 \d
\D+ 非數字,其他同 \d+
\w 英文字母或數字的字符串,和 [a-zA-Z0-9] 語法一樣
\w+ 和 [a-zA-Z0-9]+ 語法一樣
\W 非英文字母或數字的字符串,和 [^a-zA-Z0-9] 語法一樣
\W+ 和 [^a-zA-Z0-9]+ 語法一樣
\s 空格,和 [\n\t\r\f] 語法一樣
\s+ 和 [\n\t\r\f]+ 一樣
\S 非空格,和 [^\n\t\r\f] 語法一樣
\S+ 和 [^\n\t\r\f]+ 語法一樣
\b 匹配以英文字母,數字為邊界的字符串
\B 匹配不以英文字母,數值為邊界的字符串
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
abc 匹配含有 abc 的字符串
(pattern) () 這個符號會記住所找尋到的字符串,是一個很實用的語法。第一個 () 內所找到的字符串變成 $1 這個變量或是 \1 變量,第二個 () 內所找到的字符串變成 $2 這個變量或是 \2 變量,以此類推下去。 
/pattern/i i 這個參數表示忽略英文大小寫,也就是在匹配字符串的時候,不考慮英文的大小寫問題。
\ 如果要在 pattern 模式中找尋一個特殊字符,如 "*",則要在這個字符前加上 \ 符號,這樣才會讓特殊字符失效
3、正則表達式的八大原則
  如果在 Unix 中曾經使用過 sed、awk、grep 這些命令的話,相信對於正則表達式(Regular Expression)不會感到陌生。下面給大家介紹幾條正則表達式使用過程中的 8 大原則。

正則表達式在對付數據的戰鬥中可形成龐大的聯盟——這常常是一場戰爭。我們要記住下面八條原則:

· 原則1:正則表達式有三種不同形式(匹配(m/ /),替換(s/ / /eg)和轉換(tr/ / /))。

· 原則2:正則表達式僅對標量進行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 將把@array作為標量對待,因此可能不會成功)。

· 原則3:正則表達式匹配一個給定模式的最早的可能匹配。缺省時,僅匹配或替換正則表達式一次( $a = 'string string2'; $a =~ s/string/ /; 導致 $a = 'string 2')。

· 原則4:正則表達式能夠處理雙引號所能處理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb擴展為變量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等價於 $a =~ s/a/ /; ,執行結果使 $a = " s" )。

· 原則5:正則表達式在求值過程中產生兩種情況:結果狀態和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出現,$a =~ s/(word1)(word2)/$2$1/ 則「調換」這兩個單詞。

· 原則6:正則表達式的核心能力在於通配符和多重匹配運算符以及它們如何操作。$a =~ m/\w+/ 匹配一個或多個單詞字符;$a =~ m/\d/" 匹配零個或多個數字。

· 原則7:如果欲匹配不止一個字符集合,Perl使用 "|" 來增加靈活性。如果輸入 m/(cat|dog)/ 則相當於「匹配字符串 cat 或者 dog。

· 原則8:Perl用 (?..) 語法給正則表達式提供擴展功能。

(想要學習所有這些原則?我建議大家先從簡單的開始,並且不斷的嘗試和實驗。

[轉貼]shell.Application列目錄及文件屬性

[轉貼]shell.Application列目錄及文件屬性
SUB GetFolder(FolderName)
 Const She = "Shell"
 Const APP = "Application"
dim FileContent,FileNameString
set sl=createobject(CreateProgID(She,APP))
XA = FolderName
if (XA <> "") then
 set fod1=sl.namespace(XA)
 set foditems=fod1.items
 for each co in foditems
 If co.isfolder Then wscript.echo co.path & VBCRLF
 next
End If
End Sub

Function CreateProgID(Var1,Var2)
CreateProgID = Var1 & "." & Var2
End Function

GetFolder("C:\")
GetFiler("c:\Release\")
SUB GetFiler(FolderName)
 
 Const She = "Shell"
 Const APP = "Application"
set sl=createobject(CreateProgID(She,APP))
XA = FolderName
if (XA <> "") then
 set fod1=sl.namespace(XA)
 set foditems=fod1.items
 
 for each co in foditems
 If Not co.isfolder Then wscript.echo Replace(Replace(Right(co.path,Len(co.path) - Len(XA)),"\",""),"/","")& "----" & co.size &"--------"&co.type&"-------"&co.ModifyDate&"------"&fod1.GetDetailsOf(co, 6)&VBCRLF
 Next
 
End If
End Sub

Dim arrHeaders(34)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("c:\Release\")
For i = 0 to 33
 arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
Next
For Each strFileName in objFolder.Items
 For i = 0 to 33
 Wscript.echo i & vbtab & arrHeaders(i) & ": " & objFolder.GetDetailsOf(strFileName, i)
 
 Next
Next

Set app= CreateObject("Shell.Application")
app.ShellExecute "cmd.exe","cmd /c ping www.haiyangtop.net","c:\","",1
set app=Nothing
'0 hide
'1 show
'2 min
'3 max

不用說了,第一個參數是「程序名」,第二個參數是「程序參數」,第三個參數是「路徑」,第四個參數「未知」,第五個參數如下表:

0 隱藏運行
1 正常運行
2 最小化運行
3 最大化運行

[轉貼]Stream、WshShell、WshUrlShortcut對象及Shell.Application的使用說明

[轉貼]Stream、WshShell、WshUrlShortcut對象及Shell.Application的使用說明

Kafree收集整理
來源:論壇轉載無法確定出處,如有版權問題請與我們聯繫


1.Stream對像

組件:"Adodb.Stream"
有下列方法:
Cancel 方法
   使用方法如下
   Object.Cancel
   說明:取消執行掛起的異步 Execute 或 Open 方法的調用。
Close 方法
   使用方法如下
   Object.Close
   :關閉對像
CopyTo 方法
   使用方法如下
   Object.CopyTo(destStream,[CharNumber])
   說明:將對像的數據複製,destStream指向要複製的對像,CharNumber為可選參數,指要複製的字節數,不選為全部複製。
Flush 方法
   使用方法如下
   Object.Flush
   說明:
LoadFromFile 方法
   使用方法如下
   Object.LoadFromFile(FileName)
   說明:將FileName指定的文件裝入對像中,參數FileName為指定的用戶名。
Open 方法
    使用方法如下
    Object.Open(Source,[Mode],[Options],[UserName],[Password])
    說明:打開對像,
    參數說明:Sourece 對像源,可不指定
Mode 指定打開模式,可不指定,可選參數如下:
   adModeRead =1
   adModeReadWrite =3
   adModeRecursive =4194304
   adModeShareDenyNone =16
   adModeShareDenyRead =4
   adModeShareDenyWrite =8
   adModeShareExclusive =12
   adModeUnknown =0
   adModeWrite =2
Options 指定打開的選項,可不指定,可選參數如下:
   adOpenStreamAsync =1
   adOpenStreamFromRecord =4
   adOpenStreamUnspecified=-1
  UserName 指定用戶名,可不指定。
  Password 指定用戶名的密碼
Read 方法
使用方法如下:
Object.Read(Numbytes)
說明:讀取指定長度的二進制內容。
參數說明:Numbytes指定的要讀取的找度,不指定則讀取全部。

ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
說明:讀取指定長度的文本
參數說明:NumChars指定的要讀取的找度,不指定則讀取全部。

SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
說明:將對像的內容寫到FileName指定的文件中
參數說明:FileName指定的文件
   Options 存取的選項,可不指定,可選參數如下:
    adSaveCreateNotExist =1
    adSaveCreateOverWrite =2

SetEOS 方法
使用方法如下:
Object.setEOS()
說明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
說明:
Write 方法
使用方法如下:
Object.Write(Buffer)
說明:將指定的數據裝入對像中。
參數說明:Buffer 為指定的要寫入的內容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
說明:將指定的文本數據裝入對像中。
參數說明:Data 為指定的要寫入的內容。
      Options 寫入的選項,可不指定,可選參數如下:
   adWriteChar =0
   adWriteLine =1

 

有下列屬性:
Charset
EOS 返回對像內數據是否為空。

LineSeparator 指定換行格式,可選參數有
  adCR  =13
  adCRLF  =-1
  adLF  =10

Mode 指定或返加模式。

Position 指定或返回對像內數據的當前指針。(新OPEN的:0)

Size 返回對像內數據的大小。

State 返加對像狀態是否打開。

Type 指定或返回的數據類型,可選參數為:
  adTypeBinary =1
  adTypeText =2

2.WshShell和WshUrlShortcut 對像

WshShell 對像
ProgID Wscript.Shell
文件名 WSHom.Ocx
CLSID F935DC22-1CF0-11d0-ADB9-00C04FD58A0B
IID F935DC21-1CF0-11d0-ADB9-00C04FD58A0B

下表說明和 WshShell 對像有關的屬性。

屬性 說明
Environment 返回 WshEnvironment 集合對象。
SpecialFolders 使用 WshSpecialFolders 對像提供對 Windows shell 文件夾的訪問,如桌面文件夾,開始菜單文件夾和個人文檔文件夾。

下表說明和 WshShell 對像有關的方法。

方法 說明
CreateShortcut 創建並返回 WshShortcut 對象。
ExpandEnvironmentStrings 擴展 PROCESS 環境變量並返回結果字符串。
Popup 顯示包含指定消息的消息窗口。
RegDelete 從註冊表中刪除指定的鍵或值。
RegRead 從註冊表中返回指定的鍵或值。
RegWrite 在註冊表中設置指定的鍵或值。
Run 創建新的進程,該進程用指定的窗口樣式執行指定的命令。

WshShell.Environment
Environment 屬性返回 WshEnvironment 對象。

語法
WshShell.Environment ( [strType]) = objWshEnvironment

註釋
若 strType 指定了環境變量所處的位置,可能值為 "System"、"User"、"Volatile" 和 "Process"。若未提供 strType,則該方法在 Windows NT 中檢索系統環境變量或在 Windows 95 中檢索進程環境變量。

對於 Windows 95,strType 參數僅支持 "Process"。

下列變量是由 Windows 操作系統提供的。腳本也可獲取由其他應用程序設置的環境變量。

名稱 說明
NUMBER_OF_PROCESSORS 計算機上運行的處理器數目。
PROCESSOR_ARCHITECTURE 用戶工作站使用的處理器類型。
PROCESSOR_IDENTIFIER 用戶工作站的處理器 ID。
PROCESSOR_LEVEL 用戶工作站的處理器級。
PROCESSOR_REVISION 用戶工作站的處理器版本。
OS 用戶工作站所用的操作系統。
COMSPEC 用於運行「命令提示」窗口的命令(通常為 cmd.exe)。
HOMEDRIVE 本地主驅動器(通常為 C 驅動器)。
HOMEPATH 用戶的默認路徑(在 Windows NT 上通常為 \users\default)。
PATH 路徑環境變量。
PATHEXT 可執行文件的擴展名(通常為 .com、 .exe、.bat 或 .cmd)。
PROMPT 命令提示符(通常為 $P$G)。
SYSTEMDRIVE 系統所在的本地驅動器(例如,c:\)。
SYSTEMROOT 系統目錄(例如,c:\winnt)。和 WINDIR 相同。
WINDIR 系統目錄(例如 c:\winnt)。和 SYSTEMROOT 相同。
TEMP 存儲臨時文件的目錄(例如,c:\temp)。用戶可更改。
TMP 存儲臨時文件的目錄(例如,c:\temp)。用戶可更改。

示例
' Retrieve the NUMBER_OF_PROCESSORS system environment variable
Set WshShell = Wscript.CreateObject("Wscript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")
Wscript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

請參閱
WshEnvironment 對像

WshEnvironment 對像
WshEnvironment 對像未直接給出,可用 WshShell.Environment 屬性來訪問。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID

下表描述與 WshEnvironment 對像關聯的屬性。

屬性 說明
Item 獲取或設置指定的環境變量值。
Count 枚舉項的數目。
length 枚舉項的數目 (JScript)。

下表描述與 WshEnvironment 對像關聯的方法。

方法 說明
Remove 刪除指定的環境變量。

WshShell.SpecialFolders
SpecialFolders 屬性提供 WshSpecialFolders 對像以便訪問 Windows 的 shell 文件夾,例如桌面文件夾、開始菜單文件夾和個人文檔文件夾。

語法
WshShell.SpecialFolders = objWshSpecialFolders

示例
' This code fragment shows how to access the desktop folder
Set WshShell = Wscript.CreateObject("Wscript.Shell")
MsgBox "Your desktop is " & WshShell.SpecialFolders("Desktop")
請參閱
WshSpecialFolders 對像

WshSpecialFolders 對像
該對像未直接給出。要得到 WshSpecialFolders 對象,請使用 WshShell.SpecialFolders 屬性。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID

下表描述與 WshSpecialFolders 對像關聯的屬性。

屬性 描述
Item 指定文件夾的完整路徑(默認)。
Count 枚舉項的數目。
length 枚舉項的數目 (JScript) 。

WshSpecialFolders.Item
Item 屬性返回由 strFolderName 指定的文件夾的完整路徑。它是默認屬性。

語法
WshShell.SpecialFolders.Item("strFolderName") = strFolderPath
WshShell.SpecialFolders("strFolderName") = strFolderPath

註釋
若請求的文件夾 (strFolderName) 不可用,則 WshShell.SpecialFolders("strFolderName") 返回 NULL。例如,Windows 95 沒有 AllUsersDesktop 文件夾,如果 strFolderName = AllUsersDesktop,則返回 NULL。

Windows 95 和 Windows NT 4.0 操作系統提供下列指定文件夾:
AllUsersDesktop
AllUsersStartMenu

AllUsersPrograms

AllUsersStartup

Desktop

Favorites

Fonts

MyDocuments

NetHood

PrintHood

Programs

Recent

SendTo

StartMenu

Startup

Templates

示例
' This fragment returns the full path for the Windows Desktop folder
Set WshShell = Wscript.CreateObject("Wscript.Shell")
StrMyDesktop = WshShell.SpecialFolders("Desktop")

' List all special folders
For Each strFolder In WshShell.SpecialFolders
MsgBox strFolder
Next

請參閱
WshShell.SpecialFolders 屬性

WshShell.CreateShortcut
CreateShortcut 方法創建 WshShortcut 對象並將其返回。如果快捷方式標題以 .url 結尾,就會創建 WshURLShortcut 對象。

語法
WshShell.CreateShortcut(strPathname) = objShortcut

示例
' This code fragment creates a shortcut
' to the currently executing script
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set oShellLink = WshShell.CreateShortcut("Current Script.lnk")
oShellLink.TargetPath = Wscript.ScriptFullName
oShellLink.Save
Set oUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL")
oUrlLink.TargetPath = "http://www.microsoft.com"
oUrlLink.Save

請參閱
WshShortcut 對像、WshUrlShortcut 對像

WshShortcut 對像
該對像未直接給出。要獲得 WshShortcut 對象,請使用 WshShell.CreateShortcut 方法。

ProgID N/A
文件名 WSHom.Ocx
CLSID F935DC28-1CF0-11d0-ADB9-00C04FD58A0B
IID F935DC27-1CF0-11d0-ADB9-00C04FD58A0B

下表說明和 WshShortcut 對像有關的屬性。

屬性 說明
Arguments 快捷方式對象的參數。
Description 快捷方式對象的說明。
Hotkey 快捷方式對象的熱鍵。
IconLocation 快捷方式對象的圖標位置。
TargetPath 快捷方式對象的目標路徑。
WindowStyle 快捷方式對象的窗口樣式。
WorkingDirectory 快捷方式對象的工作目錄。

下表說明與 WshShortcut 對像有關的方法。

方法 說明
Save 將快捷方式存儲到指定的文件系統中。

WshShortcut.Arguments
Arguments 屬性提供快捷方式對象的參數。

語法
WshShortcut.Arguments = strArguments

WshShortcut.Description
Description 屬性提供快捷方式對象的說明。

語法
WshShortcut.Description = strDescription

WshShortcut.Hotkey
HotKey 屬性提供快捷方式對象的熱鍵。熱鍵是啟動或切換程序的鍵盤快捷方式。

語法
WshShortcut.HotKey = strHotKey

註釋
strHotKey 的BNF語法如下:

Hotkey ::= modifier* keyname
modifier ::= "ALT+" | "CTRL+" | "SHIFT+" | "EXT+"
keyname ::= "A" .. "Z" |
"0".. "9" |
"Back" | "Tab" | "Clear" | "Return" |
"Escape" | "Space" | "Prior" | ...

所有鍵的名稱都可以在 WINUSER.H 中找到。熱鍵不區分大小寫。

熱鍵只能激活位於 Windows 桌面或 Windows「開始」菜單的快捷方式。

Windows 資源管理器不接受 ESC、ENTER、TAB、SPACE、PRINT SCREEN 或 BACKSPACE,即使 WshShortcut.Hotkey 遵循 Win32 API 支持它們。因此,建議在快捷方式中不要用這些鍵。

示例
Set WshShell = Wscript.CreateObject("Wscript.WshShell")
strDesktop = WshShell.SpecialFolders("Desktop")
Set oMyShortcut = WshShell.CreateShortcut(strDesktop & "\a_key.lnk")
OMyShortcut.TargetPath = "%windir%\notepad.exe"
oMyShortCut.Hotkey = "ALT+CTRL+F"
oMyShortCut.Save
Wscript.Echo oMyShortCut.HotKey = "Alt+Ctrl+F"

請參閱
WshSpecialFolders 對像

WshShortcut.IconLocation
IconLocation 屬性提供快捷方式對象的圖標位置。圖標位置的格式應為 "Path,index"。

語法
WshShortcut.IconLocation = strIconLocation

WshShortcut.TargetPath
TargetPath 屬性提供快捷方式對象的目標路徑。

語法
WshShort

WshUrlShortcut 對像
該對像未直接給出。要獲取 WshUrlShortcut 對象,可使用 WshShell.CreateShortcut 方法。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID

下表說明了和 WshUrlShortcut 對像有關的屬性。

屬性 說明
FullName URL 快捷方式對象的完整路徑。
TargetPath URL 快捷方式對象的目標路徑。

下表說明了和 WshUrlShortcut 對像有關的方法。

方法 說明
Save 將快捷方式保存到指定的文件系統中。

WshUrlShortcut.FullName
FullName 屬性提供快捷方式對象的完整路徑。

語法
WshUrlShortcut.FullName = strFullName

WshUrlShortcut.TargetPath
TargetPath 屬性提供快捷方式對象的目標路徑。

語法
WshUrlShortcut.TargetPath = strTargetPath

WshUrlShortcut.Save
Save 方法保存一個快捷方式,該快捷方式指向 FullName 屬性指定的位置。

語法
WshUrlShortcut.Save

WshShell.ExpandEnvironmentStrings
ExpandEnvironmentStrings 方法在 strString 中擴展 PROCESS 環境變量並返回結果字符串。變量被 '%' 字符括起。

環境變量不區分大小寫。

語法
WshShell.ExpandEnvironmentStrings(strString) = strExpandedString

示例
MsgBox "Prompt is " & WshShell.ExpandEnviromentStrings("%PROMPT%")

 

WshShell.Popup
Popup 方法顯示一個彈出式消息框窗口,消息框中包含的消息由 strText 指定。該消息框的窗口標題由 strTitle 指定。若 strTitle 省略,則窗口標題為 Windows Scripting Host。

語法
WshShell.Popup(strText, [natSecondsToWait], [strTitle], [natType]) = intButton

註釋
若提供 natSecondsToWait 且其值大於零,則消息框在 natSecondsToWait 秒後關閉。

natType 的含義與其在 Win32? MessageBox 函數中相同。下表顯示 natType 中的值及含義。下表中的值可以組合。

按鈕類型
值 說明
0 顯示「確定」按鈕
1 顯示「確定」和「取消」按鈕
2 顯示「終止」、「重試」和「忽略」按鈕
3 顯示「是」、「否」和「取消」按鈕
4 顯示「是」和「否」按鈕
5 顯示「重試」和「取消」按鈕

圖標類型
值 說明
16 顯示停止標記圖標
32 顯示問號圖標
48 顯示感歎號圖標
64 顯示信息標記圖標

以上兩個表並不涵蓋 natType 的所有值。完整的列表請參閱 Win32 文檔。

返回值 intButton 指示用戶所單擊的按扭編號。若用戶在 natSecondsToWait 秒之前不單擊按扭,則 intButton 設置為 -1 。

值 說明
1 「確定」按扭
2 「取消」按扭
3 「終止」按扭
4 「重試」按扭
5 「忽略」按扭
6 「是」按扭
7 「否」按扭

示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Popup "Where do you want to go today?"

請參閱
Wscript.Echo 方法

Wscript.Echo
Echo 方法在窗口(Wscript.exe 中)或「命令提示符」窗口(Cscript.exe 中)顯示參數。

參數用空格分隔。在 Cscript.exe 中,該方法在顯示最後一個參數之後輸出一對回車/換行(CR LF)。

語法
Wscript.Echo [anyArg...]

示例
Wscript.Echo
Wscript.Echo 1, 2, 3
Wscript.Echo "Windows Scripting Host is cool."

WshShell.RegDelete
RegDelete 從註冊表中刪除名為 strName 的鍵或值。

語法
WshShell.RegDelete strName

參數
strName
如果 strName 以反斜槓 (\) 結束,則該方法刪除鍵而不是值。
strName 參數必須以下列之一的根鍵名開始:

短根鍵名 長根鍵名
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG

示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegDelete "HKCU\ScriptEngine\Value" ' Delete value "Value"
WshShell.RegDelete "HKCU\ScriptEngine\Key\" ' Delete key "Key"

請參閱
WshShell.RegRead 方法、WshShell.RegWrite 方法

WshShell.RegRead
RegRead 方法返回名為 strName 的註冊表鍵或值。

語法
WshShell.RegRead(strName) = strValue

參數
strName
如果 strName 以反斜槓 (\) 結束,則該方法返回鍵,而不是值。
strName 參數必須以下列根鍵名開始。

Short Long
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG

註釋
RegRead 方法僅支持 REG_SZ、REG_EXPAND_SZ、REG_DWORD、REG_BINARY 和 REG_MULTI_SZ 數據類型。若註冊表有其他數據類型,RegRead 返回 DISP_E_TYPEMISMATCH。

示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegRead("HKCU\ScriptEngine\Val") ' Read from value "Val"
WshShell.RegRead("HKCU\ScriptEngine\Key\") ' Read from key "Key"

請參閱
WshShell.RegDelete 方法、WshShell.RegWrite 方法

WshShell.RegWrite
RegWrite 方法設置名為 strName 的註冊表鍵或值。

語法
WshShell.RegWrite strName, anyValue, [strType]

參數
strName
若 strName 以一個反斜槓 (\) 結束,則該方法設置鍵,而不是值。
strName 參數必須以下列根鍵名開頭。

Short Long
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG

 

anyValue
當 strType 為 REG_SZ 或 REG_EXPAND_SZ 時,RegWrite 方法自動將 anyValue 轉換為字符串。若 strType 為 REG_DWORD,則 anyValue 被轉換為整數。若 strType 為 REG_BINARY,則 anyValue 必須是一個整數。

strType
RegWrite 方法支持 strType 為 REG_SZ、REG_EXPAND_SZ、REG_DWORD 和 REG_BINARY。若其他的數據類型被作為 strType 傳遞,RegWrite 返回 E_INVALIDARG。
示例
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegWrite "HKCU\ScriptEngine\Value", "Some string value"
WshShell.RegWrite "HKCU\ScriptEngine\Key\", 1 "REG_DWORD"

請參閱
WshShell.RegDelete 方法、WshShell.RegWrite方法

WshShell.Run
Run 方法創建一個新的進程,該進程以 intWindowStyle 窗口樣式執行 strCommand。

語法
WshShell.Run (strCommand, [intWindowStyle], [blnWaitOnReturn])

參數
strCommand
在 strCommand 參數內部的環境變量被自動擴展。

intWindowStyle
這是為新進程在 STARTUPINFO 結構內設置的 wShowWindow 元素的值。其意義與 ShowWindow 中的 nCmdShow 參數相同,可取以下值之一。名稱 值 含義
SW_HIDE
0 隱藏窗口並激活另一窗口。
SW_MINIMIZE
6 最小化指定窗口並激活按 Z 序排序的下一個頂層窗口。
SW_RESTORE
9 激活並顯示窗口。若窗口是最小化或最大化,則恢復到原來的大小和位置。在還原應用程序的最小化窗口時,應指定該標誌。
SW_SHOW
5 以當前大小和位置激活並顯示窗口。
SW_SHOWMAXIMIZED
3 激活窗口並以最大化顯示該窗口。
SW_SHOWMINIMIZED
2 激活窗口並以最小化顯示該窗口。
SW_SHOWMINNOACTIVE
7 最小化顯示窗口。活動窗口保持活動。
SW_SHOWNA
8 以當前狀態顯示窗口。活動窗口保持活動。
SW_SHOWNOACTIVATE
4 按窗口最近的大小和位置顯示。活動窗口保持活動。
SW_SHOWNORMAL
1 激活並顯示一個窗口。若窗口是最小化或最大化,則恢復到其原來的大小和位置。

 

blnWaitOnReturn
如果未指定 blnWaitOnReturn 或其值為 FALSE,則該方法立即返回到腳本繼續執行而不等待進程結束。
若 blnWaitOnReturn 設為 TRUE,則 Run 方法返回由應用程序返回的任何錯誤代碼。如果未指定 blnWaitOnReturn 或其值為 FALSE,則 Run 返回錯誤代碼 0(zero)。

示例
' This fragment launches Notepad with the current executed script
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad " & Wscript.ScriptFullName)
WshShell.Run ("%windir%\notepad" & Wscript.ScriptFullName)

' This fragment returns the error code from the executed application
Return = WshShell.Run("notepad " & Wscript.ScriptFullName, 1, TRUE)

3. 關於Shell.Application的使用
3.1、創建 Shell 對像
var Shell = new ActiveXObject("Shell.Application");

3.2、使用 Shell 屬性及方法

Shell.Application
Shell.Parent

Shell.CascadeWindows()
Shell.TileHorizontally()
Shell.TileVertically()
Shell.ControlPanelItem(sDir) /* 比如:sysdm.cpl */
Shell.EjectPC()
Shell.Explore(vDir)
Shell.Open(vDir)
Shell.FileRun()
Shell.FindComputer()
Shell.FindFiles()
Shell.Help()
Shell.MinimizeAll()
Shell.UndoMinimizeALL()
Shell.RefreshMenu()
Shell.SetTime()
Shell.TrayProperties()
Shell.ShutdownWindows()
Shell.Suspend()
oWindows = Shell.Windows() /* 返回ShellWindows對像 */
fFolder = Shell.NameSpace(vDir) /* 返回所打開的vDir的Folder對像 */
oFolder = Shell.BrowseForFolder(Hwnd, sTitle, iOptions [, vRootFolder]) /* 選擇文件夾對話框 */
/*示例:
function BrowseFolder()
{
var Message = "清選擇文件夾";

var Shell = new ActiveXObject( "Shell.Application" );
var Folder = Shell.BrowseForFolder(0,Message,0x0040,0x11);
if(Folder != null)
{
Folder = Folder.items(); // 返回 FolderItems 對像
Folder = Folder.item(); // 返回 Folderitem 對像
Folder = Folder.Path; // 返回路徑
if(Folder.charAt(varFolder.length-1) != "\\"){
Folder = varFolder + "\\";
}
return Folder;
}
}
*/

/*示例:
var Folder = Shell.NameSpace("C:\\"); // 返回 Folder對像
*/

VARIANT數據類型

VARIANT 數據類型在文件OAIDL.IDL中定義如下:

struct tagVARIANT {
    union {
        struct __tagVARIANT {
            VARTYPE vt;
            WORD    wReserved1;
            WORD    wReserved2;
            WORD    wReserved3;
            union {
                ULONGLONG     ullVal;       /* VT_UI8               */
                LONGLONG      llVal;        /* VT_I8                */
                LONG          lVal;         /* VT_I4                */
                BYTE          bVal;         /* VT_UI1               */
                SHORT         iVal;         /* VT_I2                */
                FLOAT         fltVal;       /* VT_R4                */
                DOUBLE        dblVal;       /* VT_R8                */
                VARIANT_BOOL  boolVal;      /* VT_BOOL              */
                _VARIANT_BOOL bool;         /* (obsolete)           */
                SCODE         scode;        /* VT_ERROR             */
                CY            cyVal;        /* VT_CY                */
                DATE          date;         /* VT_DATE              */
                BSTR          bstrVal;      /* VT_BSTR              */
                IUnknown *    punkVal;      /* VT_UNKNOWN           */
                IDispatch *   pdispVal;     /* VT_DISPATCH          */
                SAFEARRAY *   parray;       /* VT_ARRAY             */
                BYTE *        pbVal;        /* VT_BYREF|VT_UI1      */
                SHORT *       piVal;        /* VT_BYREF|VT_I2       */
                LONG *        plVal;        /* VT_BYREF|VT_I4       */
                LONGLONG *    pllVal;       /* VT_BYREF|VT_I8       */
                FLOAT *       pfltVal;      /* VT_BYREF|VT_R4       */
                DOUBLE *      pdblVal;      /* VT_BYREF|VT_R8       */
                VARIANT_BOOL *pboolVal;     /* VT_BYREF|VT_BOOL     */
                _VARIANT_BOOL *pbool;       /* (obsolete)           */
                SCODE *       pscode;       /* VT_BYREF|VT_ERROR    */
                CY *          pcyVal;       /* VT_BYREF|VT_CY       */
                DATE *        pdate;        /* VT_BYREF|VT_DATE     */
                BSTR *        pbstrVal;     /* VT_BYREF|VT_BSTR     */
                IUnknown **   ppunkVal;     /* VT_BYREF|VT_UNKNOWN  */
                IDispatch **  ppdispVal;    /* VT_BYREF|VT_DISPATCH */
                SAFEARRAY **  pparray;      /* VT_BYREF|VT_ARRAY    */
                VARIANT *     pvarVal;      /* VT_BYREF|VT_VARIANT  */
                PVOID         byref;        /* Generic ByRef        */
                CHAR          cVal;         /* VT_I1                */
                USHORT        uiVal;        /* VT_UI2               */
                ULONG         ulVal;        /* VT_UI4               */
                INT           intVal;       /* VT_INT               */
                UINT          uintVal;      /* VT_UINT              */
                DECIMAL *     pdecVal;      /* VT_BYREF|VT_DECIMAL  */
                CHAR *        pcVal;        /* VT_BYREF|VT_I1       */
                USHORT *      puiVal;       /* VT_BYREF|VT_UI2      */
                ULONG *       pulVal;       /* VT_BYREF|VT_UI4      */
                ULONGLONG *   pullVal;      /* VT_BYREF|VT_UI8      */
                INT *         pintVal;      /* VT_BYREF|VT_INT      */
                UINT *        puintVal;     /* VT_BYREF|VT_UINT     */
                struct __tagBRECORD {
                    PVOID         pvRecord;
                    IRecordInfo * pRecInfo;
                } __VARIANT_NAME_4;         /* VT_RECORD            */
            } __VARIANT_NAME_3;
        } __VARIANT_NAME_2;

        DECIMAL decVal;
    } __VARIANT_NAME_1;
};
VARIANT數據結構包含兩個域(如果不考慮保留的域)。vt域描述了第二個域的數據類型。為了使多種類型能夠在第二個域中出現,我們定義了一個聯合結構。所以,第二個域的名稱隨著vt域中輸入值的不同而改變。用於指定vt域值情況的常量在聯合的定義中以每一行的註釋形式給出。
使用VARIANT和VARIANTARG數據結構要分兩步完全。舉一個例子,讓我們考慮如下代碼:
long lValue = 999;
VARIANT vParam;
vParam.vt = VT_I4;
vParam.lVal = lValue;
在第一行中指定數據類型。常量VT_I4表明在第二個域中將出現一個long型的數據。根據類型VARIANT的定義,可以得知,當一個long型數據存入VARIANT類型時,其第二個域使用的名稱是lVal。
使用VARIANT來傳遞參數意味著非強類型語言(例如VBScript)能夠調用使用強類型語言(C++)實現的方法。Invoke()方法的實現可以檢查參數VARIANT封裝的數值是否符合其正確的數據類型。如果符合,該類型將取出,並傳遞給調用方法。否則,Invoke()方法能夠嘗試使用 VariantChangeType()API函數來將該數值轉換成正確的類型。