AutoInstall & AutoSync File Process to Progressbar(AutoIt3)
LSVคลังสมองออนไลน์ "ปีที่14"
พฤศจิกายน 22, 2024, 05:39:49 am *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
 
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: AutoInstall & AutoSync File Process to Progressbar(AutoIt3)  (อ่าน 4616 ครั้ง)
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 »

สุดยอด ขอบคุณครับ   
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2006, Lewis Media

lsv2555Please follow the new website at https://www.pohchae.com

Valid CSS!