sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« เมื่อ: มิถุนายน 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
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« ตอบ #1 เมื่อ: มิถุนายน 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
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« ตอบ #2 เมื่อ: มิถุนายน 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
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« ตอบ #3 เมื่อ: มิถุนายน 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
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« ตอบ #4 เมื่อ: มิถุนายน 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 --------------------------------------------------------------------------
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« ตอบ #5 เมื่อ: มิถุนายน 21, 2009, 06:47:56 am » |
|
ความรู้เรื่อง Process --------------------- Process หมายถึง โปรแกรมต่างๆที่กำลังรันหรือทำงานอยู่ การProcessแบ่งออกเป็น2ส่วน 1.Application Process หมายถึง โปรแกรมที่เราสั่งเปิดขึ้นมาทำงานชั่วคราว เมื่อทำงานเสร็จแล้วก็จะจบการทำงานเองหรือเราสั่งปิด ดูได้จาก Task Manager ในส่วนของ Applications --------------------------------------------------------------------------------------------------- 2.Windows Process หรือเรียกอีกอย่างว่า Service หมายถึง โปรแกรมที่ทำงานอยู่เบื้องหลังตลอดเวลา ดูได้ในส่วนของ processes Processดูได้ในตำแหน่ง CPU
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« ตอบ #6 เมื่อ: มิถุนายน 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
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
sak2007
Full Member
member
คะแนน 46
ออฟไลน์
กระทู้: 313
รู้ไว้ไช่ว่าใส่บ่าแบกหาม
|
|
« ตอบ #7 เมื่อ: มิถุนายน 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 ----------------------------------------------------- Download:AutoIt Progressbar Percentage Size:2.6 MB http://upload.one2car.com/download.aspx?pku=310BD8A7D48PLGPIBU[5FL5ZGPDGNE
|
|
|
บันทึกการเข้า
|
"อนิสงค์ของการเป็นผู้ให้ ย่อมได้มากกว่าผู้รับ"
|
|
|
JABBOY
member
คะแนน 0
ออฟไลน์
กระทู้: 23
|
|
« ตอบ #8 เมื่อ: กรกฎาคม 09, 2009, 09:56:40 pm » |
|
สุดยอด ขอบคุณครับ
|
|
|
บันทึกการเข้า
|
|
|
|
|