Oct 5, 2010
Tuesday, October 05, 2010

เริ่มต้นเขียนโปรแกรมด้วย AutoIt :1

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

ประวัติย่อ AutoIt
     เดือนตุลาคม 1998 นาย Jonathan Bennett (ชื่อเล่น Jon) ออกแบบโปรแกรมประเภททำงานอัตโนมัติบน Windows NT 4 โดยใช้ ScriptIt (อ้างอิง) ซึ่งหลังจากทำงานเสร็จก็พบว่าการทำงานของมันไม่มีความเสถียรอย่างมาก ซึ่งทำให้เกิดปัญหายิบย่อยที่ตามมาจากการเขียนคำสั่งใน ScriptIt

     พอปลายปี 1998  นาย jon ได้ตัดสินใจสร้างโปรแกรมกดปุ่มอัตโนมัติขึ้นมาเอง โดยทำจากภาษา C เมื่อพัฒนาโปรแกรมจนถึงต้นปี 1999  AutoIt (ออโต้อิท : อ้างอิง) เวอร์ชั่น 1 จึงกำเนิดขึ้นมาบนโลกใบนี้ ในปีเดียวกันก็มีแก้ไขออกเวอร์ชั่นย่อยอีกจำนวนมาก จนกลายมาเป็นเวอร์ชั่น 2

     ต่อมาเมื่อปี 2001 โค้ดของ AutoIt ทั้งหมดจึงเปลี่ยนมาใช้ภาษา C++ ในการทำ ให้เข้าใจง่ายๆ ก็คือ Interpreter ที่คอยแปลคำสั่งสคริปต์ของ AutoIt พัฒนามาจาก C++ นั่นเอง รวมถึงเครื่องมือต่างๆ ที่ติดมากับการติดตั้ง AutoIt ก็จะพัฒนามาจาก C++ เช่นเดียวกัน

     ในปี 2003 AutoIt พัฒนาเวอร์ชั่น 3 ออกมา (ปัจจุบัน 2010 ขณะเขียนยังเป็นเวอร์ชั่น 3.3.6.1) หลังจากนั้นอีกไม่นานก็สนับสนุนการสร้างฟังก์ชั่นใช้งานแบบ user defined functions (UDF)  ซึ่งถือว่าเป็นจุดเด่นที่สำคัญ ทำให้มีผู้ใช้จำนวนมากมีส่วนร่วมในการพัฒนาเพิ่มความสามารถของ AutoIt ให้สูงขึ้น ถึงจุดนี้ความนิยมในตัวภาษาสคริปต์ AutoIt จากที่มีกลุ่มคนใช้เพียงไม่มาก ก็เพิ่มขึ้นอย่างทวีคูณ ปัจจุบันจึงมีเว็บไซต์เกี่ยวกับ AutoIt อยู่มากมายในแทบทุกภาษา(พูดอ่านเขียน)

AutoIt & AutoHotkey : แด่รักและความบ้าคลั่ง
     ในวันที่ 6 กันยายน ปี 2003 นาย Chirs (คริส) ซึ่งได้สนใจและศึกษา AutoIt ได้เสนอแนวทางการพัฒนาคำสั่งสำหรับใช้ปุ่ม Hotkey ในฟอรั่ม AutoIt แต่ว่าไม่ได้รับความสนใจเท่าที่ควร โดยเฉพาะนาย jon กลัวว่าการ Hook (การดักจับและควบคุมการทำงานของอุปกรณ์ เช่น คีย์บอร์ด, เม้าส์) เพื่อใช้ Hotkey อาจจะถูกมองว่าเป็นโปรแกรมอันตรายจากโปรแกรมป้องกันไวรัส

     เมื่อเป็นแบบนี้นาย Chirs จึงประกาศเจตจำนงแยกตัวเป็นอิสระ โดยการพัฒนาโค้ด Hotkey เองจากโค้ดพื้นฐานของ AutoIt ซึ่งก็ทำสำเร็จในเดือนพฤศจิกายน ปี 2003 นี่เองเป็นที่มาของชื่อ AutoHotkey ใครก็ตามที่ใช้ AutoHotkey สามารถนำเอาโค้ดของ AutoIt v2 มาใช้ได้เลย ซึ่งในตอนนั้น AutoIt จะเป็น Open Source เปิดให้นักพัฒนาสามารถปรับปรุงความสามารถของ AutoIt ได้ เหตุการณ์ครั้งนี้ได้สร้างแรงสั่นสะเทือนต่อการพัฒนา AutoIt เป็นอย่างมาก หลังจากนั้น AutoIt ไม่ Open Source อีกต่อไป

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

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


