เว็บบอร์ด อยู่ระหว่างปรับปรุงหน้าเว็บ

12 ก.ค. 2009

จับ Explorer และหน้าต่างอื่นๆ เข้ามาวางไว้ใน Taskbar ของ Windows 7

     โดยปกติในWindows 7 เราจะไม่สามารถนำเอาไอคอน Computer หรือ Recycle Bin รวมถึงไอคอนอื่นๆ มาฝังเข้าไปใน Taskbar ด้วยการคลิกขวาที่ไอคอนแล้วเลือกคำสั่ง Pin to Taskbar ได้

     หากคุณต้องการก็มีวิธีดัดแปลงนิดหน่อยด้วยการอาศัยค่า CLSID ใน Registry มาเป็นตัวสร้างไอคอน วิธีการทำมีขั้นตอนดังนี้ครับ

CLSID คืออะไร อยากรู้แบบลึกๆ ที่มาที่ไปทุกเม็ด โปรดรออ่านในหนังสือ Registry ที่กำลังจะออกเร็วๆ นี้ (โฆษณาซะเลย)

1. คลิกขวาที่ไอคอนอะไรก็ได้เลือกคำสั่ง Pin to Taskbar เพื่อนำเอาไอคอนนั้นใส่ใน Taskbar






2. กดปุ่ม Shift ค้างไว้แล้วคลิกขวาที่ไอคอนบน Taskbar เลือกคำสั่ง Properties (ถ้าไม่กด Shift จะไม่มีคำสั่งนี้ออกมาให้เลือก)






3. หน้าต่าง Properties จะปรากฏขึ้นมา ให้นำเอาข้อความด้านล่างนี้ ไปใส่ไว้ที่ช่อง Target: โดยลบข้อความเดิมในช่องออกก่อนนะครับ เสร็จแล้วก็คลิกปุ่ม OK ก็เป็นอันเสร็จสิ้น พอคลิกที่ไอคอน ก็จะเป็นการเปิดหน้าต่าง Explorer ขึ้นมาทันที

%SystemRoot%\explorer.exe /root,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}




ถ้าจะดัดแปลงให้เรียกหน้าต่างอื่น ก็เปลี่ยนเลข CLSID ตรงด้านท้ายตามตัวอย่างนี้ครับ


My Documents

%SystemRoot%\explorer.exe /root,::{450D8FBA-AD25-11D0-98A8-0800361B1103}

Recycle Bin

%SystemRoot%\explorer.exe /root,::{645FF040-5081-101B-9F08-00AA002F954E}

Control Panel

%SystemRoot%\explorer.exe /root,::{21EC2020-3AEA-1069-A2DD-08002B30309D}



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


คลิกอ่านต่อ...

4 ก.ค. 2009

สร้างโปรแกรม Auto comment Hi5 และโปรแกรมควบคุมเว็บด้วย AutoIt [4]

     ก่อนอื่นขอบอกกล่าวกันสักนิด บางท่านบ่นๆ บอกจะยืดเนื้อหาไปถึงไหน ไม่เข้าเรื่องสร้างโปรแกรม Auto Comment สักที ก็ต้องขออภัยมา ณ ที่นี้ด้วย เนื่องจากผมยังไม่ได้สมัคร Hi5 แต่ถ้าอ่านเนื้อหามาตั้งแต่ต้นก็คงพอคลำทางสร้างโปรแกรมได้บ้างแล้ว มีข้อสงสัยถามได้ที่บอร์ดเลยครับ

     และหลังจากบทความตอนนี้แล้ว ผมขอหยุดเขียนบทความเรื่อง Auto Comment เอาไว้สักพักก่อน(รอสมัคร Hi5 แล้วจะมาเขียนต่อ) ขอเสริมบทความด้านอื่นๆ เข้ามาบ้าง ไม่อย่างนั้นบล็อคจะมีแต่บทความ Autoit เต็มหน้าเว็บ

     สำหรับวันนี้ จะศึกษาคำสั่งในการค้นหาลิงก์ที่ต้องการในเว็บ แล้วสั่งให้คลิก หรือทำงานอย่างอื่นตามเงื่อนไขที่กำหนด ขออธิบายตัวโปรแกรมที่จะสร้างกันก่อนนะครับ ตัวอย่างโปรแกรมนี้จะทำงานตามลำดับขั้นตอนนี้คือ

