Cần giúp đỡ về AutoIT !!!

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi zzkenzz, 31/8/09.

  1. zzkenzz

    zzkenzz Youtube Master Race

    Tham gia ngày:
    16/11/08
    Bài viết:
    11
    Nơi ở:
    ádasdad
    em vừa mới học AutoIT được vài tiếng, đọc cái chưa hết cái Help nhưng em muốn hỏi là thông thường các lệnh xét và lặp như For..., If...., Select/Switch, With..., và 1 số lệnh nữa, vd như nếu có 2 cái If thì nó sẽ làm lần lượt từng cái If, nhưng có cách nào để chạy song song 2 cái If ko? , em chỉ mới học về Pascal nên chưa biết nhiều lắm, cụ thể trường hợp của em là em muốn làm 2 lệnh riêng biệt cho cái autogame với delaytime sleep, bt nó cứ phải hết sleep này nó mới qua sleep khác.... đang bí.
     
  2. ßë磡ñ—£µv—¶²h¡

    ßë磡ñ—£µv—¶²h¡ Youtube Master Race

    Tham gia ngày:
    31/8/09
    Bài viết:
    12
    Nơi ở:
    Hồ Chí Minh
    Ai biết giúp Ken với!
    :D bạn có thể nó rõ hơn 1 tí không !
     
  3. check_love2008

    check_love2008 Youtube Master Race

    Tham gia ngày:
    19/6/08
    Bài viết:
    20
    ý bạn đó nói là bình thường autoit xét hết lệnh if này rồi mới thực hiện lệnh if kia,bây giờ bạn ây muốn 2 cái if chạy cùng 1 lúc 2 trường hợp.Nếu vậy bạn sử dụng lệnh này nhá
    if(a.. and b..) then a.. b.. tương tự mấy cái # :)
     
  4. bakuryu2

    bakuryu2 Youtube Master Race

    Tham gia ngày:
    11/2/05
    Bài viết:
    29
    không. ý bạn đó nói tới multithread đó. mình chỉ biết dùng multithread thôi chứ không biết dùng nó thế nào. bạn có thể lên google tìm kiếm tài liệu về nó trong c++ xem có hiểu không. nếu hiểu thì áp dụng vào autoit :D
     
  5. bakuryu2

    bakuryu2 Youtube Master Race

    Tham gia ngày:
    11/2/05
    Bài viết:
    29
    bạn thử với bài viết nè nhé. mới học về lập trình thì sẽ khó hiểu đo. cứ làm theo hướng dẫn thôi. http://www.autoitscript.com/forum/index.php?showtopic=25494
    trang nè tiếng Anh bạn chịu khó đọc cho quen để sau nè tìm tài liệu đơn giản hơn.
     
  6. zzkenzz

    zzkenzz Youtube Master Race

    Tham gia ngày:
    16/11/08
    Bài viết:
    11
    Nơi ở:
    ádasdad
    thanks nhiều nha, nhưng có lẽ các bạn hiểu nhầm ý mình rồi, bài trong địa chỉ trên chỉ nếu cách xét nhiều trường hợp xảy ra, ý của mình muốn hỏi làm sao để 2 trường hợp đều đúng sẽ thực hiện cùng 1 lúc, vd như sleep time của mỗi cái là 10 giây thì tốn hết 20 giây để thực hiện hết các lệnh rồi, đằng này là mình muốn làm sao để các sleeptime ko cùng trong 1 lệnh ko tương tác với nhau, cụ thể như là mình tạo ra 2 cái Checkbox cho 2 lệnh click chuột (mình dùng MouseClickPlus), sleeptime của checkbox 1 là 1 giờ, cái thứ 2 là 10 giây, nhưng dù mình có tách mọi thứ có riêng quan đến 2 lệnh đó ra thì vẫn cứ phải đợi 1 giờ 10 giây nó mới click được có 2 cái.... ai có thể giúp ko?
    Tiện thể cho mình xin cách làm cái ControlSendPlus với, tại cái ControlSend nó cứ vướng Shift,Alt,Ctrl,... cám ơn các bạn nhiều.
     
  7. bakuryu2

    bakuryu2 Youtube Master Race

    Tham gia ngày:
    11/2/05
    Bài viết:
    29
    mình chưa có khả năng sửa bài. mod box nè ghép bài lại hộ mình nhé.
    có lẽ trường hợp của bạn không cần phức tạp tới mức cần đến multithread đâu. bạn dùng cách nè là được rùi.
    bạn dùng hàm nè để lấy thời gian hiện tại vào $begin
    $begin=TimerInit()
    hàm nè sẽ xác định thời gian từ lúc chạy timerinit tới hiện tại và đưa vào $now
    $now=TimerDiff($begin)
    bạn tạo ra biến để chứa thời gian có thể cast skill đó lần tiếp theo. VD là $next nhé
    mình dùng while 1 để tạo vòng lặp vô hạn
    coi như có 3 skill thế nè nhé.( cast skill xong mới tính delay nhé- có thể khác tùy game bạn chơi)
    skill 1 cast time 500ms delay 5000ms
    skill 2 cast time 1000ms delay 2000ms
    skill 3 cast time 2500ms delay 3000ms
    coi 1 skill là mảng sau [cast time,delay,next cast]
    vậy bạn có đoạn code gần giống thế nè


    $skill[3][3]=[[500,5000,0],[1000,2000,0],[2500,3000,0]]
    $wait=0
    $begin==TimerInit()
    while 1
    {
    $now=TimerDiff($begin)
    if $now>$wait then
    for $i=0 to 2 step 1
    if$now>$skill[$i][2] then
    $skill[$i][2]=$now +$skill[$i][0]+$skill[$i][1]
    $wait=$now+$skill[$i][0]
    .
    ___________Auto Merge________________

    .
    mình chưa có khả năng sửa bài. mod box nè ghép bài lại hộ mình nhé.
    có lẽ trường hợp của bạn không cần phức tạp tới mức cần đến multithread đâu. bạn dùng cách nè là được rùi.
    bạn dùng hàm nè để lấy thời gian hiện tại vào $begin
    $begin=TimerInit()
    hàm nè sẽ xác định thời gian từ lúc chạy timerinit tới hiện tại và đưa vào $now
    $now=TimerDiff($begin)
    bạn tạo ra biến để chứa thời gian có thể cast skill đó lần tiếp theo. VD là $next nhé
    mình dùng while 1 để tạo vòng lặp vô hạn
    coi như có 3 skill thế nè nhé.( cast skill xong mới tính delay nhé- có thể khác tùy game bạn chơi)
    skill 1 cast time 500ms delay 5000ms
    skill 2 cast time 1000ms delay 2000ms
    skill 3 cast time 2500ms delay 3000ms
    coi 1 skill là mảng sau [cast time,delay,next cast]
    vậy bạn có đoạn code gần giống thế nè


    $skill[3][3]=[[500,5000,0],[1000,2000,0],[2500,3000,0]]
    $wait=0
    $begin==TimerInit()
    while 1
    $now=TimerDiff($begin)
    if $now>$wait then
    for $i=0 to 2 step 1
    if$now>$skill[$i][2] then
    $skill[$i][2]=$now +$skill[$i][0]+$skill[$i][1]
    $wait=$now+$skill[$i][0]
    $i=3
    #cs
    cs là bắt đầu chú thích bạn nhé
    ce là kết thúc chú thích
    thêm code của bạn phù hợp với việc bạn muốn làm ở phía dưới. bình thường là sendkey hay gì tùy bạn
    #ce
    endif
    next
    endif
    wend
     
  8. bakuryu2

    bakuryu2 Youtube Master Race

    Tham gia ngày:
    11/2/05
    Bài viết:
    29
    với multithread thì việc bạn yêu cầu thì hoàn toàn có thể thực hiện nhưng vì không cần thết đến mức phải dùng multithread nên bạn dùng các trên mình nói cũng được.
    bạn dừng dùng sleep. nó sẽ dùng thread của bạn lại. không thể làm gì được. còn cách trên bạn có thể dùng nhiều skill một lúc. không chỉ 2 3 4 mà hàng chục skill cũng ok. :D
    ngoài ra bạn nên dùng thêm lênh continue ở cuối sau khi bạn sendkey. nếu không có thế chảu cast skill thứ nhất xong nó đã cast skill thứ 2
     
  9. zzkenzz

    zzkenzz Youtube Master Race

    Tham gia ngày:
    16/11/08
    Bài viết:
    11
    Nơi ở:
    ádasdad
    Trường hợp của mình ko thể dùng như bạn được... để mình giải thích kĩ hơn nhé... mình muốn thực hiện 2 dãy lệnh... chỉ có thể là click chuột....
    Dãy lệnh thứ nhất nó sẽ click 3 lần trên 3 điểm (cần có delay giữa các click thì mới click chính xác được, ko cần quá lâu mà chỉ cần đủ để click ăn), và bắt buộc 1h sau mới thực hiện tiếp 3 clicks như vậy ... cứ lặp lại..
    Dãy lệnh thứ 2 nó sẽ click chỉ trên 1 điểm (delay của các click cần ở khoảng 10 giây)... cứ lặp lại...
    Nhưng vấn đề ở đây là sau khi 3 Clicks kia đã được thực hiện thì phải đợi 1h sau cái 1 Click mới được thực hiện (ko đúng với mình muốn là 10 giây)... mình biết vì mình xài Sleep... và nếu xài như bạn bakuryu2 thì ko được vì đơn giản cũng phải đợi như sleep chỉ khác bạn có thể reset delaytime để đúng với từng casttime, nhưng dù sao cũng cám ơn bạn vì đã reply
     
  10. bakuryu2

    bakuryu2 Youtube Master Race

    Tham gia ngày:
    11/2/05
    Bài viết:
    29
    mình port code luôn nhé bạn thay lệnh của bạn vào rùi dùng. lần nè không giải thích nhiều nữa. bạn dùng được rùi tự tìm hiểu thêm.

    chắc chắn là trong thời gian đợi của 1h sẽ có click 10 sec 1 lần. sẽ có 2 lựa chọn cho bạn. nếu giữa 3 lần click kia mà bạn vẫn muốn có những lần click của chu kì 10 sec thì bạn làm thế nè
    Mã:
    ;click 3 lan 1 gio delay 1sec
    ;10 sec=10000ms nhe,1h=3600000 ms nhe
    ;thoi gian doi giua 2 lan click trong chu ki 3 click/h la 1s 
    $clicktime[2]=[1000,3600000]
    $click1[3][3]=[[1,1,0],[1,1,0],[1,1,0]]
    
    $click2[3]=[1,1,0]
    
    
    
    $begin=TimerInit()
    
    $wait =0
    
    while 1
    	$now=TimerDiff($begin)
    	if $now>$wait Then
    		$now=TimerDiff($begin)
    		if $now>$click1[0][2] Then
    				$click1[0][2]=$now+$clicktime[1]
    				$click1[1][2]=$now+$clicktime[0]
    				$click1[2][2]=$now+$clicktime[0]*2
    				$wait=$now+$clicktime[0]
    			;lenh click tu ban dat nhe
    		Else
    			for $i=1 to 2 step 1
    				if $now>$click1[$i][2] Then
    					$click1[$i][2]=$now+$clicktime[1]
    					$wait=$now+$clicktime[0]
    					;lenh click tu ban dat nhe
    					$i=3
    				EndIf
    			Next
    		EndIf
    		$now=TimerDiff($begin)
    		if $now>$click2[2] and $now>$wait Then
    			$click2[2]=$now+10000
    			;lenh click tu ban dat nhe
    		EndIf
    	EndIf
    WEnd
    
    
    còn nếu giữa 3 lần click sẽ không có những cái click của chu kì 10 sec thì làm theo cách sau
    Mã:
    ;click 3 lan 1 gio delay 1sec
    ;10 sec=10000ms nhe,1h=3600000 ms nhe
    ;thoi gian doi giua 2 lan click trong chu ki 3 click/h la 1s 
    $clicktime[2]=[1000,3600000]
    $click1[3][3]=[[1,1,0],[1,1,0],[1,1,0]]
    
    $click2[3]=[1,1,0]
    
    
    
    $begin=TimerInit()
    
    $wait =0
    
    while 1
    	$now=TimerDiff($begin)
    	if $now>$wait Then
    		$now=TimerDiff($begin)
    		if $now>$click1[0][2] Then
    				$click1[0][2]=$now+$clicktime[1]
    				$click1[1][2]=$now+$clicktime[0]
    				$click1[2][2]=$now+$clicktime[0]*2
    				$click2[2]=$click1[2][2]+100
    				$wait=$now+$clicktime[0]
    			;lenh click tu ban dat nhe
    		Else
    			for $i=1 to 2 step 1
    				if $now>$click1[$i][2] Then
    					$click1[$i][2]=$now+$clicktime[1]
    					$wait=$now+$clicktime[0]
    					;lenh click tu ban dat nhe
    					$i=3
    				EndIf
    			Next
    		EndIf
    		$now=TimerDiff($begin)
    		if $now>$click2[2] and $now>$wait Then
    			$click2[2]=$now+10000
    			;lenh click tu ban dat nhe
    		EndIf
    	EndIf
    WEnd
    
    
     
  11. zzkenzz

    zzkenzz Youtube Master Race

    Tham gia ngày:
    16/11/08
    Bài viết:
    11
    Nơi ở:
    ádasdad
    mình hiểu rồi, cám ơn bạn nhiều nhé
     
  12. zzkenzz

    zzkenzz Youtube Master Race

    Tham gia ngày:
    16/11/08
    Bài viết:
    11
    Nơi ở:
    ádasdad
    ah bạn ơi bạn có biết cách send keystocks đến cửa sổ ẩn và chỉ có cửa sổ đó nhận được ko?, mình thử dùng Send và ControlSend thì nó đều thực hiện trên tất cả cửa sổ, có kiếm trên nhiều forum nhưng chẳng thấy, nếu bạn biết thì chỉ mình với nha, thanks nhiều. :P

    Ps:Mới học nên còn nhiều bỡ ngỡ, toàn hỏi mấy câu gà ko ah, mong các pác đừng nóng. :D
     
  13. YeuBeNhieu73

    YeuBeNhieu73 SPARTAN John-117 Lão Làng GVN

    Tham gia ngày:
    22/2/07
    Bài viết:
    11,438
    ControlSend hình như làm được mà bạn ..............
     

Chia sẻ trang này