ฟอรั่ม 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


4 posters

    เช็คการปิดตัวของ AutoIt

    Quixotic
    Quixotic
    PSsix Member High Class
    PSsix Member High Class


    PSsix Program Coder
    จำนวนข้อความ : 91
    ความนิยม : 1
    เข้าร่วมเมื่อ : 29/03/2011

    เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by Quixotic 28/07/11, 09:33 pm

    มิทราบว่าพอจะมีวิธีการเชคไหมครับว่าโปรแกรมถูกปิดกระทันหันรึป่าว

    อย่างเช่นเวลามันค้างเราก็ End Process เอาอ่ะครับ

    อยากจะเชคตรงนี้อ่ะครับ เพราะโปรแกรมที่ผมทำ มันรันโปรแกรมาอีกตัวสองตัวพร้อมกันอ่ะครับ

    ผมจะทำแบบว่า ถ้าตัวใดตัวนึงโดนปิดไป ให้ปิดตัวอื่นๆไปด้วย งี้อ่ะครับ

    แล้วก็ผมอยากได้ครับอธิบายเกี่ยวกับฟังชั่น 2 ตัวนี้หน่อยอ่ะครับ

    OnAutoItExitRegister

    OnAutoItExitUnRegister

    อ่านวิธีใช้ยังไงก็ไม่เข้าใจ T__T

    ขอโทษนะครับที่อธิบายไม่ค่อยรู้เรื่อง em232
    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by Monaliza 29/07/11, 05:47 am

    เราใช้คำสั่ง ProcessExists เช็คได้ครับเช่น
    If ProcessExists("test1.exe") = TRUE Then
    MsgBox(0,"test","Process Running")
    Else
    MsgBox(0,"test","Process No Running")
    ProcessClose("test2.exe")
    ProcessClose("test3.exe")
    EndIf
    หรือ
    While 1
    If Not ProcessExists("test1.exe") Then
    ProcessClose("test2.exe")
    ProcessClose("test3.exe")
    ElseIf Not ProcessExists("test2.exe") Then
    ProcessClose("test1.exe")
    ProcessClose("test3.exe")
    ElseIf Not ProcessExists("test3.exe") Then
    ProcessClose("test1.exe")
    ProcessClose("test2.exe")
    EndIf
    EndIf
    Sleep(1000)
    WEnd
    ไม่ค่อยเข้าใจคำถามนะครับถ้าผิดก็อย่าว่ากันนะครับ
    ที่เหลือให้คนอื่นมาตอบดีกว่า
    POS
    POS
    PSsix
    PSsix


    เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by POS 29/07/11, 02:54 pm

    โปรแกรมที่แฮงค์ยังมี process อยู่ครับ ถ้าจะตรวจสอบสถานะแฮงค์ (not responding) ของโปรแกรมใช้คำสั่งด้านล่างนี้

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



    Code:

    checkprogram()

    Func checkprogram()
       $handle = WinGetHandle("The KMPlayer");ชื่อไตเติลโปรแกรมที่ต้องการตรวจสอบสถานะ
       If $handle = "" Then
       ConsoleWrite('ยังไม่ได้เปิดโปรแกรม' &  @CRLF)
       Else
       $status = DllCall('user32.dll', 'int', 'IsHungAppWindow', 'hwnd', $handle) ; $status เป็น 0  ทำงาน    เป็น 1 แฮ็งค์
       If @error Or $status[0] = 1 Then
          ProcessClose(WinGetProcess($handle)) ;ปิดโปรแกรมที่ค้าง
          exit ;ปิดโปรแกรมที่ตรวจสอบ

       Else
          ConsoleWrite('โปรแกรมยังทำงาน ' & $status[0] & @CRLF)
       EndIf
       EndIf
    EndFunc
    Quixotic
    Quixotic
    PSsix Member High Class
    PSsix Member High Class


    PSsix Program Coder
    จำนวนข้อความ : 91
    ความนิยม : 1
    เข้าร่วมเมื่อ : 29/03/2011

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by Quixotic 30/07/11, 12:48 am

    คือผมอยากได้วิธีการเชคการปิดตัวของมันเองอ่ะครับ -*-
    POS
    POS
    PSsix
    PSsix


    เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by POS 30/07/11, 07:36 am

    ขั้นแรกสร้างไฟล์ onexit ด้วยโค้ดด้านล่างนี้ เสร็จแล้วคอมไพล์เป็น .exe (ชื่อ onexit.exe) นำไฟล์ที่ได้ไปวางไว้ในสคริปต์ที่เขียนโปรแกรม

    Code:
    While Sleep(1000) And ProcessExists("test.exe")
    WEnd
    ;ใส่คำสั่ง
    ;ใส่คำสั่ง
    ;ใส่คำสั่ง
    MsgBox(0,"","โปรแกรมปิด")
    Exit


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

    Code:
    FileInstall("onexit.exe",@TempDir&"\onexit.exe",1)


    Run(@TempDir&"\onexit.exe")


    ตัวอย่าง

    Code:
    FileInstall("onexit.exe",@TempDir&"\onexit.exe",1)


    Run(@TempDir&"\onexit.exe")

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 249, 148, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 152, 8, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             Exit

          Case $Form1
          Case $Button1
             exit
       EndSwitch
    WEnd

    ปล. คอมไพล์โปรแกรมเป็น test.exe ลองเปิดแล้วปิดโปรแกรมแล้วจะมีหน้าต่างแจ้งขึ้นมา
    Quixotic
    Quixotic
    PSsix Member High Class
    PSsix Member High Class


    PSsix Program Coder
    จำนวนข้อความ : 91
    ความนิยม : 1
    เข้าร่วมเมื่อ : 29/03/2011

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by Quixotic 31/07/11, 12:15 am

    อ่อ ต้องใช้โปรแกรมอีกตัวมาเชคสินะครับ

    แล้ว 2 ตัวด้านล่างนี้มันคือไรหรอครับ

    OnAutoItExitRegister
    OnAutoItExitUnRegister

    เกี่ยวกับการปิดโปรแกรมไหมครับ
    aut
    aut
    PSsix Powerful Scripting Class
    PSsix Powerful Scripting Class


    PSsix Game Coder
    จำนวนข้อความ : 472
    ความนิยม : 126
    เข้าร่วมเมื่อ : 24/07/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by aut 31/07/11, 12:42 am

    OnAutoItExitRegister ตั้งให้มานทำงานตอนกดปิดโปรแกรมอะ
    OnAutoItExitUnRegister ยกเลิกไอ้ที่เราตั้งไว้อะ
    สองอันนี้โปรแกรม error แบบว่าปิดเองก้อไม่ทำงานเราเคยลองกับบอทปล่อยไว้ครึ่งวันโปรแกรมปิดเองไม่เปิดขึ้นมาใหม่อะ em232

    aut
    aut
    PSsix Powerful Scripting Class
    PSsix Powerful Scripting Class


    PSsix Game Coder
    จำนวนข้อความ : 472
    ความนิยม : 126
    เข้าร่วมเมื่อ : 24/07/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by aut 31/07/11, 12:47 am

    อันนี้โคดลองเอาไปเล่นดูนะ

    OnAutoItExitRegister("MyTestFunc")


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 299, 100, 192, 124)
    GUISetState(@SW_SHOW)


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd


    Func MyTestFunc()
    MsgBox(64, "ปิด", 'กดปิดอะสิ')
    EndFunc
    POS
    POS
    PSsix
    PSsix


    เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by POS 31/07/11, 07:52 am

    ผมเสริมอีกนิด คำสั่ง OnAutoItExitRegister จะไม่ทำงานถ้าโปรแกรมแฮงค์ค้าง แต่ถ้าปิดด้วยกรณีอื่นๆ จะทำงาน เช่น สั่งชัทดาวน์ หรือปิดจาก Windows Task Manager ก็จะยังทำงานอยู่ เนื่องจากสคริปต์ AutoIt จะทำงานแบบ Single-Thread สรุปสั้นๆ คือทำงานเดียวในเวลาเดียว ถ้าโปรแกรมแฮงค์คำสั่ง OnAutoItExitRegister ก็จะไม่ทำงาน เพราะ Thread ที่จะวิ่งไปทำงานไม่มีแล้ว

    อันที่จริงผมเคยพูดเรื่องข้อจำกัด AutoIt นี้หลายครั้งทั้งในบทความหน้าบล็อก กระทั่งนาย jon (ผู้สร้าง AutoIt) ก็ออกมาด่าพวกหลงผิดไปหลายรอบแล้ว จนถึงกับเขียนไว้ในเว็บหลักว่า AutoIt ทำงาน Single-Thread ไม่ได้ทำงานแบบ Multi-threading ก็ยังมีคนเข้าใจผิดอยู่ตลอด หรือกระทู้ในฟอรั่มนี้บางคนก็เข้าใจผิดเขียนสคริปต์เอาข้อความใส่ในช่อง input ก็บอกว่ามันทำงานได้หลายอย่างพร้อมกัน คือมีทั้งช่อง และสามารถใส่ข้อความลงช่องได้ จริงๆแล้วช่อง input นั้นเป็นแค่ตัวคอนโทรลที่ถูกเรียกออกมาแล้วยังค้างอยู่ (คำสั่ง AutoIt ไม่ได้ทำงานตรงส่วนนั้นแล้ว)

    สรุปอีกครั้ง ถ้าแฮงค์คำสั่งจะใช้ไม่ได้ นอกจากสร้างโปรแกรมอีกตัวมาคอยเช็คตามตัวอย่างที่ผมให้ไว้



    ข้อมูลอ้างอิง จะได้หายสงสัย เข้าใจระบบของ AutoIt มากขึ้น

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

    หมายเหตุ
    ถ้ายังสงสัยลองใช้ google หาข้อมูลคำว่า Multi-threading และ Single-Thread ครับ
    Quixotic
    Quixotic
    PSsix Member High Class
    PSsix Member High Class


    PSsix Program Coder
    จำนวนข้อความ : 91
    ความนิยม : 1
    เข้าร่วมเมื่อ : 29/03/2011

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by Quixotic 01/08/11, 12:14 am

    ขอบคุณทุกความคิดเห็นครับ ^_______^

    ตอนนี้กำลังเล่นพวก socket อ่ะครับ ใกล้จะจนมุมอีกล่ะ
    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by Monaliza 30/08/11, 01:43 pm

    คำสั่ง OnAutoItExitRegister นี้เวลาเอาไปใส่ในโค้ดปกติ
    เวลากดปิดโปรแกรมมันก็ทำงานปกติแต่เวลากดปิดprocessจาก
    Windows Task Manager มันไม่ยอมทำงานครับไม่รู้ทำไม
    POS
    POS
    PSsix
    PSsix


    เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty เช็คการปิดตัวของ AutoIt Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by POS 31/08/11, 04:07 pm

    คำสั่งนี้จะทำงาน เมื่อมีการปิดหน้าต่างโปรแกรม 5 แบบคือ
    (ปิดจาก Windows Task Manager จากเครื่องของผมก็ยังเห็นทำงานอยู่ เป็นการปิดแบบ 0 )

    0 Natural closing.
    1 close by Exit function.
    2 close by clicking on exit of the systray.
    3 close by user logoff.
    4 close by Windows shutdown.
    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    เช็คการปิดตัวของ AutoIt Empty Re: เช็คการปิดตัวของ AutoIt

    ตั้งหัวข้อ by Monaliza 31/08/11, 06:08 pm

    สงสัยผมจะใช้คำสั่งไม่ถูกต้องเดียวลองไปแก้ไขใหม่ขอบคุณครับ

      เวลาขณะนี้ 28/04/24, 03:36 pm