พิมพ์หน้านี้ - AutoInstall & AutoSync File Process to Progressbar(AutoIt3)

LSVคลังสมองออนไลน์ "ปีที่14"

ห้องคอมพิวเตอร์ => ●วินโดว์ => ข้อความที่เริ่มโดย: sak2007 ที่ มิถุนายน 20, 2009, 09:02:56 am



หัวข้อ: AutoInstall & AutoSync File Process to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 20, 2009, 09:02:56 am
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.aspx?pku=2A0FB5DA8C7UMDL9ZU26L3MLI9UN9Y (http://upload.one2car.com/download.aspx?pku=2A0FB5DA8C7UMDL9ZU26L3MLI9UN9Y)


หัวข้อ: Re: AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 20, 2009, 09:04:21 am
อันนี้คือสคริ๊ป AutoIt AutoSync AutoInstall ที่ผมออกแบบเขียนขึ้นเอง
โค๊ด:
_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

(http://img269.imageshack.us/img269/9782/clip01.th.jpg) (http://img269.imageshack.us/i/clip01.jpg/)


หัวข้อ: Re: AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 20, 2009, 09:05:38 am
เป็นสคริ๊ปที่แก้ไขให้ใหม่ สดๆร้อนๆ ทำให้ sync process ได้ดีขึ้นกว่าเดิมเยอะเลย ลองนำไปเปรียบเทียบกับไฟล์ที่ให้ดาวน์โหลดดูกันเองก็แล้วกัน(มั่วเหมือนเดิม)
 
โค๊ด:
 _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


หัวข้อ: Re: AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 20, 2009, 09:06:48 am
อันนี้สคริ๊ปที่นำไปใช้งานได้จริง ไม่ได้มั่วหรือเดาสุ่มนะครับ เพราะมีเหตุผลพอที่จะอธิบายการทำงานของสคริ๊ปได้
 
โค๊ด:
 _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


หัวข้อ: Re: AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 20, 2009, 09:08:37 am
จะอธิบายที่ละสะเต็ป เพื่อให้เข้าใจง่ายขึ้น
------------------------------------------
โค๊ด:
$Wait = ConsoleWrite("uiso86pes.exe")
โค๊ดนี้ มีไว้ดักจับความเคลื่อนไหวของโปรแกรมที่สั่งติดตั้ง จะมีกระแสออกมาทาง $Wait หรือเรียกอีกอย่างหนึ่งว่า 'ตัวแปร'
ที่Counter ลูป For Next การนับวนรอบ จะต้องมีการใส่ค่าเวลา (Timer) การนับไว้ด้วย ไม่งั้นเราจะมองไม่เห็นการนับ
(เร็วมากจนมองไม่เห็น) ใส่ไว้ที่สคริ๊ป Sleep ถ้าเราใส่ 'ตัวแปร' แทนTimer การนับก็จะขึ้นอยู่กับกระแสของโปรแกรม
..แต่กระแสของโปรแกรม ในแต่ละครั้งในการรันนั้น ไม่ค่อยจะคงที่นัก ช้าบ้าง เร็วบ้าง ฉนั้นจึงต้องมีการดักจับการProcessดังนี้
----------------------------------------------------------------------------------------------------------------------------------
โค๊ด:
If ProcessClose("$Wait") Then GUICtrlSetData($Connecting, "             Completed.")
If ProcessWaitClose("uiso86pes.exe") Then
   GUICtrlDelete($Progress_GUI)
   Sleep(500)
   MsgBox(0,"","ติดตั้งเรียบร้อย.",2)
EndIf
--------------------------------------------------------------------------------------
แปลออกมาจากโค๊ด ได้ใจความที่มีความหมายดังนี้
--------------------------------------
โค๊ด:
'If ProcessClose("$Wait") Then GUICtrlSetData($Connecting, "             Completed'

ถ้าเมื่อใด ไม่มีกระแสโดยสิ้นเชิง ก็ให้แสดงคำว่า 'Completed'ขึ้นมาที่หน้าต่าง Progressbar
-------------------------------------------------------------------------------
โค๊ด:
If ProcessWaitClose("uiso86pes.exe") Then
   GUICtrlDelete($Progress_GUI)

ถ้าเมื่อใดโปรแกรมติดตั้ง หยุดทำงานโดยสิ้นเชิงแล้ว ให้จัดการปิดหน้าต่าง Progressbar ..แต่ถ้ายังทำงานอยู่ ก็ให้คง หน้าต่างไว้ก่อน
----------------------------------------------------------------------------------------------------
โค๊ด:
MsgBox(0,"","ติดตั้งเรียบร้อย.",2)

เป็นการ การันตี การติดตั้งโปรแกรม ที่เสร็จสิ้นโดยสมบูรณ์ อีกครั้งด้วย Popup Message
--------------------------------------------------------------------------


หัวข้อ: Re: AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 21, 2009, 06:47:56 am
ความรู้เรื่อง Process
---------------------
Process หมายถึง โปรแกรมต่างๆที่กำลังรันหรือทำงานอยู่ การProcessแบ่งออกเป็น2ส่วน
1.Application Process หมายถึง โปรแกรมที่เราสั่งเปิดขึ้นมาทำงานชั่วคราว เมื่อทำงานเสร็จแล้วก็จะจบการทำงานเองหรือเราสั่งปิด
ดูได้จาก Task Manager ในส่วนของ Applications
(http://upic.me/i/1e/clip_4.jpg)
---------------------------------------------------------------------------------------------------
2.Windows Process หรือเรียกอีกอย่างว่า Service หมายถึง โปรแกรมที่ทำงานอยู่เบื้องหลังตลอดเวลา ดูได้ในส่วนของ processes
Processดูได้ในตำแหน่ง CPU
(http://upic.me/i/5b/clip_5.jpg)


หัวข้อ: Re: AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 21, 2009, 06:49:35 am
อันนี้เป็นสคริ๊ป AutoSync อีกแบบหนึ่ง ที่ใช้ในการติดตั้งโปรแกรมอัตโนมัติ ที่มีความเสถียร ใช้งานได้ดี มีความเที่ยงตรงสูง
-----------------------------------------------------------------------
โค๊ด:
_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
-----------------------------------------------------------
 
โค๊ด:
$PID = Run ("ezb5_en.exe /VERYSILENT /SP-")
  คำอธิบาย: เมื่อสั่งติดตั้งโปรแกรม จะมีกระแสออกมาทางตัวแปร $PID
-----------------------------------------------------------------------------------
 
โค๊ด:
$Wait = ProcessClose("$PID") 

คำอธิบาย: กระแสจะถูกบังคับให้ไหลเป็นช่วงๆ (ไม่เกียวกับหลินหุ้ย)
ตามจังหวะการทำงานของโปรแกรมที่สั่งติดตั้ง ช้าบ้าง เร็วบ้าง
ขึ้นอยู่กับข้อมูลที่ถูกก๊อบปี้ลงเครื่อง ณ.ขณะนั้น
กระแสที่ผ่านการควบคุมจะออกมาทาง $Wait
แล้วก็นำกระแสที่ได้ ไปควบคุม Counter Control Loop อีกทีหนึ่ง
-----------------------------------------------------------------------------------
Download:AutoIns_SampleProj4
Files size:6.2 MB
http://upload.one2car.com/download.aspx?pku=310BD800985EJTW4QJ9PPCXIAAXUEY (http://upload.one2car.com/download.aspx?pku=310BD800985EJTW4QJ9PPCXIAAXUEY)




หัวข้อ: Re: AutoInstall & AutoSync FileProcess to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: sak2007 ที่ มิถุนายน 21, 2009, 03:14:01 pm
AutoIt3 Progressbar Percentage ท่านสามารถเลือกเปลี่ยน ขนาด , สี ของ Progressbar ได้ตามต้องการ
โค๊ด:
#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
-----------------------------------------------------
(http://upic.me/i/6q/clip_5.jpg)

Download:AutoIt Progressbar Percentage
Size:2.6 MB
http://upload.one2car.com/download.aspx?pku=310BD8A7D48PLGPIBU[5FL5ZGPDGNE (http://upload.one2car.com/download.aspx?pku=310BD8A7D48PLGPIBU[5FL5ZGPDGNE)


หัวข้อ: Re: AutoInstall & AutoSync File Process to Progressbar(AutoIt3)
เริ่มหัวข้อโดย: JABBOY ที่ กรกฎาคม 09, 2009, 09:56:40 pm
สุดยอด ขอบคุณครับ   thank2