1. เปิดหน้าเว็บบอร์ด (1)
2. ค้นหาลิงก์กระทู้ต่างๆ ที่อยู่ในหน้าเว็บบอร์ด แล้วเข้าไปพิมพ์ข้อความลงไป(2)
3 พิมพ์เสร็จก็ปิดหน้ากระทู้นั้น แล้วเปิดกระทู้ใหม่ เข้าไปพิมพ์อีก จนครบทุกกระทู้ในหน้าเว็บ(3)






โดยคำสั่งที่เราจะศึกษาเพิ่มเติมในตอนนี้คือ

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

$oLinks = _IELinkGetCollection($oIE)

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

StringInStr($oLink.href,"test")

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

_IEQuit ($oIE2)      

     For...In...Next เป็นคำสั่งสำหรับการนับอาเรย์(Array) ที่บรรจุอยู่ในค่าตัวแปร คำสั่งนี้เราจะนำมาใช้คู่กับคำสั่ง _IELinkGetCollection เนื่องจากตัวแปรดึงข้อมูลมาจากคำสั่ง _IELinkGetCollection จะเป็นตัวแปรแบบอาเรย์ที่บรรจุลิงก์เอาไว้จำนวนมาก รูปแบบคำสั่งมีดังนี้

For (ชื่อตัวแปรที่จะเก็บค่าที่ดึงจากอาเรย์มาตรวจสอบ) In (ชื่อตัวแปรที่เก็บข้อมูลแบบอาเรย์เอาไว้ ซึ่งมาจากคำสั่ง _IELinkGetCollection)

Next เป็นคำสั่งปิดท้ายหลังจากตรวจสอบค่าที่อยู่ในอาเรย์จนหมดแล้ว ก็จะทำตามคำสั่งที่อยู่ถัดจากคำสั่ง Next นี้



ตัวอย่างการใช้งานคำสั่งทั้งหมดเมื่อเขียนออกมาแล้วจะได้ดังนี้

#include <IE.au3>

$oIE = _IECreate ("http://bbznet.pukpik.com/scripts2/board.php?p=6&board=1&user=psix&view_type=&order=numtopic&c=1")

$oLinks = _IELinkGetCollection($oIE)

For $oLink in $oLinks
    If StringInStr($oLink.href,"board=1&id=") Then
       $oIE2 = _IECreate ($oLink)
        $Form = _IEFormGetObjByName ($oIE2, "form1")
$Query = _IEFormElementGetObjByName ($Form, "message")
    _IEFormElementSetValue ($Query, "สวัสดี")
    _IEFormSubmit ($Form)   
        _IELoadWait($oIE2)
                 _IEQuit ($oIE2)       
    EndIf
Next

 

อธิบายคำสั่ง

#include <IE.au3>
;ดึงเอา Library เพื่อควบคุม IE เข้ามาในสคริปต์


$oIE = _IECreate ("http://bbznet.pukpik.com/scripts2/board.php?p=6&board=1&user=psix&view_type=&order=numtopic&c=1")
;เปิดเว็บบอร์ดในหน้าที่ 6

$oLinks = _IELinkGetCollection($oIE)
;ดึงเอาลิงก์ทั้งหมดในหน้าเว็บบอร์ดเข้ามาอยู่ในตัวแปร $oLinks

For $oLink in $oLinks
;ดึงเอาค่าที่เก็บไว้ในอาเรย์ที่อยู่ในตัวแปรมาแยกประมวลผลทีละค่า

    If StringInStr($oLink.href,"board=1&id=") Then
