Announcement

Collapse
No announcement yet.

AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)

    AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
    ------------------------------------------
    Current File Process to Progressbar
    เป็นวิธีผูก(sync)Processของโปรแกรมไว้กับProgressbarกลายเป็น AutoSync
    ที่ผมใช้เวลาทดลองค้นคว้าอยู่เป็นเดือน ที่นี้ไม่ต้องกำหนดเวลาตรงSleepอีกแล้ว
    ใช้วิธีจับการตรวจสอบการเขียนไฟล์ แล้วนำProcessมากำหนดเงื่อนไขเวลา
    ให้กับProgressbarตรง CounterและSleep(หน่วยนับและระยะเวลาของการนับ)
    ฉนั้นการสิ้นสุดการติดตั้งโปรแกรม เวลาจะพอดีกับสิ้นสุดการแสดงผลของProgressbar
    จริงๆแล้วเขียนสคริ๊ปโปรแกรมไม่ค่อยเป็นหรอก ผิด-ถูกยังไง ต้องขออภัยไว้ล่วงหน้า (เพราะมั่ว+เดาสุ่ม)
    ใช้ติดตั้งได้เฉพาะบางโปรแกรมเท่านั้นที่มี Switch Parameter(SilentMode)ของโปรแกรม ที่เข้ากันได้กับสคริ๊ป
    ส่วนโปรแกรมไหนที่ติดตั้งอัตโนมัติด้วยสคริ๊ปAutoItไม่ได้ ก็หันมาใช้สคริ๊ปภาษาอื่น เช่น .bat,.vbsและ.js เป็นต้น.
    สนใจ:ดาวน์โหลด Sample Projectไปทดลองศึกษากันดูนะครับ
    Download:Project3AutoInstall
    ขนาดไฟล์ 14.2 MB
    http://upload.one2car.com/download.a...ZU26L3MLI9UN9Y

  • #2
    อันนี้คือสคริ๊ป AutoIt AutoSync AutoInstall ที่ผมออกแบบเขียนขึ้นเอง
    Code:
    _PROGRESS_ (100)
    Func _PROGRESS_($a)
    Local $Progress_GUI = GUICreate('' & $a, 300, 60, -1, 300, -2138570616)
        GUISetBkColor(0x0, $Progress_GUI)
    Local $Progress = GUICtrlCreateProgress( 0, 0, 300, 30)
    Local $Connecting = GUICtrlCreateLabel('', 0, 40, 300, 30)
        GUICtrlSetFont(-1, 10, '', '', 'Fixedsys')
        GUICtrlSetColor(-1, 0xFFFFA2)
        WinSetOnTop($Progress_GUI, '', 1)
        GUISetState(@SW_SHOW)
    
    	$Wait = ConsoleWrite("uiso86pes.exe")
        Run ("uiso86pes.exe /VERYSILENT /SP-")
    For $i = $Wait To $a
    	Sleep ($Wait)
    	GUICtrlSetData($Progress , $i)
    	Sleep ($Wait)
    	GUICtrlSetData($Connecting, "       UltraISO:Installing.."&$i&"%")
    Next
    If ProcessClose("$Wait") Then MsgBox(0,"","ติดตั้งเรียบร้อย.",2)
    	Sleep(1000)
    If $i >= 100 Then
    	GUICtrlSetData($Connecting, "             Completed.")
    	Sleep(1000)
    	GUIDelete($Progress_GUI)
    EndIf
    EndFunc
    Exit

    Comment


    • #3
      เป็นสคริ๊ปที่แก้ไขให้ใหม่ สดๆร้อนๆ ทำให้ sync process ได้ดีขึ้นกว่าเดิมเยอะเลย ลองนำไปเปรียบเทียบกับไฟล์ที่ให้ดาวน์โหลดดูกันเองก็แล้วกัน(มั่วเหมือนเดิม)
      Code:
       _PROGRESS_ (100)
      Func _PROGRESS_($a)
      Local $Progress_GUI = GUICreate('' & $a, 300, 60, -1, 300, -2138570616)
          GUISetBkColor(0x0, $Progress_GUI)
      Local $Progress = GUICtrlCreateProgress( 0, 0, 300, 30)
      Local $Connecting = GUICtrlCreateLabel('', 0, 40, 300, 30)
          GUICtrlSetFont(-1, 10, '', '', 'Fixedsys')
          GUICtrlSetColor(-1, 0xFFFFA2)
          WinSetOnTop($Progress_GUI, '', 1)
          GUISetState(@SW_SHOW)
      
      	$Wait = ConsoleWrite("uiso86pes.exe")
          Run ("uiso86pes.exe /VERYSILENT /SP-")
      For $i = $Wait To $a
      	Sleep ($Wait)
      	GUICtrlSetData($Progress , $i)
      	Sleep ($Wait)
      	GUICtrlSetData($Connecting, "       UltraISO:Installing.."&$i&"%")
      Next
          Sleep ($Wait)
      If ProcessClose("$Wait") Then
          Sleep ($Wait)
          MsgBox(0,"","ติดตั้งเรียบร้อย.",2)
      Endif
      If $i >= 100 Then
      	GUICtrlSetData($Connecting, "             Completed.")
          Sleep ($Wait)
      GUIDelete($Progress_GUI)
      EndIf
      EndFunc
      Exit

      Comment


      • #4
        อันนี้สคริ๊ปที่นำไปใช้งานได้จริง ไม่ได้มั่วหรือเดาสุ่มนะครับ เพราะมีเหตุผลพอที่จะอธิบายการทำงานของสคริ๊ปได้
        Code:
         _PROGRESS_ (100)
        Func _PROGRESS_($a)
        Local $Progress_GUI = GUICreate('' & $a, 300, 60, -1, 300, -2138570616)
              GUISetBkColor(0x0, $Progress_GUI)
        Local $Progress = GUICtrlCreateProgress( 0, 0, 300, 30)
        Local $Connecting = GUICtrlCreateLabel('', 0, 40, 300, 30)
              GUICtrlSetFont(-1, 10, '', '', 'Fixedsys')
              GUICtrlSetColor(-1, 0xFFFFA2)
              WinSetOnTop($Progress_GUI, '', 1)
              GUISetState(@SW_SHOW)
        
            $Wait = ConsoleWrite("uiso86pes.exe")
            Run("uiso86pes.exe /VERYSILENT /SP-")
        
        For $i = $Wait To $a
            Sleep ($Wait)
            GUICtrlSetData($Progress , $i)
            Sleep ($Wait)
            GUICtrlSetData($Connecting, "      UltraISO:Installing.."&$i&"%")
            Sleep ($Wait)
            Next
        If ProcessClose("$Wait") Then GUICtrlSetData($Connecting, "             Completed.")
        If ProcessWaitClose("uiso86pes.exe") Then
           GUICtrlDelete($Progress_GUI)
           Sleep(500)
           MsgBox(0,"","ติดตั้งเรียบร้อย.",2)
        EndIf
        Exit
        EndFunc

        Comment


        • #5
          จะอธิบายที่ละสะเต็ป เพื่อให้เข้าใจง่ายขึ้น
          ------------------------------------------
          Code:
          $Wait = ConsoleWrite("uiso86pes.exe")
          โค๊ดนี้ มีไว้ดักจับความเคลื่อนไหวของโปรแกรมที่สั่งติดตั้ง จะมีกระแสออกมาทาง $Wait หรือเรียกอีกอย่างหนึ่งว่า 'ตัวแปร'
          ที่Counter ลูป For Next การนับวนรอบ จะต้องมีการใส่ค่าเวลา (Timer) การนับไว้ด้วย ไม่งั้นเราจะมองไม่เห็นการนับ
          (เร็วมากจนมองไม่เห็น) ใส่ไว้ที่สคริ๊ป Sleep ถ้าเราใส่ 'ตัวแปร' แทนTimer การนับก็จะขึ้นอยู่กับกระแสของโปรแกรม
          ..แต่กระแสของโปรแกรม ในแต่ละครั้งในการรันนั้น ไม่ค่อยจะคงที่นัก ช้าบ้าง เร็วบ้าง ฉนั้นจึงต้องมีการดักจับการProcessดังนี้
          ----------------------------------------------------------------------------------------------------------------------------------
          Code:
          If ProcessClose("$Wait") Then GUICtrlSetData($Connecting, "             Completed.")
          If ProcessWaitClose("uiso86pes.exe") Then
             GUICtrlDelete($Progress_GUI)
             Sleep(500)
             MsgBox(0,"","ติดตั้งเรียบร้อย.",2)
          EndIf
          --------------------------------------------------------------------------------------
          แปลออกมาจากโค๊ด ได้ใจความที่มีความหมายดังนี้
          --------------------------------------
          Code:
          'If ProcessClose("$Wait") Then GUICtrlSetData($Connecting, "             Completed'
          ถ้าเมื่อใด ไม่มีกระแสโดยสิ้นเชิง ก็ให้แสดงคำว่า 'Completed'ขึ้นมาที่หน้าต่าง Progressbar
          -------------------------------------------------------------------------------
          Code:
          If ProcessWaitClose("uiso86pes.exe") Then
             GUICtrlDelete($Progress_GUI)
          ถ้าเมื่อใดโปรแกรมติดตั้ง หยุดทำงานโดยสิ้นเชิงแล้ว ให้จัดการปิดหน้าต่าง Progressbar ..แต่ถ้ายังทำงานอยู่ ก็ให้คง หน้าต่างไว้ก่อน
          ----------------------------------------------------------------------------------------------------
          Code:
          MsgBox(0,"","ติดตั้งเรียบร้อย.",2)
          เป็นการ การันตี การติดตั้งโปรแกรม ที่เสร็จสิ้นโดยสมบูรณ์ อีกครั้งด้วย Popup Message
          --------------------------------------------------------------------------

          Comment


          • #6
            ขอโทษนะครับ ขอถามแบบโง่ๆ ว่าเอาไว้ทำอะไรรึครับ ขอบคุณ

            Comment


            • #7
              เอาไว้ใช้สั่งติดตั้งโปรแกรมต่างๆแบบอัตโนมัติ รวดเดียวจบ (SilentMode AutoInstall)

              Comment


              • #8
                ความรู้เรื่อง Process
                -----------------
                Process หมายถึง โปรแกรมต่างๆที่กำลังรันหรือทำงานอยู่ การProcessแบ่งออกเป็น2ส่วน
                1.Application Process หมายถึง โปรแกรมที่เราสั่งเปิดขึ้นมาทำงานชั่วคราว เมื่อทำงานเสร็จแล้วก็จะจบการทำงานเองหรือเราสั่งปิด
                ดูได้จาก Task Manager ในส่วนของ Applications
                ---------------------------------------------------------------------------------------------------
                2.Windows Process หรือเรียกอีกอย่างว่า Service หมายถึง โปรแกรมที่ทำงานอยู่เบื้องหลังตลอดเวลา ดูได้ในส่วนของ processes
                Processดูได้ในตำแหน่ง CPU

                Comment


                • #9
                  อันนี้เป็นสคริ๊ป AutoSync อีกแบบหนึ่ง ที่ใช้ในการติดตั้งโปรแกรมอัตโนมัติ ที่มีความเสถียร ใช้งานได้ดี มีความเที่ยงตรงสูง
                  -----------------------------------------------------------------------
                  Code:
                  _PROGRESS_ (100)
                  Func _PROGRESS_($a)
                  Local $Progress_GUI = GUICreate('' & $a, 300, 60, -1, 300, -2138570616)
                        GUISetBkColor(0x0, $Progress_GUI)
                  Local $Progress = GUICtrlCreateProgress( 0, 0, 300, 30)
                  Local $Connecting = GUICtrlCreateLabel('', 0, 40, 300, 30)
                        GUICtrlSetFont(-1, 10, '', '', 'Fixedsys')
                        GUICtrlSetColor(-1, 0xFFFFA2)
                        WinSetOnTop($Progress_GUI, '', 1)
                        GUISetState(@SW_SHOW)
                  
                     $PID = Run ("ezb5_en.exe /VERYSILENT /SP-")
                     $Wait = ProcessClose("$PID")
                  
                  For $i = 0 To 100
                      GUICtrlSetData($Progress , $i)
                      GUICtrlSetData($Connecting, "      EasyBoot:Installing.."&$i&"%")
                      Sleep ($Wait)
                  Next
                     If ProcessWaitClose("$PID") Then
                     GUICtrlSetData($Connecting, "             Completed.")
                     Sleep(500)
                     MsgBox(0,"","ติดตั้งเรียบร้อย.",2)
                     GUICtrlDelete($Progress_GUI)
                  Exit
                  EndIf
                  EndFunc
                  -----------------------------------------------------------
                  Code:
                  $PID = Run ("ezb5_en.exe /VERYSILENT /SP-")
                  คำอธิบาย: เมื่อสั่งติดตั้งโปรแกรม จะมีกระแสออกมาทางตัวแปร $PID
                  -----------------------------------------------------------------------------------
                  Code:
                  $Wait = ProcessClose("$PID")
                  คำอธิบาย: กระแสจะถูกบังคับให้ไหลเป็นช่วงๆ (ไม่เกียวกับหลินหุ้ย)
                  ตามจังหวะการทำงานของโปรแกรมที่สั่งติดตั้ง ช้าบ้าง เร็วบ้าง
                  ขึ้นอยู่กับข้อมูลที่ถูกก๊อบปี้ลงเครื่อง ณ.ขณะนั้น
                  กระแสที่ผ่านการควบคุมจะออกมาทาง $Wait
                  แล้วก็นำกระแสที่ได้ ไปควบคุม Counter Control Loop อีกทีหนึ่ง
                  ------------------------------------------------------------------------------
                  Download:AutoIns_SampleProj4
                  Files size:6.2 MB
                  Last edited by sak2005; 21 Jun 2009, 10:49:53.

                  Comment


                  • #10
                    AutoIt3 Progressbar Percentage ท่านสามารถเลือกเปลี่ยน ขนาด , สี ของ Progressbar ได้ตามต้องการ
                    Code:
                    #include <GUIConstants.au3>
                    
                    $Form1 = GUICreate("", 360, 40, 330, 300, -2138570616)
                    $Progress1 = GUICtrlCreateProgress(5, 5, 350, 30)
                    GUICtrlSetColor(-1, 0x0000FF)  ;<---<<ใส่รหัสสีตรงนี้ (HexCode Color Progressbar)
                    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", " ", "wstr", " ")
                    GUICtrlSetStyle(-1, 1)
                    $Label1 = GUICtrlCreateLabel("%", 166, 13, 50, 50)
                    GUICtrlSetBkColor($Label1, $GUI_BKCOLOR_TRANSPARENT)
                    GUISetState(@SW_SHOW)
                    GUICtrlSetData($Progress1,0)
                    
                    $PID = Run ("ezb5_en.exe /VERYSILENT /SP-")
                    $Wait = ProcessClose("$PID")
                    
                    for $i = 0 to 100
                        GUICtrlSetData($Progress1,$i)
                        GUICtrlSetData($Label1,$i &"%")
                        If $i >= 48 Then GUICtrlSetColor($Label1,0xFFFFFF)
                        sleep($Wait)
                    Next
                        If ProcessWaitClose("$PID") Then
                        GUICtrlSetData($Label1,"Done.")
                        Sleep(500)
                        MsgBox(0,"","Completed.",2)
                        GUICtrlDelete($Form1)
                    Exit
                    EndIf
                    -----------------------------------------------------


                    Download:AutoIt Progressbar Percentage
                    Size:2.6 MB
                    http://upload.one2car.com/download.a...BU[5FL5ZGPDGNE
                    Last edited by sak2005; 21 Jun 2009, 15:11:06.

                    Comment


                    • #11
                      เยี่ยมไปเลยท่าน
                      เดี่ยวลองดูๆ

                      Comment


                      • #12
                        แล้วถ้าติดตั้ง โปรแกรมที่ต้องใส่ cd-key จะทำยังไงครับ

                        Comment


                        • #13
                          Originally posted by ipbee View Post
                          แล้วถ้าติดตั้ง โปรแกรมที่ต้องใส่ cd-key จะทำยังไงครับ
                          --------------------------------------------------------------------------
                          แนะนำให้ได้ครับ.. แต่สอนทำให้ไม่ได้ อาจจะไปละเมิดลิขสิทธิ์ซอพท์แวร์เขา

                          เริ่มแรกเราต้องรู้ก่อนว่า การลงทะเบียนโปรแกรม มีวิธีลงแบบอื่นๆอีกใหม?
                          ที่นอกเหนือจากการใส่ cd-key เช่น Path Directrory , Path.exe , RegFile.reg เป็นต้น
                          ซึ่งหาได้ไม่ยากบนอินเทอร์เน็ต หรือตามแหล่งที่จำหน่ายซีดีซอพท์แวร์ทั่วไป

                          Comment

                          Working...
                          X