史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 程式 & 網頁設計技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-07-24, 02:19 AM   #1 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 mirc BOT 篇

BOT 篇




  什麼是BOT?BOT就是ROBOT(機器人)的縮寫,是一組用來自動管理IRC聊天室、輔助進行聊天、甚至進行搞笑的程序。例如,大家可能都在聊天室裡看到過某些人能夠每次都打出不同的彩色文字、或者某人因為一說髒話就被踢出的情景吧?這就是用到了BOT!
  很多IRC客戶端軟體都提供了編寫BOT的功能,例如Microsoft Chat、Pirch、mIRC...,這裡就以目前最為流行的mIRC來為大家詳細地介紹一下如何編寫一個屬於自己的BOT。有人問我,在哪兒編寫BOT呢?呵呵,按下Alt+R鍵或者直接用滑鼠點擊工作列上的按鈕就可以調出編寫BOT的視窗了,在這裡你就可以利用mIRC提供的指令碼功能來編寫Bot。(該指令碼在mIRC中被稱為Remote)
  就讓我們從下面這個簡單的實例開始吧:
  ON @*:TEXT:*:#:{
   if ((shit isin $1-) || (fuck isin $1-)) { kick $chan $nick 說粗口?我踢! }
  }
  這個例子的作用是,只要有人在閒聊室裡說到了「shit」或者「fuck」,而你又有@(帽子,即表明是主持人)時,就可以把他踢出閒聊室。大家可以看到,ON ...TEXT在這裡表明了這個事件的類型,即捕獲說話這個事件;而IF則是基本語法中的一個判斷語句;$1-、$chan、$nick在這裡都是mIRC裡的函數(Identifiers)。因此,接下來的內容將主要從這三部分來進行介紹,相信你看了之後,很快就能夠編寫出自己的mIRC BOT了。
  ● 基本語法篇
  ● 函數篇
  ● 事件篇
  另外,這裡還有一些關於mIRC BOT編寫的進階功能(相對複雜一點),倘若你已經熟練掌握前述的指令碼編寫,那麼不妨再看看下面的內容:
  ● 自訂對話視窗
  ● 自訂視窗
  ● 繪圖視窗
  ● 自訂工作
  
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2003-07-24, 02:20 AM   #2 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

基本語法篇




變數(Variables)