;ใส่คำสั่งตรวจสอบข้อความที่อยู่ในค่านั้น(คือตรวจสอบลิงก์แต่ละอันนั่นเอง) ถ้าหากเจอก็ค่าที่ต้องการก็ทำตามเงื่อนไขที่กำหนดดังนี้

       $oIE2 = _IECreate ($oLink)
;เปิดลิงก์นั้นในหน้าต่างใหม่ แล้วดึงเอาหน้าต่างนั้นมาเก็บไว้ในตัวแปร $oIE2

        $Form = _IEFormGetObjByName ($oIE2, "form1")
;สั่งโฟกัสไปที่ฟอร์มชื่อ form1

$Query = _IEFormElementGetObjByName ($Form, "message")
;สั่งโฟกัสไปที่ช่องกรอกข้อความในกระทู้ ที่ชื่อ message (การหาชื่อฟอร์มพวกนี้อยู่ในตอนที่ 1)

    _IEFormElementSetValue ($Query, "สวัสดี")
;สั่งให้ส่งข้อความว่า สวัสดี ไปยังช่องกรอกข้อความที่โฟกัสเอาไว้

    _IEFormSubmit ($Form)    
;สั่งคลิกปุ่มส่งข้อความในหน้าเว็บ

        _IELoadWait($oIE2)
;สั่งให้รอให้เว็บโหลดจนเสร็จ

                 _IEQuit ($oIE2) 
;เมื่อโหลดเสร็จก็สั่งปิดหน้าเว็บนั้น       

    EndIf
;จบเงื่อนไขการตรวจสอบข้อความในลิงก์  กลับไปวนซ้ำเพื่อประมวลผลค่าลิงก์ต่อไปจนครบ

Next
;เมื่อประมวลผลจนครบหมดทุกลิงก์แล้ว ก็ทำตามคำสั่งที่อยู่หลังคำสั่ง Next (ตามตัวอย่างนี้ไม่มีคำสั่งอะไรอีกแล้ว)



หลังจากเขียคำสั่งเสร็จ แล้วทดลองทำ เราก็จะได้หน้าเว็บที่มีการโฟสกระทู้ทุกลิงก์ ดังรูปด้านล่างนี้


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


คลิกอ่านต่อ...

17 มิ.ย. 2009

สร้างโปรแกรม Auto comment Hi5 และโปรแกรมควบคุมเว็บด้วย AutoIt [3]



ตอนที่ 1
ตอนที่ 2

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

ก่อนอื่นผมขอยกตัวอย่างปัญหาจากเหตุการณ์จริงของผู้อ่านในเว็บ คือเว็บ Hi5 ตาม URL http://www.hi5.com/friend/displaySearch.do?searchType=advanced โดยที่เราจะเขียนคำสั่งเลือกประเทศในกรอบสีแดงดังรูปด้านล่างนี้





ตามตัวอย่างนี้ ถ้าจะโฟกัสฟอร์ม ตามวิธีการในบทก่อนๆ โดยใช้คำสั่ง
$Form = _IEFormGetObjByName ($IE, "searchForm")
จะทำให้เกิดปัญหาทันที ซึ่งปัญหาที่เกิดขึ้นนั้นมีสาเหตุมากจาก ฟอร์มในเว็บมีชื่อซ้ำกันนั่นเอง ดังรูปด้านล่างนี้ (ลูกศร A) วิธีแก้ไขปัญหาเราจำเป็นต้องเลี่ยงไปใช้คำสั่งอื่นเพื่อให้โปรแกรมโฟกัสฟอร์มที่ต้องการแทน

     โดยใช้คำสั่ง _IEGetObjById แทน เพื่อสั่งให้โฟกัสฟอร์มจากชื่อของไอดี(ดูลูกศร B) รูปแบบคำสั่ง _IEGetObjById(ชื่อตัวแปรของเว็บที่ต้องการอ้างอิง,ชื่อไอดีของฟอร์ม) เมื่อเขียนออกมาเป็นคำสั่งแล้วก็จะได้
$id = _IEGetObjById ($IE, "formSearchDetail")



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

