Oct 12, 2012
Friday, October 12, 2012

เทคนิคเขียนสคริปต์ AutoIt ดึงรายชื่อไดร์ฟในเครื่องแบบอัตโนมัติ

    การเขียนสคริปต์ปกติของ AutoIt คุณจะต้องสร้างหน้าต่างตอบโตักับผู้ใช้ (GUI) เพื่อกำหนดลักษณะหน้าตา และตำแหน่งของคอนโทรลต่างๆ ภายในหน้าต่าง เสร็จแล้วจึงมาเขียนสคริปต์เข้าควบคุมการทำงาน แต่ในบางกรณีลักษณะส่วนประกอบภายในหน้าต่างโปรแกรมที่สร้างขึ้น อาจจะขึ้นอยู่กับเครื่องที่เปิดใช้โปรแกรม เช่น คุณเขียนสคริปต์เลือกไดร์ฟ ที่แต่ละเครื่องมีจำนวนไม่เหมือนกัน เทคนิคสำหรับการเขียนสคริปต์ในรูปแบบดังกล่าว จะอยู่ในหัวข้อนี้ครับ

    ก่อนเริ่มเขียนสคริปต์ คุณต้องสร้างหน้าต่าง และวางคอนโทรล เช่น เช็กบ็อกซ์, คอมโบบ็อกซ์ หรือลิสวิวมาก่อน เพื่อกำหนดจุดเริ่มต้นในการสร้างขึ้นมาหนี่งอันดังรูปด้านล่างนี้ (หากคุณเป็นมือใหม่อ่าน หนังสือ สำหรับผู้ที่ต้องการหัดเขียนสคริปต์ AutoIt และการหน้าต่าง GUI เบื้องต้น ) ตัวอย่างแรก ผมจะทำกับ เช็กบ็อกซ์ เมื่อได้โค้ดมาเรียบร้อยแล้วก็จะได้ดังนี้



