Oct 2, 2009
Friday, October 02, 2009

ใช้ AutoIt สร้าง HotKey ปุ่มเดียว ปิดเปิดโปรแกรมได้ดั่งใจ :2

     ตอนนี้เป็นตอนต่อของการสร้างปุ่ม HotKey  โดยเขียนโปรแกรมจากสคริปต์ AutoIt ความสามารถของโปรแกรมที่เราจะทำในตอนนี้คือ

- เรียกใช้โปรแกรมที่ต้องการโดยการกดปุ่ม HotKye ที่กำหนด (ตามตัวอย่างนี้คือปุ่ม F1)
- เมื่อกดปุ่ม F1 ครั้งแรกโปรแกรมจะเปิดขึ้นมา ถ้ากดปุ่ม F1 ซ้ำอีกครั้งโปรแกรมก็จะปิดตัวลง
- นำโปรแกรมที่เขียนขึ้นมาวางไว้ที่ SartUp เพื่อให้โปรแกรมเปิดขึ้นมาทำงานทุกครั้งที่เปิดเครื่อง
- กดปุ่ม ESC จะเป็นปิดการทำงานของโปรแกรมทันที

     คำสั่งซึ่งจะเรียนรู้เพิ่มเติมในตอนนี้คือ

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

ตัวอย่างคำสั่ง

Global $onoff =0
; สร้างตัวแปรชื่อ $onoff โดยกำหนดค่าเริ่มต้นเป็น 0

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

ตัวอย่างคำสั่ง

ToolTip("เปิดโปรแกรม")
sleep(1000)
ToolTip("")
;แสดงข้อความว่า เปิดโปรแกรม เป็นเวลา 1 วินาทีแล้วจึงลบข้อความทิ้ง

     ProcessClose ปิดชื่อโปรแกรมที่กำหนด คำสั่งนี้ใช้สำหรับปิดโปรแกรมที่เราสั่งให้เปิดขึ้นมา ชื่อโปรแกรมที่ใส่นั้นต้องเป็นชื่อเต็มของไฟล์โปรแกรมนั้นๆ เช่น Winamp ก็ต้องใส่เป็น Winamp.exe คือ มีชื่อและนามสกุลของไฟล์โปรแกรมด้วย รูปแบบคำสั่ง ProcessClose("ตามด้วยตำแหน่งและชื่อโปรแกรมที่ต้องการจะปิด")

ตัวอย่างคำสั่ง

ProcessClose("calc.exe")
;ปิดโปรแกรม calc (โปรแกรมเครื่องคิดเลข)

     If...thenElseIf...then...EndIf เป็นคำสั่งสำหรับใช้ตรวจสอบเงื่อนไขที่กำหนด เมื่อเงื่อนไขตรงก็จะทำงาน ตามตัวอย่างนี้เราจะทำการตรวจสอบเงื่อนไข โดยอ้างอิงจากตัวแปร $onoff ซึ่งจะมีค่าอยู่ค่าคือ 0 และ 1 รูปแบบคำสั่ง

If เงื่อนไขที่ให้ตรวจสอบ Then
ถ้าเงื่อนไขเป็นจริง ให้ทำตามคำสั่งนี้
ถ้ายังไม่ตรง ให้ไปตรวจสอบเงื่อนไขถัดไป

ElseIf เงื่อนไขที่ให้ตรวจสอบ Then
ถ้าเงื่อนไขเป็นจริง ให้ทำตามคำสั่งนี้
ถ้ายังไม่ตรง ให้ไปตรวจสอบเงื่อนไขถัดไป

EndIf

ตัวอย่างคำสั่ง

If $onoff =0 Then
;ถ้าค่าตัวแปร $onoff  เป็น 0  ให้ทำตามคำสั่งถัดจากนี้

    $onoff =1
run("calc.exe")

ElseIf    $onoff =1 Then
;ถ้าค่าตัวแปร $onoff  เป็น 1  ให้ทำตามคำสั่งถัดจากนี้

$onoff =0
ProcessClose("calc.exe")
EndIf


ต่อไปนี้เป็นตัวอย่างคำสั่งพร้อมคำอธิบาย


Global $onoff =0
;กำหนดค่าตัวแปร $onoff  เริ่มต้นให้เป็น 0

HotKeySet("{F1}", "start1")
;สร้าง HotKey เมื่อกดปุ่ม F1 ให้กระโดดไปทำงานฟังก์ชั่น start1
HotKeySet("{ESC}", "end")
;สร้าง HotKey เมื่อกดปุ่ม ESC ให้กระโดดไปทำงานฟังก์ชั่น end

while 1
sleep(100)
    ToolTip("")