1. ตั้งค่าแบบเลือกจากตัวไตเติลข้อความ รูปแบบคำสั่ง _IEFormElementOptionSelect ( ชื่อตัวแปรของวัตถุที่ต้องการตั้งค่า, "ค่าที่ต้องการจะตั้ง", 1, ชนิดค่าที่เลือก "byText" เพื่อกำหนดเป็นแบบไตเติลข้อความ ) ตัวอย่างการใช้คำสั่ง
_IEFormElementOptionSelect($Query,"กรีก",1,"byText")

2.ตั้งค่าแบบเลือกจากค่า Value ซึ่งเป็นค่าเฉพาะของแต่ละตัวเลือกในดร็อปดาวน์ลิส รูปแบบคำสั่ง _IEFormElementOptionSelect ( ชื่อตัวแปรของวัตถุที่ต้องการตั้งค่า, "ค่าที่ต้องการจะตั้ง", 1, ชนิดค่าที่เลือก "byValue" เพื่อกำหนดเป็นแบบ Value ) ตัวอย่างการใช้คำสั่ง
_IEFormElementOptionSelect($Query, "1026", 1, "byValue")



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

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


สำหรับคำสั่งเมื่อเขียนให้ส่งการตั้งค่าเข้าไปในดร็อปดาวน์ลิส มีตัวอย่างการใช้ดังนี้ครับ

#include < ie.au3 >

$IE = _IECreate ("http://www.hi5.com/friend/displaySearch.do?searchType=advanced")
;สั่งให้เปิดเว็บ http://www.hi5.com/friend/displaySearch.do?searchType=advanced และดึงเอาค่าของเว็บมาเก็บไว้ในตัวแปร $IE
$id = _IEGetObjById ($IE, "formSearchDetail")
;สั่งโฟกัสไปยังฟอร์มที่มีไอดีชื่อว่า formSearchDetail โดยดึงเอาค่าที่ได้มาเก็บไว้ในตัวแปร $id
$Query = _IEFormElementGetObjByName ($id, "country")
;สั่งโฟกัสไปยังวัตถุที่อยู่ในฟอร์ม ที่ชื่อว่า country และดึงเอาค่าที่ได้มาเก็บไว้ในตัวแปร $Query
_IEFormElementOptionSelect($Query, "1002", 1, "byValue")
;ส่งค่าการตั้งค่าไปยังวัตถุ โดยตั้งค่าเป็นแบบ "byValue"

หมายเหตุ
เลข 1 ที่คั่นอยู่ระหว่างคำสั่ง "1002", 1, "byValue" คือการกำหนดให้มีเลือกวัตถุนั้นแล้วส่งค่าเข้าไป


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

คลิกอ่านต่อ...

13 มิ.ย. 2009

สร้างโปรแกรม Auto comment Hi5 และโปรแกรมควบคุมเว็บด้วย AutoIt [2]



ตอนที่ 1
     สำหรับตอนที่ 2 ในการศึกษาการสร้างโปรแกรม Auto comment นั้นเราจะทำโปรแกรมสำหรับการปั้มกระทู้กันครับ และก่อนจะเริ่มทำก็ต้องมาทำความเข้าใจกันเสียก่อนว่า ในการทำโปรแกรมใดๆ ก็ตามที่เกี่ยวกับการสร้างโปรแกรมออโต้ในเว็บ เราจำเป็นต้องมีสิ่งที่เรียกว่า จินตนาการ เพราะโปรแกรมที่เราทำนั้นจะเลียนแบบพฤติกรรมของคน คุณต้องคิดให้ออกเสียก่อนว่าลำดับขั้นตอนที่คนปกติทำ มีขั้นตอนอะไรบ้าง จากนั้นก็นำลำดับขั้นตอนดังกล่าวมาเขียนเป็นคำสั่งที่เลียนแบบพฤติกรรมของคน

     ตัวอย่าง การสร้างโปรแกรมปั้มกระทู้ในเว็บ ผมจะใช้เว็บบอร์ดในเว็บนี้ทำ ซึ่งจะมีลำดับขั้นตอนปกติดังนี้
