ฟอรั่ม PSsix

Would you like to react to this message? Create an account in a few clicks or log in to continue.

ฟอรั่มของบล็อก http://pssix.blogspot.com


2 posters

    การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่

    POS
    POS
    PSsix
    PSsix


    การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่ Empty การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่ Empty การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่ Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่ Empty การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่

    ตั้งหัวข้อ by POS 17/02/14, 02:22 am

    อย่างที่ทราบกันดี (อ้างอิง >> [You must be registered and logged in to see this link.] ) ช่วงนี้กำลังวุ่นกับงานหลายๆ อย่างที่จะมีในเดือนหน้า

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


    ขั้นแรกเมื่อสร้าง GUI แล้ว จะสร้างโค้ดออกมาต้องตั้งค่าดังนี้


    [You must be registered and logged in to see this image.]

    โค้ดที่ได้จะเป็นลักษณะนี้

    [You must be registered and logged in to see this image.]


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

    Code:
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)

    Global $PSsix = 0 ;ใส่เพิ่ม
    Global $pPause = False ; ใส่เพิ่ม
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("PSsix", 418, 177, 494, 266)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1Maximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "Form1Restore")
    $Button1 = GUICtrlCreateButton("ทำงาน", 296, 16, 75, 25)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button2 = GUICtrlCreateButton("หยุดชั่วคราว", 296, 72, 75, 25)
    GUICtrlSetOnEvent(-1, "Button2Click")
    $Label1 = GUICtrlCreateLabel("Label1", 40, 24, 35, 17)
    GUICtrlSetOnEvent(-1, "Label1Click")
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

    While 1
       Select ;ตรวจสอบค่าตัวแปร PSsix ที่เปลี่ยนไปตามการกดปุ่มใน GUI
          Case $PSsix = 1
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
             A1()
          Case $PSsix = 2
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
          Case $PSsix = 3
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
          Case $PSsix = 4
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
          Case $PSsix = 5
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
          Case $PSsix = 6
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
          Case $PSsix = 7
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
          Case $PSsix = 8
             $PSsix = 0
             ;ใส่เพิ่มตามปุ่มหรือตัวเลือกที่ต้องการให้ทำงานทันทีเมื่อรับคำสั่ง
       EndSelect
       Sleep(100)
    WEnd


    Func A1()
       $i  =0
       While Sleep(100)
              If $pPause Then ContinueLoop  ;ตรวจการคลิกหยุดชั่วคราวแบบที่ 1
    ;~             If ($pPause = False) Then  ;ตรวจการคลิกหยุดชั่วคราวแบบที่ 2 ใส่เงื่อนไขตรวจดูการกดหยุดชั่วคราวในสคริปต์
          GUICtrlSetData($Label1,$i)
          $i += 1
    ;~       EndIf

          WEnd
       EndFunc





    Func TogglePause()
           $pPause = Not $pPause
        If $pPause Then
            ControlSetText($Form1, "", $Button2 , "ทำงานต่อ")
              Else
            ControlSetText($Form1, "", $Button2 , "หยุดชั่วคราว")
        EndIf
           EndFunc


    Func Button1Click()
    $PSsix = 1
    ;ใส่คำสั่งเปลี่ยนค่าตัวแปร PSsix
    EndFunc   ;==>Button1Click
    Func Button2Click()
    $PSsix = 2
       TogglePause()
    ;ใส่คำสั่งเปลี่ยนค่าตัวแปร PSsix
    EndFunc   ;==>Button2Click


    ;;;;ส่วนควบคุมฟอร์ม และส่วนประกอบอื่นในฟอร์มที่ไม่จำเป็นต้องตั้งค่า
    Func Form1Close()
    exit
    EndFunc   ;==>Form1Close
    Func Form1Maximize()

    EndFunc   ;==>Form1Maximize
    Func Form1Minimize()

    EndFunc   ;==>Form1Minimize
    Func Form1Restore()

    EndFunc   ;==>Form1Restore
    Func Label1Click()

    EndFunc   ;==>Label1Click


    ###จบ###
    yoyokungzz
    yoyokungzz
    PSsix Member Class II
    PSsix Member Class II


    การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่ Empty การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่ Empty
    จำนวนข้อความ : 49
    ความนิยม : 9
    เข้าร่วมเมื่อ : 18/10/2013

    การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่ Empty Re: การขัดจังหวะสคริปต์ ขณะที่กำลังทำงานอยู่

    ตั้งหัวข้อ by yoyokungzz 18/02/14, 02:04 am

    ขอบคุณครับ จะลองเอาไปใช้งานดูครับ ปกติสั่งให้มันรัน exe ตัวอื่นเอา แล้วกดปุ่มปิดก็ ProcessClose exe ตัวนั้นๆเอา>,<

      เวลาขณะนี้ 07/05/24, 03:59 pm