#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("PSsix", 290, 257, 694, 358)
GUISetBkColor(0x99B4D1)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 16, 16, 97, 17)
$Button1 = GUICtrlCreateButton("Button1", 168, 16, 75, 25)
GUICtrlSetBkColor(-1, 0x008000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Form1
        Case $Checkbox1
        Case $Button1
    EndSwitch
WEnd

    จากนั้นเขียนสคริปต์เพิ่มเติม หลักการทำก็คือ จะใช้คำสั่ง DriveGetDrive ดึงเอารายชื่อไดรฟ์ในเครื่องออกมาทั้งหมด(ชื่อไดร์ฟจะถูกเก็บในอาร์เรย์) จากนั้นจะใช้ลูปเพื่อดึงเอาชื่อไดร์ฟมาสร้างเป็นเช็กบ็อกซ์ตามจำนวนไดร์ฟที่มี โดยจะอาศัยตัวแปรอาร์เรย์ $PssixCB[26] เก็บค่าเช็กบ็อกซ์ที่สร้างขึ้น เพื่อสั่งควบคุม หรือตรวจสอบสถานะภายหลัง สคริปต์ที่เขียนเพิ่มเติมเข้าไป คือ  (อธิบายเฉพาะส่วนที่เขียนเพิ่ม)



#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $PssixCB[26]
;สร้างตัวแปรเพื่อเก็บค่าไดร์ฟในเครื่อง
$d = DriveGetDrive("all")
;ดึงรายชื่อไดรฟ์ในเครื่องออกมาทั้งหมด
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("PSsix", 290, 257, 694, 358)
GUISetBkColor(0x99B4D1)

For $i = 1 To $d[0] ;วนลูปเพื่อสร้างเช็คบ็อกซ์แนวตั้ง
    $PssixCB[$i] = GUICtrlCreateCheckbox($d[$i], 16, ($i * 25), 30)
;สร้างเช็คบ็อกซ์ตามจำนวนไดร์ฟที่มีอยู่ในเครื่อง
Next
;จบลูป
$Button1 = GUICtrlCreateButton("Button1", 168, 16, 75, 25)
GUICtrlSetBkColor(-1, 0x008000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Form1
        Case $Button1

                        For $i = 1 To $d[0] ;วนลูป เพื่อตรวจสอบไดร์ฟที่ถูกเช็กเลือก
                If BitAND(GUICtrlRead($PssixCB[$i]), $GUI_CHECKED) Then MsgBox(0, "เลือกไดรฟ์", $d[$i])
            Next

    EndSwitch
WEnd


    ถ้าเปลี่ยนมาเป็นคอมโบบ็อกซ์ จะได้สคริปต์ดังนี้



#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <Array.au3>


$d = DriveGetDrive("all") ;ดึงรายชื่อไดรฟ์ในเครื่องออกมาทั้งหมด
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("PSsix", 290, 257, 694, 358)
GUISetBkColor(0x99B4D1)
$Combo1 = GUICtrlCreateCombo("", 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1,_ArrayToString($d, "|", 1));ใส่เข้าไปในดร็อปดาวน์ลิส
$Button1 = GUICtrlCreateButton("Button1", 168, 16, 75, 25)
GUICtrlSetBkColor(-1, 0x008000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Form1
        Case $Button1
            MsgBox(0,"เลือกไดรฟ์",GUICtrlRead($Combo1))
    EndSwitch
WEnd
   
    ถ้าเปลี่ยนมาเป็นใช้เรดิโอ เพื่อบังคับให้เลือกได้ทีละไดร์ฟ จะได้สคริปต์ดังนี้



#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


Global $PssixCB[26]
 ;สร้างตัวแปรเพื่อเก็บค่าไดร์ฟในเครื่อง
$d = DriveGetDrive("all")
;ดึงรายชื่อไดรฟ์ในเครื่องออกมาทั้งหมด
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("PSsix", 290, 257, 694, 358)
GUISetBkColor(0x99B4D1)

For $i = 1 To $d[0] ;วนลูปเพื่อสร้าง  ตัวเลือกแบบเรดิโอ แนวตั้ง
    $PssixCB[$i] = GUICtrlCreateRadio($d[$i], 16, ($i * 25), 30)
Next

$Button1 = GUICtrlCreateButton("Button1", 168, 16, 75, 25)
GUICtrlSetBkColor(-1, 0x008000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Form1
        Case $Button1
            For $i = 1 To $d[0] ; วนลูปตรวจสอบการคลิกเลือก
                If BitAND(GUICtrlRead($PssixCB[$i]), $GUI_CHECKED) Then MsgBox(0, "เลือกไดรฟ์", $d[$i])
            Next
    EndSwitch
WEnd

   ถ้าเปลี่ยนมาเป็นใช้ลิสวิว จะได้สคริปต์ดังนี้



#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>


Global $PssixCB[26]
;สร้างตัวแปรเพื่อเก็บค่าไดร์ฟในเครื่อง $d = DriveGetDrive("all")
;ดึงรายชื่อไดรฟ์ในเครื่องออกมาทั้งหมด
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("PSsix", 290, 257, 694, 358)
GUISetBkColor(0x99B4D1)

$ListView1 = GUICtrlCreateListView("ไดรฟ์ที่มีอยู่ในเครื่อง", 16, 8, 124, 233)
For $i = 1 To $d[0] ;วนลูปเพื่อสร้าง ตัวเลือกในลิสวิว
$PssixCB[$i] =GUICtrlCreateListViewItem($d[$i],$ListView1)
Next

$Button1 = GUICtrlCreateButton("Button1", 168, 16, 75, 25)
GUICtrlSetBkColor(-1, 0x008000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Form1
        Case $Button1
             $select = _GUICtrlListView_GetSelectedIndices($ListView1)
 ;ดึงสถานะการคลิกเลือกจากลิสวิว MsgBox(0, "เลือกไดรฟ์", $d[$select+1])
; ตัวแปรบวกหนึ่ง เนื่องจากลำดับในลิสวิวเริ่มที่ 0 จะไม่ตรงกับชื่อไดร์ฟที่เก็บในอาร์เรย์ ที่เริ่มต้นจาก 1     EndSwitch
WEnd

หมายเหตุ
    ตัวอย่างสคริปต์ในหัวข้อนี้ เป็นเพียงสคริปต์เริ่มต้นสำหรับสั่งทำงานของสคริปต์ AutoIt เท่านั้น หากคุณต้องการเขียนคำสั่งต่อไปจะให้ทำอะไร เช่น เลือกไดร์ฟ แล้วค้นหาไฟล์, เลือกไดร์ฟแล้วสั่งสร้างไฟล์หรือติดตั้งโปรแกรมในไดร์ฟนั้น หรือทำงานอย่างใดอย่างหนึ่ง คุณต้องเขียนสคริปต์เพิ่มเติมเข้าไป หากสงสัยว่าสคริปต์ AutoIt ที่ต้องเขียนเพิ่มเข้าไปต้องเขียนอย่างไร สอบถามได้ที่ฟอรั่ม AutoIt ครับ (คลิกที่เมนูด้านบนบล็อกนี้)


###จบแล้วครับ###

0 comments:

Post a Comment

    ส่วนนี้สำหรับแสดงความคิดเห็นทั่วไป สอบถามปัญหาตั้งถามได้ที่ฟอรั่ม


>>> [โปรดอ่าน] เนื่องจาก บทความการใช้งานบางโปรแกรมได้โฟสไปนานแล้ว
โปรแกรมอาจมีการอัปเดท วิธีการใช้งาน อาจใช้ไม่ได้ หรือมีวิธีที่ง่ายกว่าในเวอร์ชั่นใหม่
หากคุณพบว่าวิธีการใช้งานไม่ตรงกับบทความในบล็อกนี้ สามารถแนะนำเพิ่มเติมได้ครับ