1. เปิดหน้ากระทู้ที่จะปั้ม (จะตัดการล็อกอินออกไป เพราะถือว่าสามารถล็อคอินในบอร์ดได้ถาวรอยู่แล้ว ไม่จำเป็นต้องล็อคอินทุกครั้งที่ทำการปั้ม)
2. พิมพ์ข้อความลงในช่องข้อความ
3. คลิกปุ่ม ส่งข้อความ
4. รอจนกระทั่งข้อความที่คลิกส่งปรากฏ แล้วก็เริ่มขั้นตอนที่ 2 วนไปเรื่อยๆ

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





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

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

โครงสร้างของไฟล์ ini
[SectionName]
Key=Value

เมื่อทำแล้วก็จะได้แบบนี้ (จะมีข้อความภายในคีย์ text1 ถึง text5 ใช้สำหรับสุ่มข้อความ 5 แบบ)
[text]
text1="สุ่มข้อความที่ 1 สวัสดี"
text2="สุ่มข้อความที่ 2 ทดสอบ"
text3="สุ่มข้อความที่ 3 การโฟสข้อความแบบสุ่ม"
text4="สุ่มข้อความที่ 4 ข้อความจะไม่เรียงกัน"
text5="สุ่มข้อความที่ 5 จะสุ่มไปเรื่อยๆ"

     แถมท้าย ถ้าคุณสร้างไฟล์ .ini ภายในโฟลเดอร์เดียวกันกับตัวโปรแกรม ควรใช้ตัวแปร @ScriptDir ซึ่งจะช่วยดึงเอาชื่อตำแหน่งไดร์ฟและโฟลเดอร์เดียวกันกับโปรแกรมมาใส่ในคำสั่งอัตโนมัติ

While 1 และ WEnd เอาไว้ครอบชุดคำสั่งที่เราต้องการให้วนลูปไปเรื่อยๆ คำสั่งนี้สำคัญมากเพราะมันจะเป็นตัวชี้ให้โปรแกรมวนซ้ำขั้นตอนต่างๆ ที่เราใส่คำสั่งเอาไว้ ตัวอย่าง ในการสร้างโปรแกรมปั้มกระทู้นี้ เราจะนำเอาคำสั่งมาไว้แบบนี้

1. เปิดหน้ากระทู้ที่จะปั้ม
While 1
2. พิมพ์ข้อความลงในช่องข้อความ
3. คลิกปุ่ม ส่งข้อความ
4. รอจนกระทั่งข้อความที่คลิกส่งปรากฏ
WEnd

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

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

Switch...Case...EndSwitch เป็นคำสั่ง เพื่ออ่านค่าตัวแปร ถ้าตรงกับเงื่อนไขที่กำหนดก็จะทำตามเงื่อนไขนั้นทันที เราจะใช้คำสั่งนี้คู่กับ Random เพื่อดึงเอาค่าตัวแปรซึ่งสุ่มจำนวนตัวเลข มากำหนดเงื่อนไขในการดึงข้อมูลในไฟล์ ini รูปแบบคำสั่ง
Switch (ตามด้วยชื่อตัวแปรที่จะอ่าน)
Case (ค่าที่นำมาเปรียบเทียบกับค่าที่อยู่ในตัวแปร)
Case (ค่าที่นำมาเปรียบเทียบกับค่าที่อยู่ในตัวแปร)
Case (ค่าที่นำมาเปรียบเทียบกับค่าที่อยู่ในตัวแปร)
EndSwitch (จบการทำงาน)

ตัวอย่าง

$rnd = Random(1,5,1)
;ทำการสุ่มตัวเลข 1 - 5 หนึ่งครั้ง แล้วดึงเอาค่าตัวเลขที่ได้มาเก็บไว้ในตัวแปรชื่อ $rnd
Switch $rnd
; อ่านค่าตัวแปร $rnd
Case 1
;ถ้าได้เท่ากับ 1 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 2
;ถ้าได้เท่ากับ 2 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 3
;ถ้าได้เท่ากับ 3 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 4
;ถ้าได้เท่ากับ 4 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 5
;ถ้าได้เท่ากับ 5 ก็ทำตามเงื่อนไขใน Case ข้อนี้
EndSwitch