wend
;คำสั่ง while 1 เพื่อให้โปรแกรมคงสถานะการทำงานต่อเนื่องไปเรื่อยๆ พร้อมแทรกคำสั่ง ToolTip("") ลงไปเพื่อข้อความที่ปรากฏขึ้นมาเมื่อกดปุ่ม F1


Func start1()
;เริ่มฟังก์ชั่น start1 เมื่อมีการกดปุ่ม HotKey ที่ F1
If $onoff =0 Then
;ตั้งเงื่อนไข ถ้า ตัวแปร $onoff เท่ากับ 0 ให้ทำตามคำสั่งถัดจากนี้ ถ้าไม่ตรงให้ข้ามไปส่วน ElseIf ที่อยู่ถัดไป
    $onoff =1
;ตั้งเงื่อนไข ให้กำหนดค่าตัวแปร $onoff เป็น 1 ที่ให้ทำแบบนี้ก็เพื่อเปลี่ยนสถานะของตัวแปร ถ้ากดปุ่ม F1 ครั้งแรกตัวแปรนี้จะทำงาน เพราะค่า $onoff เท่ากับ 0 แต่เมื่อโปรแกรมวิ่งมาทำตามคำสั่งตามเงื่อนไขนี้ ค่าตัวแปร $onoff จะถูกตั้งใหม่เป็น 1 เพื่อให้การกดปุ่มครั้งต่อไป เงื่อนไขของคำสั่งจะไม่เป็นจริง และข้ามไปตรวจสอบเงื่อนไขถัดไป
ToolTip("เปิดโปรแกรม")
;สร้างทูลทิปข้อความว่า เปิดโปรแกรม run("calc.exe")
;สั่งเปิดโปรแกรมเครื่องคิดเลข
sleep(1000)
;หน่วงเวลา 1 วินาที (1 วินาที = 1000) เพื่อให้ข้อความแสดงให้เห็นก่อนจะถูกลบไป
ElseIf    $onoff =1 Then
;ตั้งเงื่อนไข ถ้า ตัวแปร $onoff เท่ากับ 1 แสดงว่าโปรแกรมเครื่องคิดเลขถูกเปิดขึ้นมาแล้ว ให้ทำตามคำสั่งถัดจากนี้ 

$onoff =0
;ตั้งตัวแปร  $onoff ให้เป็น 0 อีกครั้ง เพื่อให้การกดปุ่ม F1 ครั้งหน้า โปรแกรมจะเปิดโปรแกรมเครื่องคิดเลขขึ้นมา 

    ToolTip("ปิดโปรแกรม")
;สร้างทูลทิปแสดงข้อความ ปิดโปรแกรม
    ProcessClose("calc.exe")
;สั่งปิดโปรแกรมเครื่องคิดเลข โดยใส่ชื่อโปรแกรมลงไป
    sleep(1000)
;หน่วงเวลา 1 วินาที (1 วินาที = 1000) เพื่อให้ข้อความแสดงให้เห็นก่อนจะถูกลบไป
EndIf
;จบการตรวจสอบเงื่อนไข
EndFunc
;จบการทำงานฟังก์ชั่นนี้




Func end()
;เริ่มฟังก์ชั่น end เมื่อมีการกดปุ่ม HotKey ที่ ESC
    Exit
;ใส่คำสั่ง exit เพื่อปิดโปรแกรม AuotIt
    EndFunc
;จบการทำงานฟังก์ชั่นนี้



คำสั่งแบบไม่มีคำอธิบาย


Global $onoff = 0
HotKeySet("{F1}", "start1")
HotKeySet("{ESC}", "end")
While 1
    Sleep(100)
    ToolTip("")
WEnd
Func start1()
    If $onoff = 0 Then
        $onoff = 1
        ToolTip("เปิดโปรแกรม")
        Run("calc.exe")
        Sleep(1000)
    ElseIf $onoff = 1 Then
        $onoff = 0
        ToolTip("ปิดโปรแกรม")
        ProcessClose("calc.exe")
        Sleep(1000)
    EndIf
EndFunc 
Func end()
    Exit
EndFunc  


หน้าตาคำสั่งเมื่อเขียนลงไปใน SciTe


     สำหรับการกำหนดให้โปรแกรมทำงานทุกครั้งที่เปิดเครื่อง ทำได้ด้วยการนำไฟล์โปรแกรมที่ Comile เสร็จแล้ว ลากมาวางบนโฟลเดอร์ StartUp ที่อยู่ใน Start Menu ครับ หรือใช้วิธีพิมพ์คำสั่ง

%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

ลงไปที่ช่อง Address ของ Explorer ก็ได้เช่นกัน
  
  ตอนแรกกะว่าจะสอนให้ใช้คำสั่งฝังโปรแกรมลงใน Registry แต่ดูแล้วเนื้อหาจะเยอะเกินไป เลยแนะนำแบบนี้จะสะดวกกว่า

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

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

0 comments:

Post a Comment

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


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