--------------------------------------------------------------------------------
  變數是用來暫時儲存某個資料以便以後在mIRC指令碼中使用的。它的基本構成是"%"+"變數名",例如%a、%b、%test。在mIRC中對變數的限制很寬鬆,甚至連任何符號都可以用來作為變數,比如%a@b、%[names等都是合法的變數。當某個變數不存在或者未設定變數值時,該變數的值將被認為是$null(空值)。
  下面介紹一下如何對變數進行設定,以及如何對它們進行操作。
  在mIRC中專門有一個與Alias、Popup和Remote類似的變數編輯視窗(按Alt+R,再選項Variables選擇項),你可以直接在這裡寫入變數名以及所對應的變數值。但是,建議你用如下的mIRC指令根據需要來設定變數,因為這樣更便於在指令碼中引用。

--------------------------------------------------------------------------------
/SET 指令
【語法】
   /set [-szuN] <變數> [變數值]
【描述】
  用來設定一個變數,並可以給它賦予初始值。參數-uN是指在設定變數N秒後,如果沒有其它指令碼引用該變數,則將其自動刪除;-s是指在設定變數時讓mIRC做出回顯(下同);-z是指遞減該變數值,直至其為0的時候將其自動刪除。
  利用/SET指令設定的變數都可以在變數(Variables)編輯視窗看到,並可以進行編輯。

--------------------------------------------------------------------------------
/UNSET 指令
【語法】
   /unset [-s] <變數>
【描述】
  用來從變數編輯視窗中刪除掉指定的變數。可以使用萬用字元,例如:/unset %chan*,這將刪除掉所有以%chan開頭的變數。

--------------------------------------------------------------------------------
/UNSETALL 指令
【語法】
   /unsetall
【描述】
  這將刪除掉變數編輯視窗中的所有變數。

--------------------------------------------------------------------------------
/INC 指令
【語法】
   /inc [-cszuN] <變數> [步長]
【描述】
  根據指定的步長來增加某個指定變數的值。參數-uN是指只增加該變數的值一次,然後在N秒後刪除該變數;-c是指每秒增加該變數的值一次;-z指遞減該變數的值,直至其為0的時候將其自動刪除。

--------------------------------------------------------------------------------
/DEC 指令
【語法】
   /dec [-cszuN] <變數> [步長]
【描述】
  根據指定的步長來減少某個指定變數的值。參數-uN是指只減少該變數的值一次,然後在N秒後刪除該變數;-c是指每秒遞減該變數的值一次;-z指遞減該變數的值,直至其為0的時候將其自動刪除。

--------------------------------------------------------------------------------
  你也可以在指令碼中(注意,不是在指令輸入欄)直接用英文等號("=")來設定某個變數,如「%x = 88」;你也可以利用英文等號來對變數進行一個簡單的運算,如「%x = 88 + 5」(注意,如果要進行更複雜的運算,則必須使用$calc()函數)
  你還可以利用/VAR指令來設定一個臨時變數,它將只能在指令碼中進行設定,並且當該指令碼執行完畢時將被自動刪除。例如:/var %x、 /var %x = hello、 /var %x = hello, %y, %z = $me …

--------------------------------------------------------------------------------

運算符

--------------------------------------------------------------------------------
  在mIRC中也有很多運算符,基本的包括:+(加)、-(減)、*(乘)、/(除)、%(求餘數)、^(乘方),不過通常都要配合$calc()函數使用,以讓mIRC識別這是一個運算式。例如:%count = $calc((%x + 1) * 4)
  在編寫mIRC指令碼時還經常會用到一個很有用的運算符,那就是「[」和「]」。當陳述式或者函數被這兩個符號包括起來時,則mIRC會優先執行這裡面的運算(按從左到右的順序)。需要注意的是在「[」和「]」的兩旁必須留有一個英文空格,否則將不起作用。
  其它還有很多運算符,如關係運算符等,這將在判斷語句中進行介紹。

--------------------------------------------------------------------------------

判斷語句

--------------------------------------------------------------------------------
  在mIRC中,判斷語句(If-Then-Else)的基本句法是:
   if (v1 運算符 v2) { 指令 }
   elseif (v1 運算符 v2) { 指令 }
   else { 指令 }
  「()」括號裡的內容是表明進行判斷,如果為真,則執行「{}」括號裡的指令(可以是任何指令)。
  這裡的運算符包括:
   ==    等於
   ===    等於(對大小寫敏感)
   !=    不等於
   <     小於
   >     大於
   >=    不小於
   <=    不大於
   //    存在倍數關係
   \\    不存在倍數關係
   &     存在位與關係

   isin   字串串v1被包含在字串串v2里
   isincs  字串串v1被包含在字串串v2里(對大小寫敏感)
   iswm   v2符合包含萬用字元的字串串v1
   isnum   數字v1在指定的v2範圍內(v2可省略);例如:(8 isnum 6-10)、(6 isnum)
   isletter 字母v1包含在v2列出的英文字母裡(v2可省略);例如:(t isletter fantasy)、(s isletter)
   isalnum  v1為一個英文字母或者數字
   isalpha  v1為一個英文字母

   ison   別名v1在閒聊室v2里
   isop   別名v1是閒聊室v2的主持人(有@帽子)
   isowner  別名v1是閒聊室v2的擁有者(OWNER, 見於IRCX伺服器)
   isvo   別名v1在閒聊室v2里有發言權
   ishop   別名v1是閒聊室v2里的一個助理主持人(HalfOP,舊稱Helper)
   isreg   v1是閒聊室v2里的一個普通別名
   ischan  v1是你目前已經進入的閒聊室
   isban   v1是mIRC的內部BAN列表裡被BAN掉的位址

   isauto  v1是自動給帽子(Auto-Op)列表中的人(v2用來指明是在哪個閒聊室,可選)
   isignore v1是忽略(Ignore)列表中的人
   isprotect v1是自動保護(Protect)列表中的人(v2用來指明是在哪個閒聊室,可選)
   isnotify v1是你的通知(Notify)列表中的人
   
  要進行相反的判斷,則在運算符前面加「!」號,例如:(55 !isletter)、(TigTag !ison #Chat) 等等。
  函數$ifmatch可以用來返回被IF判斷語句捕獲的第一個參數,例如:if (TigTag isin TigTagIsHelisheep) { ... },由於「TigTag」被包含在了「TigTagIsHelisheep」這個字串串中,因此這裡的$ifmatch就將返回TigTag。
  你也可以利用邏輯運算符&&(And)和||(Or)來組合更為複雜的判斷,例如:if (($nick ison #Chat) && ($nick == TigTag)) { ... }

--------------------------------------------------------------------------------

循環語句

--------------------------------------------------------------------------------
  在mIRC中目前只提供了一種循環語句,即While循環。它的基本句法如下:
   while (v1 運算符 v2) {
    指令
   }
  (v1 運算符 v2)表示判斷(參見判斷語句),如果為真則進行循環。你可以用/break跳出該循環,也可以用/continue跳到循環的最開始處。
  使用While語句的時候很容易造成一個死循環,用它只是可以讓程序流程看起來更清晰明瞭罷了(個人觀點)。你當然也可以利用IF語句+GOTO語句形成一個循環(儘管GOTO語句會讓程序變得很晦澀,而且容易打亂程序的結構)。例如:
   ...
   var %i = 0
   :nexti
    inc %i 1
    if (%i >= 10) { goto endi }
    goto nexti
   :endi
   ...
  PS: 在編寫Remote指令碼的時候,所有用到的IRC指令都可以省略掉前面的「/」號。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2003-07-24, 02:21 AM   #3 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

函數篇




  mIRC裡函數的定義和其他大多數語言是一樣的,都主要是用於返回一個特定的值。它的基本格式是英文的「$」號+函數名稱,例如「$time」,這可以返回當前的系統時間。當mIRC在Alias、Popup或者Remote裡遇到這些函數時,都將用這些函數的真實值來替代並且將指令碼執行下去,從而就使得我們在編寫BOT時有了更多的靈活性。
  當一個函數不存在或者沒有值時,它將返回一個「$null」值,即為空值,這樣主要是為了更好地在If-Then-Else語句裡進行比較。部分函數還可以帶有參數,例如「$nick(#, 2)」,作用是返回當前聊天室人名列表裡的第二個人名,由此可見,函數本身也是有很大的靈活性的。
  總的說來,mIRC裡一般的函數可以分為以下幾類(註:個別函數的連接為空是因為那些函數我自己都沒完全弄清楚,就不在這裡獻醜了):
  1. 時間和日期函數 (Time and Date Identifiers)

$asctime() $ctime $ctime() $date
$day $daylight $duration() $fulldate
$gmt $idle $ltimer $online
$ticks $time $timer() $timestamp
$timezone .


  2. 暱稱和位址函數 (Nick and Address Identifiers)

$address() $ibl() $comchan() $ial()
$ialchan() $level() $link() $mask()
$me $nick() $notify() $snicks
$snick() $snotify .


  3. 文字和數字函數 (Text and Number Identifiers)

$abs() $and() $asc() $base()
$biton() $bitoff() $bytes() $calc()
$chr() $cos() $acos() $count()
$int() $isbit() $islower() $isupper()
$left() $len() $log() $longip()
$lower() $mid() $not() $or()
$ord() $pos() $rand() $remove()
$replace() $right() $round() $sin()
$asin() $sqrt() $str() $strip()
$tan() $atan() $upper() $xor()
$wrap()  


  4. 文件和目錄函數 (File and Directory Identifiers)

$abook() $alias() $crc() $dir
$file $hfile $sdir $disk()
$exists() $file() $filtered $finddir()
$findfile() $getdir $getdir() $ini()
$isdir() $isfile() $lines() $logdir
$longfn() $mididir $mircexe $mklogfn()
$nofile() $nopath() $mircdir $mircini
$read $readn $readini $shortfn()
$wavedir $mp3dir $sdir() $sfile()


  5. 指令碼事件函數 (Remote Scripts Identifiers)

$1- $+ $0 $(...)
$address $chan $clevel $dlevel
$event $fulladdress $group() $ial
$maddress $matchkey $mode() $nick
$numeric $script $script() $scriptdir
$site $target $ulevel $ulist()
$wildsite .


  6. 視窗函數 (Window Identifiers)

$active $appactive $appstate $chan()
$chat() $fserv() $get() $query()
$send() .


  7. Token 函數 (Token Identifiers)

$addtok() $deltok() $findtok() $gettok()
$instok() $istok() $matchtok() $numtok()
$puttok() $remtok() $reptok() $sorttok()
$wildtok() .


  8. 其它函數 (Other Identifiers)

$?*!="message" $$... $& $ansi2mirc()
$auto $away $bits $cb
$cb() $colour() $cr $creq
$crlf $dccignore $dccignore() $dccport
$ddename $dll() $editbox() $email
$hash() $highlight $highlight() $host
$ifmatch $ignore $ignore() $iif()
$inmidi $inwave $ip $isalias()
$isid $lf $lock() $network
$os $port $protect $result
$rgb() $server $server() $show
$sreq $titlebar $url $url()
$usermode $version $input() .


  9. 自訂函數
  最後再來說說自訂函數。在mIRC裡的自訂函數是利用ALIAS實現的,方法是在Alias指令的最後使用一條/RETURN指令,即返回指定的值,這個值也就是自訂函數所具有的值了。例如這樣一個Alias:
  /add {
   return $calc($$1 + $$2)
  }
  這實際上就定義了一個$add函數,當我們使用$add(234, 324)時,它就會返回「558」了。
  現在mIRC還允許你通過$prop函數對自訂函數增加自己的內容,例如:
  /adds {
   if ($prop isnum) { return $calc(($$1 + $$2)^$prop) }
   return $calc($$1 + $$2)
  }
  對於這個自訂函數$adds,就多了一個以任何數字作為內容的功能,當使用該內容時,就會把計算結果進行指定的乘方後再返回:
  //echo -a $adds(2, 6) ,這將顯示「8」
  //echo -a $adds(2, 6).3 ,這就顯示「512」了(8的3次方)
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2003-07-24, 02:22 AM   #4 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

事件篇




  在系統地學習mIRC的各種事件之前,我們有必要先瞭解一下mIRC的自訂用戶訪問級別(Access Levels),因為各種事件都是關於此來執行的。
  按「Alt+R」,再選項「Users」選擇項則可以進入自訂用戶訪問級別的編輯視窗。訪問級別的表現形式是這樣的:<級別1,級別2,級別3,...,級別N>:<用戶的暱稱或者位址>。例如:「100:TigTag!*who@61.*」、「3,25,100:FoOl_BoT」……其中「級別1」是一個普適級別,即該用戶可以同時擁有等於「級別1」和所有小於「級別1」的訪問級別;而在「級別1」之後的其它級別則是專有級別,即該用戶的訪問級別必須是等於那些級別時才有效。如果要想讓「級別1」也成為一個專有級別,可以在它前面加上個「=」號,例如「=99:TigTag」,這樣用戶「TigTag」就只有一個專有訪問級別「99」了(從而不會被低於99級的事件所影響)。
  你也可以用文字來定義一個級別,例如「friends:TigTag!*who@61.*」,但這樣定義的級別將只能作為專有級別使用。
  接下來就該認識一下事件的組成了。基本上一個事件的構成是:
   ON [用戶前綴]<用戶訪問級別>:<事件名稱>:[事件參數:]<指令碼內容>
  但也有兩種事件例外,即CTCP事件和RAW事件,它們的構成是<事件名稱> [用戶前綴]<用戶訪問級別>:[事件參數:]<指令碼內容>,具體將在介紹這兩種事件的時候提到。
  大家可以看到這裡提到了「用戶前綴」這個可選項,那麼它又有什麼用呢?

「+」號前綴:用於限定該事件僅適用於指定級別的用戶。例如:


100:TigTag
CTCP +99:PING:/ctcpreply $nick PING $ctime | halt
用戶TigTag將無法觸發這個CTCP事件,因為該CTCP事件的用戶已被限定至99級別。

「*」號前綴:表明該事件適用於所有級別的用戶。例如:


ON *:TEXT:大家好:#:/msg # 你好, $+ $nick

「!」號前綴:用於阻止你自己觸發改事件。例如:


CTCP !*:FINGER:?:/ctcpreply $nick FINGER No FINGER info available | halt
這樣你自己將可以Finger到自己的游標信息,而其他人則無法Finger到。

「@」號前綴:用於在頻道事件中,只有當你是該頻道的OP時才觸發。例如:


ON @*:JOIN:#Chat:/pop 5 $chan $nick
這個事件表示,只要你在#Chat有帽子,那麼任何人進來你都將自動給他發帽子;而如果你沒有帽子該事件則不會被觸發。

「^」號前綴:用於阻止該事件繼續執行或者阻止其顯示預設的螢幕資訊,但必須配合/halt或者/haltdef指令使用。例如:


ON ^*:JOIN:#:/echo 12 # * $nick $+ 走進了 $+ $chan | halt
使用這個事件,則當有人走進某個房間時,螢幕上就不會顯示mIRC內定的信息,而是顯示我們在這裡定義的「某某走進了某個房間」。/halt和/haltdef在這裡的區別是,一旦使用了/halt,則在該事件裡其後的指令都不再執行,而使用/haltdef則只是預設的螢幕顯示不再出現,而該事件仍然要繼續執行下去。

「&」後面:如果在前一個已執行的事件裡使用了/halt或者/haltdef指令,則可以使用該符號以隱藏預設的螢幕提示。例如:


ON &1:TEXT:?:/echo 2 -a 如果你看到這條信息,則表明前一個指令碼裡執行了/halt或者/haltdef指令


  在這些事件裡還可以使用兩種後面符號來限定事件的訪問級別:

「=」後面:用於阻止進階別的用戶訪問低級別的事件。例如:


10:直升羊
5:Helisheep
3:TigTag
ON 2:TEXT:*:*:/echo 2 -a $nick $+ 說: $+ $1-
ON 5:TEXT:*:*:=
直升羊和Helisheep都將無法觸發上面這個訪問等級為2的ON TEXT事件,而TigTag卻可以。

「!」後面:用於阻止指定級別的用戶觸發該類事件的其它情況。例如:


3:TigTag
CTCP 2:PING:*:/echo 4 -a PING
CTCP 2:*:*:!
CTCP 2:FINGER:*:/echo 4 -a FINGER
則TigTag將只能觸發CTCP PING事件,而不能觸發其後的CTCP FINGER事件。


  在指令碼裡還可以把多個事件編成一個組(以「#」符號作為組的開始標誌),例如:
    #TEST ON  -> 此為組開始標誌
    ON *:TEXT:*:*:{
     ...
    }
    ON *:ACTION:*:*:{
     ...
    }
    #TEST END  -> 此為組結束標誌
  這樣就建立了一個名為「#TEST」的事件組,你可以使用/enable和/disable指令來開啟或者關閉指定的事件組。當某個事件組被關閉後,則mIRC在處理時會忽略掉這些組。例如上面這個事件組如果被關閉,則它的形式應該是:
    #TEST OFF
    ON *:TEXT:*:*:{
     ...
    }
    ON *:ACTION:*:*:{
     ...
    }
    #TEST END
  注意:在一個組中不能有另一個組,即組與組之間不能嵌套。
  最後值得一提的是,以上的各種訪問級別、前後面對於事件來說都是很敏感的,因此在寫事件指令碼時,最好依照其訪問級別的不同,按由小到大的順序來編寫各類事件,這樣可以最大可能地防止mIRC在處理時出錯。
  接下來,就請點擊相應的連接以檢視各類事件吧。

ACTION BAN CHAT CLOSE
CONNECT CTCP CTCPREPLY DCCSERVER
DEHELP DEOP DEVOICE DIALOG
DNS ERROR FILERCVD FILESENT
GETFAIL HELP HOTLINK INPUT
INVITE JOIN KEYDOWN KEYUP
KICK LOAD MIDIEND MODE
NICK NOSOUND NOTICE NOTIFY
OP OPEN PART PING
PLAYEND QUIT RAW RAWMODE
SENDFAIL SERV SERVERMODE SERVEROP
SNOTICE START TEXT TOPIC
UNBAN UNOTIFY USERMODE VOICE
WALLOPS WAVEEND WAVEEND ACTIVE
APPACTIVE AGENT  
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2003-07-24, 02:23 AM   #5 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

自訂對話視窗




  不記得是從哪個版本的mIRC開始(印象中好像是5.6版),mIRC就增加了一個可以自行編寫對話視窗(Custom Dialog)的功能,這也是利用Remote的編寫來實現的。經常編寫mIRC BOT的人就會知道,需要設定的參數越多,BOT裡要編寫的Alias和Popup也就越多,使用起來也就越麻煩。例如,在BOT使用中,每每要更改一個參數值時,你就不得不從層層相嵌的功能表(Popup)裡去點擊相應的功能表,或者從記憶中去搜尋相應的Alias。時間一長,如果執行該指令的的Popup也編寫得比較煩瑣的話(比如,一層套一層),那麼很明顯它對於BOT的使用者就成了一塊雞肋,食之無肉,棄之有味。這時就該輪到mIRC的自訂對話視窗來大顯身手了。可以說,mIRC的自訂對話視窗主要就是為了解決煩瑣的參數設定和更方便的信息輸入而誕生的,另一方面,合理地採用對話視窗,也能夠使得BOT和使用者之間的人機對話更加親切,當然,也能夠美化BOT的使用界面,等等。
  下面就以最近才出的的mIRC 5.9版為基準,給大家講解一下mIRC自訂對話視窗的編寫以及套用:

自訂對話視窗的列表(Table)

--------------------------------------------------------------------------------
  自訂對話視窗的使用有兩種模式(將在後面提到),但在運用這兩種模式使用自訂對話視窗之前,你必須先定義好自訂對話視窗的外觀、大小和具體設定(廢話,不然就不叫自訂了,呵呵),有關一個自訂對話視窗的外觀、大小和具體佈局等的設定信息,就存儲在一個被稱為「自訂對話視窗列表」的Remote指令碼裡。該Remote指令碼的編寫方式如下:

對話視窗列表(Table)的描述格式 說  明


dialog 對話視窗列表名稱 {
  必須以"dialog"開頭,這段指令碼必須而且只能寫在Remote裡。
 title "對話視窗視窗標題"   給對話視窗視窗設定標題欄文字。
 icon 檔案名[, 圖示索引]   用於給對話視窗視窗指定一個圖示,例如「icon c:\windows\system\shell32.dll, 13」,將用上Windows98/ME裡的地球圖示。本icon行可以省略,如果省略,則預設使用mIRC自己的圖示。(注意,索引是從0開始而非從1開始)
 size x y w h   這裡的x指代對話視窗左上角所在的螢幕上的橫坐標,y為縱坐標,w為對話視窗的寬,h為對話視窗的高。如果將x y分別設定為-1,則表示設定該對話視窗的位置為螢幕正中央。
 option 類型(dbu或者pixels)   dbu表示mIRC在新增對話視窗時使用mIRC自己的對話視窗基準服務機構(Dialog Base Units),這可以讓該對話視窗在不同顯示模式下都為一個大小;而Pixels則表示按像素來描述對話視窗的大小寬高等。預設為Pixels。
    
 text "要顯示的標籤文字", ID, x y w h[, 樣式(right或者center)]   用於在對話視窗的指定坐標顯示指定的文字;ID為這個text對象的代號,必須指定,並且必須為數字所組成,不能與其它的ID重複,這主要是為了在以後的對話視窗事件裡引用該text對像;x y w h則是該text對像相對於對話視窗左上角的橫坐標、縱坐標、寬和高,也必須指定(下同)。 (圖示)
 edit "文本輸入框裡的預設文字", ID, x y w h[, 樣式(right, center, multi, pass, read, return, hsbar, vsbar, autohs, autovs, limit N)]   用於在對話視窗的指定坐標顯示一個文本輸入框;ID、x y w h的含義同前;樣式中的right, center分別是右對齊和中間對齊,multi表示設定該edit對像裡可以輸入多行文字,pass表示該edit對像裡的任何文字均以「*」號替代,即類似輸入密碼的方式,read表示只讀方式,return表示該edit對像接受Enter鍵符,hsbar、vsbar表示是否給該edit對像設定水準捲軸或豎直捲軸,autohs、autovs表示當該edit對像裡容納不了更多文字時,文字是自動向水準方向滾動還是向豎直方向滾動,limit N則是限制該edit對像裡的最大文字數量為N個字元。 (圖示)
 button "按鈕上的文字", ID, x y w h[, 樣式(default, ok, cancel)]   用於在對話視窗的指定坐標顯示一個按鈕;ID、x y w h的含義同前;樣式中的default指設定該按鈕為預設按鈕,而ok和cancel內容,在一個對話視窗裡,必須要有它們中的至少一個按鈕(或功能表,見後),在點擊設定為ok或者cancel的按鈕時,將關閉掉該對話視窗。如果你不想在點擊了一個設定為ok的按鈕後關閉掉該對話視窗,那麼可以在相應的對話視窗事件裡加上/halt指令。 (圖示)
 check "複選對象的描述文字", ID, x y w h[, 樣式(left, push, 3state)]   用於在對話視窗的指定坐標顯示一個複選對像;ID、x y w h的含義同前;樣式中的left指複選對象的文字描述在左側,push指把該複選對像設定為類似按鈕的外觀,3state則表示設定該複選對象的選取方式除了選和不選之外,還增加一種介於二者之間的選取方式。 (圖示)
 radio "單選對象的描述文字", ID, x y w h[, 樣式(left, push)]   用於在對話視窗的指定坐標顯示一個單選對像;ID、x y w h、left、push的含義同前。 (圖示)
 box "框架的描述文字", ID, x y w h   用於在對話視窗的指定坐標顯示一個框架;ID、x y w h的含義同前;適當使用box對象可以讓對話視窗的層次看起來更加清晰、分明。 (圖示)
 scroll "捲軸的文字", ID, x y w h[, 樣式(top, left, bottom, right, horizontal, range N)]   用於在對話視窗的指定坐標顯示一個自訂的捲軸;ID、x y w h的含義同前。樣式中的top(頂端)、left(靠左)、buttom(底端)和right(靠右)是指捲軸的位置,而horizontal則是指在水準方向顯示捲軸(預設為垂直方向),range N是指設定捲軸的總長度為指定的數字N。 (圖示)
    
 list ID, x y w h[, 樣式(sort, extsel, size, vsbar, hsbar)]   用於在對話視窗的指定坐標產生一個列表對像;ID、x y w h的含義同前;樣式中的sort表示將增加到該列表中的內容自動排序,extsel表示該列表可以同時選取多個內容,size則是讓該列表的大小控制更加精準,其他樣式內容同edit。list對像裡的內容不能在列表裡指定,必須利用/DID指令來增加或修改。 (圖示)
 combo ID, x y w h[, 樣式(sort, edit, drop, size, vsbar, hsbar)]   用於在對話視窗的指定坐標產生一個組合框對像(即外觀上類似文本輸入框和列表對象的的組合);ID、x y w h的含義同前;樣式中的edit表示允許把該組合框的第一行作為文本輸入框使用,drop表示以下拉按鈕的方式顯示除第一行以外的其他行,其他樣式內容同list對像和edit對象。combo對像裡的內容亦不能在列表裡指定,它也必須利用/DID指令來增加或修改。 (圖示)
    
 icon ID, x y w h, 檔案名[, 圖示索引, 樣式(noborder, top, left, bottom, right)]   用於在對話視窗的指定坐標顯示一個圖片,圖片的格式可以是.bmp、.jpg、.png和.ico;ID、x y w h的含義同前;樣式中的noborder是不在該圖像的周圍產生一個邊框(預設要產生),top、left、bottom和right則是圖像的對齊方式。 (圖示)
 link "連接文字", ID, x y w h   用於在對話視窗的指定坐標顯示連接文字(滑鼠移上去會變成紅色,移開則回復為藍色);ID、x y w h的含義同前。 (圖示)
    
 tab "選擇項文字", ID, x y w h
 tab "選擇項文字"
  用於在對話視窗的指定坐標顯示一個選擇項;ID、x y w h的含義同前。您只能為第一個選擇項指定x y w h,其他選擇項將依次與其相接。如果要讓其它的某個對象從屬於某個選擇項,則只需在該對象的樣式裡指定「tab 選擇項ID」即可。 (圖示)
    
 menu "功能表文字", menuID[, menuID]
 item "功能表文字", ID[, menuID]
 item break, ID[, menuID]
  用於在對話視窗裡產生功能表和子功能表;break表示產生一條分隔線;menuID則是該功能表的代號,對於一個item對像來說,如果沒有指定menuID,則該item對像將沿用上次的item對像所指定的menuID。 (圖示)

    
}   



P.S: 除了上面這些對像各自的樣式之外,它們還有一些共同的樣式,即:
  disable    禁止該對像
  hide      隱藏該對像
  group     作為一個組的開始
  result     當點擊OK按鈕時,被設定為result的對象的值將返回給使用該對話視窗的變數

--------------------------------------------------------------------------------

自訂對話視窗的使用

--------------------------------------------------------------------------------
  在前面的例子中,我們看到的對話視窗都是利用/dialog -m指令使用出來的,這就是mIRC自訂對話視窗使用方式的一種,即根據事先做好的對話視窗列表信息,用/dialog指令來產生對話視窗。這也是最常用的方式。但mIRC還有著另外的一種方式來使用對話視窗,即使用$dialog()函數。在這裡$dialog()函數的具體用法為:
  $dialog(對話視窗內部名稱, 對話視窗列表名稱[, 對話視窗所基準的父視窗])
  其中的「對話視窗內部名稱」可自行定義,但不能與已經產生的對話視窗的內部名稱相同(這主要是為了讓mIRC方便地使用某個對話視窗視窗)。
  例如假設我們在Remote裡已經定義了test這個對話視窗列表,那麼在輸入欄裡輸入//echo -a $dialog(sample, test),即可出現一個以test列表為基準的對話視窗了,其中的Sample便是我們隨便起的名稱。如果要讓它方便地返回一個數值,別忘了在編寫對話視窗列表時指定一個帶result樣式的對象。
  用這兩種方式都可以根據同一個已定義好的對話視窗列表產生出多個不同內部名稱的對話視窗,但它們之間還是有著一些區別的。第一種方式,即使用/dialog指令的使用方式,它在產生出一個對話視窗之後,你還可以對mIRC進行其它的操作;但第二種方式就不行了,你必須在關掉了用$dialog()函數產生的對話視窗之後才能對mIRC進行下一步的操作,並且mIRC不能夠以這種方式在Remote裡產生出一個對話視窗,因為這樣會終止指令碼的執行,但第一種方式卻可以。所以如果非必要,還是多用第一種方式為好。
  附帶給出/Dialog指令的具體用法如下:

--------------------------------------------------------------------------------
/DIALOG 指令
【語法】
   /dialog -madxrtsonkcvbpie 對話視窗內部名稱 [對話視窗列表名稱] [x y w h] [文字信息]
【說明】
  用來產生一個對話視窗,或者對一個已經產生的對話視窗進行部分操作。
  參數「-m」表示根據一個已新增的對話視窗列表信息來產生一個對話視窗;參數「-a」則是一個配合「-m」使用的參數,表示產生的對話視窗將以當前視窗/對話視窗為父視窗;參數「-d」也必須配合「-m」使用,表示產生一個獨立於mIRC之外的在桌面上的視窗;參數「-x」表示關閉掉指定內部名稱的對話視窗;參數「-t」表示設定指定對話視窗的視窗標題;參數「-s」表示設定指定對話視窗的大小寬高;參數「-r」表示將指定對話視窗在螢幕上居中;參數「-b」或「-p」表示設定指定對話視窗的基準服務機構是dbu還是pixels;參數「-o」表示將指定對話視窗設定為一個始終在其他視窗之上的視窗;參數「-n」則是取消「-o」的設定;參數「-k」模擬點擊了設定為ok的按鈕;參數「-c」則是模擬點擊設定為cancel的按鈕;參數「-v」表示設定指定對話視窗為當前的活動視窗;參數「-i」和「-e」表示:指定對話視窗如果是一個獨立於mIRC以外的在桌面上的視窗,則「-i」將其最小化,「-e」將其還原。
【舉例】
  如果在Remote裡已經定義了test這個對話視窗列表,那麼輸入/dialog -m Sample1 test可產生一個內部名稱為Sample1的對話視窗,輸入/dialog -md Sample2 test可在桌面上產生一個內部名稱為Sample2的對話視窗
  要改變Sample1的視窗標題為「歡迎來到 http://xirc.yeah.net/」,用指令/dialog -t Sample1 歡迎來到 http://xirc.yeah.net/
  要關閉Sample2對話視窗,用指令/dialog -x Sample2
  把Sample1置於螢幕的左上角,用指令/dialog -s Sample1 0 0 100 100

--------------------------------------------------------------------------------

對對話視窗裡的對象進行操作

--------------------------------------------------------------------------------
  看到這一節的標題,也許大家會覺得好笑:對話視窗還要怎麼操作?用滑鼠去點不就得了嗎?呵呵,大部分的操作的確可以通過滑鼠來完成,但對於有些特殊的操作,例如禁止使用對話視窗裡的某個按鈕、改變按鈕上的文字、往list對像裡增加一條內容等等,這就不是光用滑鼠點擊所能做到的了。這裡我們要著重介紹的就是這個專門控制對話視窗裡的各種對象的指令—/DID。

--------------------------------------------------------------------------------
/DID 指令
【語法】
    /did -ftebvhnmcukradiogj 對話視窗內部名稱 [N] [文字信息 | 檔案名]
【說明】
  用來對一個已經產生的對話視窗裡的各種對像進行操作。
  參數「-f」用於將焦點定位到指定ID的對象上;參數「-t」是設定指定ID的對象為預設的按鈕;參數「-b」是禁止使用指定ID的對象,「-e」則是不再禁止;參數「-h」用於從對話視窗裡隱藏指定ID的對象,「-v」則是不再隱藏;參數「-m」用於禁止一個edit對像(與「-b」稍有不同,「-m」的禁止不會把edit對像裡的名字轉成灰色,並且禁止後仍然可以從中進行複製);參數「-n」則是取消「-m」的禁止;參數「-c」用於選一個check/radio或者combo對象,「-u」則是不選項;參數「-k」是在「-c」或「-u」的基礎上,保持check/radio/combo對象的其它已選的條目不變;參數「-r」用於清除指定ID的對象上的所有文字內容;參數「-a」用於在指定ID的對象最後增加文字內容;參數「-d」用於刪除第N行的內容(比如在一個list對像上);參數「-i」用於在第N行插入指定內容;參數「-o」則是用指定文字覆蓋掉第N行的原有內容;參數「-g」用於更換一個icon對象的圖像檔案名;參數「-z」用於重置list對象的水準捲軸的寬度;參數「-j」用於重置edit對象的設定。
【提示】
  在一個/did指令裡,可以一次對多個ID作用,但這些ID之間必須用英文逗號隔開(不能用空格)。
  如果要選項一個3state的check對象的中間狀態,則須同時使用-c和-u參數,例如:/did -cu Sample2 10。
  對於一個scroll對象,可以用-c參數來指定捲軸滑塊的位置。
【舉例】
  禁用對話視窗Sample1的ID為10的對象,用指令:/did -b Sample1 10
  不再禁用對話視窗Sample1的ID為10的對象,用指令:/did -e Sample1 10
  隱藏對話視窗Sample1的ID為20的對象,用指令:/did -h Sample1 20
  假設對話視窗Sample1的ID為30的對象是一個edit對像(文本輸入框),要在裡面增加文字「歡迎來到xIRC」,用指令:/did -a Sample1 30 歡迎來到xIRC
  假設對話視窗Sample1的ID為40的對象是一個list對象,要在其中的第2行增加一行內容為「http://xirc.yeah.net/」,用指令:/did -i Sample1 40 2 [url]http://xirc.yeah.net/;如果僅僅是想增加/url][至list對象的最後一行,也可以用指令:/did -a Sample1 40 http://xirc.yeah.net/
  假設對話視窗Sample2的ID為10的對象是一個check對像(複選對像),要將其選,用指令:/did -c Sample2 10
  假設對話視窗Sample2的ID為90的對象是一個icon對象,要將裡面的圖像檔案名改成..\Images\cloud.bmp,用指令:/did -g Sample2 90 ..\Images\cloud.bmp
  禁止對話視窗Sample1的ID為10、20、30、40的對象,用指令:/did -b Sample1 10,20,30,40

--------------------------------------------------------------------------------

捕獲發生在對話視窗裡的事件

--------------------------------------------------------------------------------
  有了前面的基礎,現在我們就可以針對發生在對話視窗裡的各種事件(比如點擊了某個按鈕)來編寫指令碼了。mIRC裡有一個專門用於捕獲自訂對話視窗事件的指令碼,即on Dialog事件:

--------------------------------------------------------------------------------
on DIALOG 事件
【語法】
   on [用戶前綴]<用戶訪問級別>IALOG:<對話視窗名稱>:<事件名稱>:<事件發生對象的ID>:<指令碼內容>
【說明】
  用於捕獲發生在自訂對話視窗裡的事件。這些事件包括:
    init      對話視窗的啟始化
    edit      在一個edit對像上輸入文字
    sclick     在一個button/check/radio等對像上進行按下
    dclick     在一個button/check/radio等對像上進行雙按
    menu      點擊了一條功能表(menu對像)
    scroll     移動了一個捲軸(scroll對像)的滑塊
  從5.9版開始,mIRC也開始支持在自訂對話視窗裡使用滑鼠事件了(原來是只能在圖像視窗使用的)。這些事件包括:
    mouse      移動滑鼠
    sclick     按下滑鼠左鍵
    uclick     鬆開滑鼠左鍵
    dclick     雙按滑鼠左鍵
    rclick     按下滑鼠右鍵
    drop      完成滑鼠左鍵的移到動作
  同時也可以在自訂對話視窗裡使用$mouse函數來返回跟滑鼠相關的一些參數。
  至於對話視窗名稱,則是在產生一個對話視窗時給它定義的對話視窗內部名稱。
  在on DIALOG事件裡,函數$dname可以返回對話視窗的名稱;函數$devent可以返回當前所發生的事件;函數$did可返回當前事件所作用的對象ID。
【舉例】
  on *IALOG:Sample1:init:*:/dialog -t $dname 這是一個測試對話視窗
  此例的作用是,在對話視窗Sample1進行啟始化的時候,將其視窗標題改成「這是一個測試對話視窗」。
  on *IALOG:Sample1:sclick:20:/echo 3 -a * 按下事件:對話視窗- $+ $dname ID- $+ $did
  此例的作用是,當按下對話視窗Sample1上的ID20時,在mIRC的當前視窗顯示「* 按下事件:對話視窗-Sample1 ID-20」的字樣。
  on *IALOG:Sample2:dclick:10:/run http://xirc.yeah.net/
  此例的作用是,當按下對話視窗Sample2上的ID10時,開啟瀏覽器連線到xIRC。
  on *IALOG:*:*:*:/echo 2 -a * 對話視窗名稱: $+ $dname 作用ID: $+ $did 事件捕獲: $+ $devent
  此例的作用是,捕獲發生在任何已新增對話視窗的任何事件,並將其顯示在mIRC的當前視窗。
  on *IALOG:Sample2:mouse:*:/echo 2 -a * 滑鼠游標的坐標:( $+ $mouse.x $+ , $+ $mouse.y $+ )
  此例的作用是,當在對話視窗Sample2上移動滑鼠時,顯示滑鼠游標相對於該對話視窗的坐標。

--------------------------------------------------------------------------------

相關的函數

--------------------------------------------------------------------------------
  看了上面的內容,現在的你應該能夠初步做出一個對話視窗指令碼了吧?這裡再給出在編寫對話視窗指令碼時經常要用到的$dialog()和$did()等函數,把這也吃透了,相信你很快也就成了自訂對話視窗的編制高手了。

--------------------------------------------------------------------------------
$dialog(name/N) 函數
【作用】
  產生一個自訂對話視窗,或者返回與一個自訂對話視窗相關的值。
【說明】
  產生自訂對話視窗的用法參見前面。
  $dialog()函數的內容很多,其中:
  「x」/「y」/「w」/「h」內容分別用於返回指定對話視窗的橫坐標、縱坐標、寬度和高度;「cw」/「ch」則用於返回對話視窗客戶端區域(Client Area)的寬和高;「title」用於返回對話視窗的視窗標題;「model」用於返回指定對話視窗是否是一個模組(Modal)對話視窗,是則返回$true,否則返回$false,只有用$dialog()函數新增的對話視窗才被認為是模組對話視窗;「table」用於返回指定對話視窗所基準的對話視窗列表名稱;「ok」用於在一個設定了ok按鈕的對話視窗上,返回該ok按鈕的ID;「cancel」用於在一個設定了cancel按鈕的對話視窗上,返回該cancel按鈕的ID;「result」用於在一個設定了result按鈕的對話視窗上,返回該result按鈕的ID;「focus」返回指定對話視窗當前焦點所在的對象的ID;「tab」返回指定對話視窗當前正在顯示的選擇項的ID;「active」用於返回指定對話視窗是否是當前視窗,是則返回「$true」,否則返回「$false」;「hwnd」則用於返回指定對話視窗的句柄。
【舉例】
  $dialog(0)將返回當前已新增的對話視窗總數
  $dialog(2)將返回當前已新增的第二個對話視窗的名稱
  $dialog(Sample1).h將返回對話視窗Sample1的高度
  $dialog(Sample1).table將返回對話視窗Sample1所基準的對話視窗列表的名稱

--------------------------------------------------------------------------------
$did(name, id[, N]) 函數
【作用】
  返回指定自訂對話視窗裡與某個對象相關的值。
【說明】
  如果是在on DIALOG事件裡引用當前對話視窗的對象時,可以省略掉「name」。
  「text」內容返回指定ID裡的文字,可省略;「len」內容返回指定ID第N行裡文字的字元長度;「lines」內容返回指定ID(例如list、combo對像)的總行數;「sel」內容返回指定ID(一般是list對像)第N個被選取的行的行號,如果N為0,則返回所選取的總行數;「seltext」用於返回指定ID裡被選取的文字,或者是list對像中第一條被選取的內容;「selstart」用於返回在edit對像裡被選取的第一個字串所在的位置;「selend」用於返回在edit對像裡被選取的最後一個字串所在的位置;「edited」用於返回edit對像裡的內容是否已改變,是則返回「$true」,反之返回「$false」;「state」用於返回指定ID(一般是check/radio對像)的狀態,為0表示關閉(未選取),為1表示開啟(選取),為2表示不確定(介於二者之間);「next」用於返回指定ID的下一個對象的ID;「prev」用於返回指定ID的上一個對象的ID;「visible」用於返回指定對象是否處於隱藏狀態,是則返回「$true」,反之返回「$false」;「enabled」用於返回指定對象是否處於可用狀態,是則返回「$true」,反之返回「$false」。
  對於一個允許文本輸入的combo對象,它的N值可以用0來替代。
  對於一個scroll對象,可以用.sel內容來返回捲軸滑塊所在的位置,例如:$did(Sample3, 1).sel。
【舉例】
  $did(Sample1, 40, 2)將返回對話視窗Sample1的ID40的第2行的文本內容,等同於$did(Sample1, 40, 2).text
  $did(Sample1, 40, 0).sel將返回對話視窗Sample1里ID40被選取的總行數
  $did(Sample2, 10).state將返回對話視窗Sample1里ID10的狀態

--------------------------------------------------------------------------------
$didwm(name, id, 萬用字元字串[, N]) 函數
【作用】
  返回指定對話視窗ID裡,符合某個萬用字元字串的所有行的總數。
【說明】
  N為可選項,表示從第N行起開始往後搜尋。
【舉例】
  假設對話視窗Sample1的ID40里的第一行是「TigTag」,第二行是「Helisheep」,第三行是「Other」,則函數$didwm(Sample1, 40, *i*)將返回數字「2」,因為在這三行中匹配萬用字元*i*的字串只有前兩行

--------------------------------------------------------------------------------
$didtok(name, id, C) 函數
【作用】
  將一個list/combo/edit對象的所有行的內容按指定字串$chr(C)返回成一個Token字串。
【舉例】
  假設對話視窗Sample1的ID40里的第一行是「TigTag」,第二行是「Helisheep」,第三行是「阿奔」,則函數$didtok(Sample1, 40, 32)將返回字串「TigTag Helisheep 阿奔」,而函數$didtok(Sample1, 40, 44)則返回字串「TigTag,Helisheep,阿奔」

--------------------------------------------------------------------------------
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2003-07-24, 02:25 AM   #6 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

自訂視窗




  mIRC裡的視窗類型很多,一般的就有Status視窗(狀態視窗)、頻道視窗、密聊視窗、頻道列表視窗、伺服器列表視窗、DCC視窗以及上線通告視窗等。但不僅如此,mIRC還允許你自行定義出其它類型的視窗,例如CJCBOT中的多重伺服器連接、Ghost-BOT中的CLONEs搜尋、WALLOPS廣播接收等就用到了這個自訂視窗的功能。

產生一個自訂視窗

--------------------------------------------------------------------------------
  自訂視窗在mIRC裡是通過/window指令產生的,它帶有很多的參數——恐怕是mIRC裡參數最多的指令了。不過別著急,這些參數並不是平時個個都用得著的,除非你想讓自己做的自訂視窗個性化十足,否則揀幾個常用的參數使用就行了。/window指令的具體用法如下:

--------------------------------------------------------------------------------
/WINDOW 指令
【語法】
  /window [-abcCdeEfg[N]hkl[N]mnoprswx] [-tN,..,N] [+bdeflLmnstx] <@自訂視窗名稱> [x y [w h]] [/command] [popup.txt] [font [size]] [iconfile [N]]
【說明】
  怎麼樣,參數是很多吧?下面就一一講解一下。
  先提一提自訂視窗的名稱,自訂視窗的名稱必須以「@」號打頭,例如「@test」、「@xIRC」等,以示與其他類型的視窗區別。
  至於其它的參數則都是可選的,它們表示的含義分別如下:
  第一組參數:-abcCdeEfg[N]hkl[N]mnoprswx
  -a  將自訂視窗設定為當前視窗
  -b  更新一個帶列表欄視窗的水準捲軸的寬度
  -c  關掉指定自訂視窗
  -C  在新增好自訂視窗時將其在螢幕上居中
  -d  把自訂視窗設定為獨立於mIRC之外的視窗
  -o  如果用自訂視窗是一個獨立於mIRC之外的視窗,則讓其顯示在最頂端
  -u  取消-o參數的設定
  -e  讓自訂視窗帶上一個單行輸入框
  -E  讓自訂視窗帶上一個多行輸入框
  -f  指定後面的w h參數分別代表自訂視窗裡文字顯示區域的寬和高(而不是視窗的寬和高)
  -g[N] 當自訂視窗裡有信息變化時,在mIRC切換欄上的表示該視窗的按鈕顯示為何種顏色—N為0,不顯示顏色;N為1,使用mIRC的信息設定顏色(message color);N為2,使用mIRC的高亮設定顏色(hilight color)
  -h  在mIRC的切換欄上隱藏表示指定自訂視窗的按鈕
  -w  取消-h參數的設定
  -k[N] 隱藏自訂視窗前的「@」前綴—N為0,表示隱藏;N為1,表示不隱藏
  -l[N] 給自訂視窗帶上一個列表欄,N為該列表欄的寬度(以N個字串來衡量)
  -m  允許在自訂視窗裡使用新信息的標記線(Line Marker),即允許使用Ctrl+L來顯示該視窗裡最新的信息
  -n  最小化自訂視窗
  -x  最大化視窗
  -r  還原自訂視窗
  -p  新增一個繪圖視窗(Picture Window)
  -s  對自訂視窗裡的行進行排序
  -S  對一個帶列表欄視窗裡的列表欄內容進行排序
  第二組參數:-t[N,...,N],表示設定一個帶列表欄視窗的列表欄的製表符位置(Tab Positions)。如果列表欄裡的文字帶有製表符(Tab),則將根據指定的設定將其分隔開。(此參數的具體作用不詳)
  至於第三組參數:+bdeflLmnstx (注意這裡是「+」號),則主要是用於個性化自訂視窗外表的了
  +b  顯示自訂視窗的邊框
  +d  不顯示自訂視窗的邊框
  +e  顯示帶立體感的邊框
  +f  顯示對話視窗類的邊框
  +l  將自訂視窗顯示成工具視窗
  +L  將自訂視窗顯示成工具視窗,但是不顯示在Windows的工作管理欄裡
  +n  禁止最小化按鈕
  +x  禁止最大化按鈕
  +s  允許用戶調整自訂視窗的大小
  +t  顯示自訂視窗的標題欄
  剩下的參數:[x y [w h]] [/command] [popup.txt] [font [size]] [iconfile [N]]
  x y w h    分別定義自訂視窗的橫坐標、縱坐標、寬和高。均可以設定為「-1」,這時則表示使用預設值。
  /command    如果一個視窗帶有輸入欄,則通過此參數設定預設要顯示的指令
  popup.txt   如果需要功能表,則可以通過此指令來匯入一個功能表文件(注意,該檔案不得是類似.ini格式的文件)。你也可以通過在Remote裡編寫指令碼來給指定視窗增加右鍵功能表,參見此處。
  font size   指定自訂視窗的字體font和字號size(預設為與Status視窗同)
  iconfile N   指定自訂視窗的圖示,iconfile為圖示檔案名,N為圖示索引
  注意:當使用某些參數時,有可能會自動開啟或關閉其它的參數設定。
【舉例】
  用預設值新增一個自訂視窗@test1,用指令:/window @test1
  新增一個自訂視窗@test2,並且讓其帶上寬20個字串的列表欄,用指令:/window -l20 @test2
  新增一個獨立於mIRC之外的帶多行輸入欄的自訂視窗@test3,並且使用立體邊框,用指令:/window -dE +e @test3
  新增一個不帶邊框的、不顯示在切換欄上的自訂繪圖視窗@test4,用指令:/window -ph +d @test4

--------------------------------------------------------------------------------

對自訂視窗進行操作

--------------------------------------------------------------------------------
有如下的指令可以對一個自訂視窗進行操作:
  /aline [參數] <@視窗名稱> <文本信息>   給自訂視窗或者其中的列表欄增加一行內容
  /cline [參數] <@視窗名稱> <N>       把自訂視窗(或列表欄)裡指定的行改變成指定程式碼所代表的顏色。例如,/cline 3 @test 2,將把@test視窗的第二行顏色變成綠色
  /dline [參數] <@視窗名稱> <N[-N2]>    刪除掉第N行的內容(也可以用N-N2來指定一個範圍)
  /iline [參數] <@視窗名稱> <N> <文本信息> 在第N行處插入一行新的內容
  /rline [參數] <@視窗名稱> <N> <文本信息> 把第N行的內容替換成指定的內容
  /sline [參數] <@視窗名稱> <N>       選第N行
以上指令可以使用的參數有:
  c    即具體的顏色程式碼c,例如0代表黑色,3代表綠色
  -s    清除掉當前已選項的行並選新增加的行
  -a    在現有已選項的行中再增選上指定的行
  -h    如果所處的視窗處於最小化,則高亮該視窗在切換欄上的圖示
  -p    如果某行文字超過的視窗的寬度,則將其自動捲成多行
  -r    和/cline指令配合使用,以使某個大窗裡人名列表的顏色恢復到預設值
  -l    如果自訂視窗帶有列表欄,則此參數表示對列表欄進行操作
  最後,別忘了還可以使用/ECHO指令來往自訂視窗裡顯示信息。
  說明:/cline指令和/sline指令還可以用於大窗的暱稱列表(比如,用/cline指令改變暱稱的顏色—我在Ghost-BOT裡就是這樣做的,呵呵),這時均可省略-l參數,並且此時/sline指令還可以使用-r參數來取消選項。
  對於一個已新增的自訂視窗,還可以使用/renwin指令來更改視窗的名稱或者標題欄文字,用法為:
  /renwin <原視窗名稱> <新視窗名稱> [標題欄主旨]

--------------------------------------------------------------------------------

與自訂視窗相關的函數

--------------------------------------------------------------------------------
$window(N/@視窗名) 函數
【作用】
  返回與某個視窗相關的內容。
【說明】
  $window()函數的內容包括:
  x,y,w,h  返回指定視窗的橫坐標、縱坐標、寬和高
  dx,dy   返回指定視窗相對於左面的的橫坐標和縱坐標
  dw,dh   返回指定視窗文本顯示區域的寬和高
  bw,bh   返回指定繪圖視窗位圖顯示區域的寬和高
  mdi    返回指定視窗是否是mIRC的一個內部視窗,是則返回「$true」,否則返回「$false」
  state   針對指定視窗是否處於最小化/最大化/隱藏的狀態分別返回minimized/maximized/hidden/normal
  title   返回指定視窗的標題欄文字
  font    返回指定視窗所用字體的名稱
  fontsize  返回指定視窗所用字體的字號
  fontbold  指定視窗的字體如果是粗體,返回「$true」,否則返回「$false」
  logfile  指定視窗如果開啟了記錄,則返回記錄文件的名稱
  stamp   返回指定視窗的時間戳(Timestamp)設定
  icon    如果指定視窗的圖示可見,則返回「on」,否則返回「off」
【提示】
  可以使用$window(@帶萬用字元的視窗名稱, N)來返回第N個匹配該萬用字元視窗名稱的自訂視窗名。
  如果使用$window(萬用字元字串, N),則可以返回第N個匹配該萬用字元字串的視窗名(該視窗可以是任何類型的視窗,只要匹配該萬用字元字串)。
【舉例】
  $window(@test).w,將返回視窗@test的寬
  $window(@test).title,將返回視窗@test的標題欄文字
  $window(@*, 0),將返回所有自訂視窗的個數
  $window(*, 1),將返回「Status Window」
  $window(*, 2).state,將返回mIRC裡第二個內部視窗的狀態

--------------------------------------------------------------------------------
$line(視窗名, N, T) 函數
【作用】
  返回指定視窗第N行的文字。
【說明】
  如果N為0,則返回該視窗的總行數。
  如果指定視窗帶有列表欄,則可以設定T為1以指向該列表欄;如果設定T為0,則指向普通顯示區域。
【提示】
  本函數不只限於用在自訂視窗。

--------------------------------------------------------------------------------
$fline(視窗名, 萬用字元字串, N, T) 函數
【作用】
  返回指定視窗中,第N個符合萬用字元字串的行所處的位置。
【說明】
  如果N為0,則返回符合該萬用字元字串的總行數。
  如果指定視窗帶有列表欄,則可以設定T為1以指向該列表欄;如果設定T為0,則指向普通顯示區域。
【提示】
  本函數不只限於用在自訂視窗。

--------------------------------------------------------------------------------
$sline(視窗名, N) 函數
【作用】
  返回在一個帶有列表欄視窗的列表欄的第N行被選的內容(僅用於帶列表欄的視窗,包括聊天大窗)。
【說明】
  如果N為0,則返回該列表欄被選的總行數。
  $sline()函數有一個「ln」內容,可以返回指定行在列表欄裡的行號。

--------------------------------------------------------------------------------
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
mIRC教學--全攻略 psac 網路軟硬體架設技術文件 17 2005-04-26 06:50 PM
MIRc server 篇 psac 網路軟硬體架設技術文件 0 2003-07-24 02:27 AM


所有時間均為台北時間。現在的時間是 11:20 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1