ดูคำสั่งอาจจะงงๆ ในการนำมาใช้บ้าง มาดูขั้นตอนการทำจะทำให้เข้าใจยิ่งขึ้น

1. สร้างไฟล์ .ini สำหรับเก็บข้อความที่เราจะสุ่มมาใช้เสียก่อน โดยตั้งชื่อเป็น autotxt.ini เก็บไว้ในโฟลเดอร์เดียวกันกับไฟล์สคริปต์ Autoit ภายในไฟล์ก็พิมพ์ตามรูปแบบด้านล่างนี้ได้เลยครับ (อาจจะเปลี่ยนข้อความที่ใช้สุ่มตามต้องการ)



2. หาชื่อฟอร์มและชื่อช่องสำหรับพิมพ์ข้อความในเว็บบอร์ด เพื่อนำมาเขียนคำสั่ง ตามตัวอย่างนี้
ฟอร์มมีชื่อว่า form1
ช่องสำหรับพิมพ์ข้อความมีชื่อว่า message



3. เริ่มเขียนคำสั่ง ผมจะใส่เครื่องหมาย ; เพื่ออธิบายคำสั่งแต่ละบรรทัดไปด้วย

#include <ie.au3>
;ดึงเอา Library เพื่อควบคุม IE เข้ามาในสคริปต์

$txt1 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text1", "NotFound")
$txt2 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text2", "NotFound")
$txt3 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text3", "NotFound")
$txt4 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text4", "NotFound")
$txt5 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text5", "NotFound")

; คำสั่ง 5 บรรทัดนี้เหมือนกัน คือดึงเอาข้อความที่อยู่ในคีย์ text1 ถึง text5 ที่อยู่ในไฟล์ autotxt.ini มาเก็บไว้ในตัวแปร $txt1 - 5 ตามลำดับ

$IE = _IECreate ("http://bbznet.pukpik.com/scripts2/view.php?user=psix&board=1&id=1107&c=1&order=numtopic")
; เปิดกระทู้ในเว็บบอร์ดที่เราจะปั้ม แล้วดึงเอากระทู้ดังกล่าวเข้ามาสู่ตัวแปร $IE

While 1
;เริ่มต้นวนลูป

$Form = _IEFormGetObjByName ($IE, "form1")
;สั่งโฟกัสไปที่ฟอร์ม form1

$Query = _IEFormElementGetObjByName ($Form, "message")
;สั่งโฟกัสไปยังช่องสำหรับพิมพ์ข้อความมีชื่อว่า message (ซึ่งอยู่ในฟอร์ม form1 ที่เราสั่งโฟกัสไปก่อนหน้านี้)

$rnd = Random(1,5,1)
;สั่งให้สุ่มตัวเลข 1 -5 จำนวนหนึ่งครั้ง และดึงค่าที่ได้มาเก็บไว้ในตัวแปร $rnd

Switch $rnd
;อ่านค่าจากตัวแปร $rnd เพื่อนำไปเปรียบเทียบกับ Case ต่างๆ ต่อไปนี้

Case 1
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 1
_IEFormElementSetValue ($Query,$txt1)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt1 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 2
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 2
_IEFormElementSetValue ($Query, $txt2)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt2 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 3
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 3
_IEFormElementSetValue ($Query, $txt3)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt3 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 4
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 4
_IEFormElementSetValue ($Query, $txt4)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt4 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 5
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 5
_IEFormElementSetValue ($Query, $txt5)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt5 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
EndSwitch
;จบคำสั่ง Switch

_IEFormSubmit ($Form)
;สั่งให้คลิกปุ่มส่งข้อความในฟอร์ม หลังจากวางข้อความที่ผ่านการสุ่มลงในช่องข้อความเรียบร้อยแล้ว