เปรียบเทียบระหว่าง AutoIt และ AutoHotkey
- AutoHotkey เป็น Open-source (GPL) แต่ AutoIt เวอร์ชั่นปัจจุบันเป็น Close-sourece
- AutoHotkey ใช้ทรัพยากรระบบน้อยกว่า AutoIt
- ในผลลัพธ์เดียวกัน AutoHotkey ใช้โค้ดโปรแกรมที่สั้นกว่า AutoIt
- AutoIt กำหนดรายละเอียดคำสั่งได้เจาะจงและลึกกว่า AutoHotkey
- ความสามารถที่ AutoHotkey ส่วนใหญ่มีสามารถหาได้ใน AutoIt แต่ความสามารถ AutoIt หลายอย่างไม่สามารถหาได้ใน AutoHotkey
- ผู้ร่วมพัฒนา AutoIt มีจำนวนมากกว่า AutoHotkey
- การศึกษาเขียนสคริปต์ AutoHotkey จะง่ายกว่า AutoIt เหมาะสำหรับผู้ต้องการทำโปรแกรมแบบง่ายๆ และยังไม่ชำนาญการเขียนภาษาคอมพิวเตอร์ใดมาก่อน
- หากเรียนรู้การเขียนโปรแกรมมาจากภาษาอื่นมาแล้ว การเรียนรู้ AutoIt จะง่ายกว่า AutoHotkey
- แน่นอนว่าบล็อกนี้ไม่สอน AutoHotkey ถามได้แต่ไม่มีคำตอบ ส่วนคำถาม AutoIt ถามได้ที่ http://pssix.forumotion.com/forum-f2/ (ต้องสมัครสมาชิกก่อน)


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

- AutoIt สามารถควบคุม COM (Component Object Model : อ้างอิง) ที่มีอยู่ในวินโดวส์
- AutoIt สามารถติดต่อเรียนใช้งานฟังก์ชั่น Windows API (อ้างอิง) ได้โดยตรง

     เพียงความรู้สองอย่างข้างต้นนี้(ยังมีอย่างอื่นอีก) หากคุณศึกษาอย่างจนเข้าใจถ่องแท้ สิ่งที่ทำได้นั้น จะมีอนุภาพก็ไม่ต่างจากเวทมนตร์คาถา ตัวอย่างโปรแกรม PSsix Auto Comment Hi5 ตัวโปรแกรมนี้ควบคุมการทำงานของหน้าต่าง IE หากคุณอ่านจาก Help ใน SciTE Script Editor จะพบว่าชุดคำสั่งมีจำนวนไม่มาก ถ้าศึกษา COM เพิ่มเติมขอบเขตการควบคุมนั้นแทบจะเรียกได้ว่าทำได้แทบทุกอย่างที่ต้องการใน IE

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

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

     อย่างไรก็ตามลองพยายามก้าวไปให้เกินพื้นฐานดูบ้าง ถึงจะไปไม่สุดทาง แต่อย่างน้อยก็ทำให้รู้ว่าเราก้าวไปได้ไกลถึงแค่ไหน

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

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

2 comments:

  1. แจ่มครับ

    ได้ความรู้ใหม่ๆ มาด้วย

    ReplyDelete
  2. ขอบคุณครับ
    แต่ว่าพื้นหลังสีดำนี้อ่านแล้วปวดตามากเลยครับ

    ReplyDelete

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


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