Apr 5, 2010
Monday, April 05, 2010

ตั้งค่าให้ AutoIt ทำงานเฉพาะเครื่องที่กำหนด

    เมื่อหลายวันก่อนมีผู้อ่านหนังสือ Hack Windows ท่านหนึ่งเมลมาสอบถามการเขียนคำสั่งให้ AutoIt ทำงานเฉพาะเครื่อง ผมเห็นว่ามีประโยชน์ต่อคนอื่นๆ ที่สนใจด้วย จึงนำมาขยายเป็นบทความนี้ขึ้น

     ก่อนจะเริ่มลงมือเขียนต้องเข้าใจก่อนว่า AutoIt สามารถดึงเอารายละเอียดบางอย่างของ
คอมพิวเตอร์ที่ใช้งานอยู่ขึ้นมาได้ เช่น ข้อมูลว่าใช้ Windows อะไร เป็นแบบ 32 หรือ 64 บิต,รายละเอียดของฮาร์ดดิสก์, และ Username ของผู้ใช้ที่กำหนดล็อกอินอยู่ ข้อมูลพวกนี้เป็นข้อมูลพื้นฐานทั่วไป ซึ่งจะมีคำสั่งสำหรับดึงขึ้นมาใช้งานใน AutoIt เรียบร้อยแล้ว   ดังรูปด้านล่างนี้ ผมสั่งให้แสดงข้อมูล Username ของเครื่องที่เปิดโปรแกรม AutoIt ขึ้นมา


วิธีนำมาเขียน เพื่อประยุกต์กำหนดให้ทำงานเฉพาะบางเครื่อง ผมจะยกตัวอย่าง 3 วิธี คือ

1. ใช้คำสั่ง @UserName ตรวจสอบ Username ที่กำลังล็อกอิน
2. ใช้คำสั่ง DriveGetSerial ตรวจสอบ หมายเลข Serial ของฮาร์ดดิสก์
3. ใช้คำสั่ง FileExists ตรวจสอบ ไฟล์ที่ซ่อนเอาไว้ในเครื่อง

     วิธีใช้งานคำสั่งดังกล่าว ทำได้ด้วยการนำชุดคำสั่งไปวางไว้ในตอนต้นของสคริปต์ AutoIt  ตัวอย่างมีดังนี้

1. ทำงานเฉพาะ Username ที่กำหนด วิธีเขียนเราจะใช้คำสั่ง @UserName ดึงเอารายชื่อ Username ที่กำลังล็อกอินเปิดโปรแกรมอยู่มาเป็นตัวตัดสินว่าจะให้โปรแกรมทำงานหรือไม่ ตามตัวอย่างนี้ผมกำหนดให้โปรแกรมตรวจสอบว่า Username ชื่อ POS หรือไม่ ถ้าใช่ก็ทำงานได้ ถ้าไม่ใช่ก็ปิดโปรแกรม ถ้าคุณจะนำไปใช้กับเครื่องอื่นๆ ก็เปลี่ยนตรงชื่อ POS เป็นชื่อ Username ที่คุณกำหนด

if @UserName = "POS" then
    msgbox(64, "ทำงาน", "Username ใช้งานโปรแกรมได้")
Else
    msgbox(64, "ไม่สามารถทำงานได้", "Username นี้ใช้งานโปรแกรมไม่ได้")
    Exit
EndIf


2.ทำงานเฉพาะฮาร์ดดิสก์ที่กำหนด วิธีนี้เราจะใช้คำสั่ง DriveGetSerial ดึงเอาหมายเลข Serial ของฮาร์ดดิสก์ออกมา ซึ่งฮาร์ดดิสก์แต่ละตัวจะมีไม่เหมือนกัน ก่อนใช้เราต้องรู้หมายเลขของฮาร์ดดิสก์เสียก่อน โดยใช้คำสั่ง

$var = DriveGetSerial( "c:\" )
MsgBox(4096, "Serial Number: ", $var)


    นำเอาคำสั่งด้านบนเปิดในเครื่องที่กำหนด แล้วจดเอาหมายเลขฮาร์ดดิสก์เอาไว้ เครื่องของผมจะได้หมายเลข 1088306497


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

$var = DriveGetSerial( "c:\" )
if $var = "1088306497" then
    msgbox(64, "ทำงาน", "ใช้งานโปรแกรมได้")
Else
    msgbox(64, "ไม่สามารถทำงานได้", "ใช้งานโปรแกรมไม่ได้")
    Exit
EndIf


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

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

คำสั่งที่ใช้ในการตรวจสอบว่ามีไฟล์อยู่หรือไม่ เราจะใช้คำสั่ง FileExists วิธีการใช้งานมีขั้นตอนคือ

[1] นำไฟล์ไปวางไว้ในตำแหน่งที่กำหนด เช่น C:\Windows ตัวอย่างนี้ผมจะนำไฟล์ชื่อ ABC.txt ไปวางไว้


[2] เขียนโปรแกรมโดยใช้คำสั่ง FileExists ตรวจสอบดังนี้

If FileExists("C:\Windows\ABC.txt") Then
    msgbox(64, "ทำงาน", "ใช้งานโปรแกรมได้")
Else
    msgbox(64, "ไม่สามารถทำงานได้", "ใช้งานโปรแกรมไม่ได้")
    Exit
EndIf


หมายเหตุ
     คำสั่ง  FileExists นอกจากจะตรวจสอบว่ามีไฟล์อยู่หรือไม่แล้ว ยังสามารถใช้ตรวจสอบว่ามีโฟลเดอร์อยู่หรือไม่ ได้ด้วยเช่นกัน ตัวอย่างเช่น ถ้าจะตรวจสอบว่ามีโฟลเดอร์ชื่อ AAA อยู่ในไดรฟ์ C: หรือไม่ก็เขียนเป็น FileExists("C:\AAA") 


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

0 comments:

Post a Comment

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


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