_IELoadWait($IE)
;สั่งให้รอจะหน้าเว็บโหลดเสร็จเสียก่อนจึงค่อยเริ่มต้นคำสั่งถัดไป

WEnd
;บอกให้รู้ว่าลูปจบแล้ว ให้ย้อนกลับไปเริ่มต้นใหม่ที่ตำแหน่ While 1 อีกครั้ง

สำหรับคำสั่งแบบไม่มีคำอธิบายมาคั่น ดูได้จากด้านล่างนี้นะครับ (ท่านที่จะทดสอบในเว็บบอร์ด ขอให้ตั้งกระทู้ใหม่ทดสอบนะครับ อย่าใช้กระทู้ที่มีการถามตอบทั่วไปทดสอบ)

#include <ie.au3>
$txt1 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text1", "NotFound")
$txt2 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text2", "NotFound")
$txt3 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text3", "NotFound")
$txt4 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text4", "NotFound")
$txt5 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text5", "NotFound")

$IE = _IECreate ("ใส่ลิงก์กระทู้ที่ต้องการให้เปิด")

While 1
$Form = _IEFormGetObjByName ($IE, "form1")
$Query = _IEFormElementGetObjByName ($Form, "message")
$rnd = Random(1,5,1)

Switch $rnd
Case 1
_IEFormElementSetValue ($Query, $txt1)
Case 2
_IEFormElementSetValue ($Query, $txt2)
Case 3
_IEFormElementSetValue ($Query, $txt3)
Case 4
_IEFormElementSetValue ($Query, $txt4)
Case 5
EndSwitch
_IEFormSubmit ($Form)
_IELoadWait($IE)
WEnd

รูปตัวอย่าง คำสั่งที่เขียนในโปรแกรม






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


คลิกอ่านต่อ...

10 มิ.ย. 2009

สร้างโปรแกรม Auto comment Hi5 และโปรแกรมควบคุมเว็บด้วย AutoIt [1]

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

ในขั้นเริ่มต้น ขอให้คุณดาวน์โหลดโปรแกรมที่เกียวข้องมาติดตั้งคือ
(ถ้ายังไม่มีความรู้พื้นฐาน ย้อนกลับไปอ่านบทต้นๆ ก่อนครับ)

Autoit (สำหรับใช้เขียนสคริปต์คำสั่ง)
คลิกดาวน์โหลด

IEDevToolBar (สำหรับทำการดูโค้ดของหน้าเว็บ เพื่อนำมาเขียนคำสั่งควบคุม)
คลิกดาวน์โหลด

Koda (สำหรับใช้สร้าง GUI เพื่อเป็นหน้าต่างตอบโต้กับผู้ใช้โปรแกรม)
คลิกดาวน์โหลด

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

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

2. ชื่อของวัตถุที่อยู่ในฟอร์ม วัตถุทุกอย่างที่อยู่ในฟอร์มจะมีชื่อและลำดับ



     ยกตัวอย่างเช่นเว็บ Google หากคุณต้องการจะเขียนคำสั่งกรอกข้อมูลลงไปในช่องค้นหา แล้วคลิกปุ่มเพื่อสั่งค้นหา คุณต้องหาสองสิ่งคือ
1. ชื่อของฟอร์มที่บรรจุวัตถุ
2. ชื่อของช่องเท็กซ์บ็อกซ์ที่ใช้ในการพิมพ์ข้อความ

วิธีการหาชื่อของฟอร์มและวัตถุในฟอร์มนั้น เราใช้โปรแกรม IEDevToolBar ช่วยนะครับ ตามวิธีการดังนี้

1. เปิดเข้าเว็บ http://www.google.co.th/ แล้วกดปุ่ม F12 หรือคลิกที่ไปเมนู Tool -> Developer Tools (หาไม่ได้ติดตั้งโปรแกรม IEDevToolBar จะไม่มีอะไรเกิดขึ้น)


2. คลิกลูกศรที่อยู่ในหน้าทูลบาร์ของหน้าโปรแกรม IEDevToolBar จากนั้นก็เลื่อนเม้าส์ไปคลิกที่ช่องเท็กซ์บ็อกซ์ สังเกตดูตอนเลื่อนเม้าส์จะมีกรอกเส้นสีน้ำเงินปรากฏอยู่ด้วย เมื่อคลิกไปแล้วจะมีโค้ดคำสั่งปรากฏขึ้นมา ให้ดูตรง 2 ส่วนคือ

ชื่อของฟอร์มที่บรรจุช่องสำหรับพิมพ์คำค้นหา ในตัวอย่างนี้ชื่อ "f"
ชื่อของช่องเท็กซ์บ็อกซ์สำหรับใช้พิมพ์คำค้นหา ในตัวอย่างนี้คือ "q"

สรุปอีกครั้ง
     ในเว็บ google นั้น จะมีในฟอร์มชื่อ "f" ซึ่งบรรจุช่องเท็กซ์บ็อกซ์สำหรับพิมพ์ค้นหาชื่อว่า "q"

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


ขั้นตอนต่อไปเป็นการเขียนคำสั่งควบคุมด้วย Autoit

เริ่มต้นต้องใส่คำสั่ง #include < ie.au3 > ลงไปด้านบนสุดด้วยทุกครั้ง เพื่อดึงเอาชุดคำสั่งใน Library ที่ใช้ในการควบคุม IE ของ AutoIt มาใช้

_IECreate เป็นคำสั่งสำหรับเปิดหน้าเว็บ รูปแบบคำสั่ง _IECreate ("ชื่อเว็บที่จะเปิด")

_IEFormGetObjByName เป็นคำสั่งสำหรับโฟกัสไปยังฟอร์มที่ระบุชื่อเอาไว้ รูปแบบคำสั่ง _IEFormGetObjByName("ชื่อตัวแปรของเว็บที่ต้องการอ้างอิง","ชื่อฟอร์มที่ต้องการโฟกัส")

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

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

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

     สำหรับการสร้างตัวแปรเพื่อเก็บค่าต่างๆ ทำได้ด้วยการพิมพ์ $ แล้วตามด้วยชื่อตัวแปร เช่น $IE และใช้เครื่องหมาย = ต่อท้ายเพื่อดึงเอาค่าที่ได้จากการใช้คำสั่งมาเก็บไว้ในตัวแปรนั้นๆ เช่น $IE = _IECreate ("http://www.google.co.th/")

     ต่อไปตัวอย่างคำสั่งที่ใช้เขียนการส่งข้อมูลในเว็บ google โดยผมจะส่งคำว่า pssix.blogspot.com ลงไปในช่องพิมพ์ค้นหา แล้วสั่งให้คลิกปุ่ม "ค้นหาด้วย google" ขอให้ดูรูปประกอบคำสั่งนะครับจะได้เข้าใจยิ่งขึ้น

#include << ie.au3 >>
$IE = _IECreate ("http://www.google.co.th/")
; เปิดเว็บ google แล้วดึงเอาเว็บเข้ามาสู่ตัวแปร $IE (ดูลูกศร A)

$Form = _IEFormGetObjByName ($IE, "f")
;สั่งโฟกัสไปที่ฟอร์ม f (ดูลูกศร B)

$Query = _IEFormElementGetObjByName ($Form, "q")
;สั่งโฟกัสไปยังช่องพิมพ์คำค้นหาที่ชื่อ q (ซึ่งอยู่ในฟอร์ม f ที่เราโฟกัสไปก่อนหน้านี้)(ดูลูกศร C)

_IEFormElementSetValue ($Query, "pssix.blogspot.com")
;สั่งให้ตั้งค่าช่องพิมพ์คำค้นหาด้วยคำว่า pssix.blogspot.com (ดูลูกศร D)

_IEFormSubmit ($Form)
;คลิกปุ่ม Submit "ค้นหาด้วย google" ซึ่งอยู่ในฟอร์ม f (ดูลูกศร E)



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



คลิกอ่านต่อ...