Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

autoit aktywacja okna bez sleep


Rekomendowane odpowiedzi

Opublikowano

Witam. Zainteresowałem się autoit w celu zrobienia sobie automatycznej instalacji programów. Za pomocą narzędzia AU3Record nagrałem "co ma się klikać".

Problem pojawia się gdy instaluje eseta z live instaler, ponieważ instaltor na początu pobiera najnowszą wersję a dopiero później przechodzi do instalacji. I nie jestem w stanie okrślić jak duże mam dać oźnienie, bo raz mam taką prędkość neta a raz taką. Najlepiej by było gdyby to zrobić bez instrukcji sleep, ale niestety nie wiem jak :(

#region --- Au3Recorder generated code Start (v3.3.9.5 KeyboardLayout=00000415)  ---

#region --- Internal functions Au3Recorder Start ---
Func _Au3RecordSetup()
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',1)
Opt('MouseCoordMode',0)
Local $aResult = DllCall('User32.dll', 'int', 'GetKeyboardLayoutNameW', 'wstr', '')
If $aResult[1] <> '00000415' Then
  MsgBox(64, 'Warning', 'Recording has been done under a different Keyboard layout' & @CRLF & '(00000415->' & $aResult[1] & ')')
EndIf

EndFunc

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc

_AU3RecordSetup()
#endregion --- Internal functions Au3Recorder End ---


Run('C:\Users\kolp\Desktop\Nowy folder\eset_nod32.exe')
_WinWaitActivate("ESET NOD32 Antivirus","")
MouseClick("left",154,435,1) ;klika dalej i się pobiera najnowsza wersja
MouseClick("left",234,459,1) ; tytaj juz nie chce się kliknąć, jest to akceptowanie umowy
MouseClick("left",109,354,1)
MouseClick("left",44,200,1)
MouseClick("left",216,462,1)
MouseClick("left",149,416,1)

#endregion --- Au3Recorder generated code End ---


@Edit

Trochę źle nazwałem temat, miałem na myśli autoit aktywacja okna bez opóźniania za pomocą sleep

 

 

Z góry dziękuje za pomoc. Pozdro.

Opublikowano

Możesz użyć funkcji _WaitForImageSearch z bilbioteki ImageSearch.au3.

Opublikowano

wesołych świąt "_

 

dzieki :)

 

Możesz użyć funkcji _WaitForImageSearch z bilbioteki ImageSearch.au3.

 

Gdzieś widziałem było to inaczej zrobione, ale nie mogę tego teraz znaleźć, jak dobrze pamiętam było to coś z pętlą while.

Opublikowano

Inne sposoby które przychodzą mi do głowy to tylko bawienie się z PixelSearch(ale nie musi zadziałać) oraz użycie funkcji zaczynających się od Win... i Control...(też nie musi zadziałać). Według mnie najpewniejszym i najprostszym  rozwiązaniem byłoby użycie _WaitForImageSearch, ale jak wybitnie nie chcesz...

Opublikowano

a przy instalacji jak można zastąpić to sleep? Bo jak jest klikanie jedno po drugim dalej dalej to działa ale jak po ostatnim kliknięciu idzie pasek postępu to bez sleep ostatni button zakończ nie działa.

 

@Edit

 

Dobra to już zrobiłem bez sleep

while 1
    WinWait($okno,"")
    MouseClick(("left",363,367,1)
WEnd

Myślę, że z tym liveinstaler-em tak samo się da, ale to już nie dziś.

Wesołych świąt :)

Opublikowano

@marpus05527 Po co ci tam WinExists? Jedyne co ono robi to sprawdza czy dane okno istnieje i zwraca to. Ale ty nigdzie zwracanej wartości nie zapisujesz.

Opublikowano

Po co ci tam WinExists? Jedyne co ono robi to sprawdza czy dane okno istnieje i zwraca to. Ale ty nigdzie zwracanej wartości nie zapisujesz.

 

Bo nie trzeba, czeka aż pojawi się okno, jak pojawi się to klika w button zakończ

Opublikowano

Bo nie trzeba, czeka aż pojawi się okno, jak pojawi się to klika w button zakończ

WinExists nie czeka aż pojawi się okno, jak on znajdzie podane to zwraca 1 a jak nie znajdzie to zwraca 0 i tyle. Od czekania na pojawienie się okna jest WinWait.

Opublikowano

WinExists nie czeka aż pojawi się okno, jak on znajdzie podane to zwraca 1 a jak nie znajdzie to zwraca 0 i tyle. Od czekania na pojawienie się okna jest WinWait.

 

yy.. no tak, źle tutaj przepisałem xdd

Już poprawione

Opublikowano

 

Warto na koniec zamknac petle :)

while 1
    WinWait($okno,"")
    MouseClick(("left",363,367,1)
Exitloop
WEnd

...

 

Przecież pętla jest po to, aby powtórzyć coś kilka razy. To co podałeś, robi tylko raz. Zakładam że autor tematu chce aby mu to robiło w kółko, bo inaczej po co wstawiałby pętlę?

Opublikowano

...

 

Przecież pętla jest po to, aby powtórzyć coś kilka razy. To co podałeś, robi tylko raz. Zakładam że autor tematu chce aby mu to robiło w kółko, bo inaczej po co wstawiałby pętlę?

 

 

Dobrze mówi, trzeba wyjść z pętli tylko, napewno nie tak jak pokazał. Bo po zakończeniu instalacji chcę jeszcze stronę główną ustawić i nie wychodzi mi z pętli (tak mi się wydaje), bo nie wykonują się kolejne instrukcje, a one napewno są dobrze bo sprawdziłem w osobnym pliku te 6 instrukcji i mi ustawiło stronę główną.

 

Tylko nie wiem jeszcze jak z niej wyjść.

Opublikowano
while 1; 
WinWait($okno,"")
if WinWait($okno,"") <> 0 then
		MouseClick("left",363,367,1)
		ExitLoop
	EndIf
WEnd

Co mam nie tak, że to nie działa?

 

@Edit1

 

Chcę aby po pojawieniu się okna nacisnięty został przycisk zakończ i zaby wyszło z pętli, niestety tak się nie dzieje.

 

@edit2

 

Instrukcja ExitLoop coś blokuje, bo jak jej nie ma to klika buttonik i instalacja jest zakończona ale zaś nie wychodzi mi z pętli i nie wykonują się kolejne instrukcje ;(

Opublikowano

Petla tutaj nie jest wogole potrzebna skoro WinWait czeka na okno.

 

No tak, tylko, że to i tak dalej nie działa..

WinWait($okno,"")
_WinWaitActivate($okno","")
MouseClick("left",363,367,1)

Nie klika buttona końcącego instalację

Opublikowano

Ale po co ty masz tą pętlę? Pętla służy do tego aby coś powtórzyć, nie po to żeby była bez powodu. Skrypt nie pójdzie dalej, bo będzie czekał na funkcję WinWait. Więc zamiast tego powinno być po prostu:

WinWait($okno,"")
MouseClick("left",363,367,1)

@Edit Nie wczytały się poprzednie posty, może źle pobrałeś uchwyt do okna?

Opublikowano

Ale po co ty masz tą pętlę? Pętla służy do tego aby coś powtórzyć, nie po to żeby była bez powodu. Skrypt nie pójdzie dalej, bo będzie czekał na funkcję WinWait. Więc zamiast tego powinno być po prostu:

WinWait($okno,"")
MouseClick("left",363,367,1)

@Edit Nie wczytały się poprzednie posty, może źle pobrałeś uchwyt do okna?

I tu sie mylisz.. Petla nie sluzy tylko zeby cos zapetlic, ale zeby np zatrzymac program do znalezienia np elementu.

Przykladowo robisz botka pod strone www w ktorym trzeba wpisac captche, jak inaczej chcesz zatrzymac program zeby ktos przepisal captche i zatwierdzil?

 

@Edit

Tutaj masz przyklad;

WinWait("[CLASS:Notepad]")
;dalej dopiero po otwarciu okna notatnika
MsgBox(0,"","Okno notatnika otwarte!")
 
Jak pobierasz nazwe okna?
Opublikowano

Tak, ale z wykorzystaniem pętli to wyglądałoby tak:

While NOT WinExists("[CLASS:NOTEPAD]","")
Sleep(100)
WEnd
MsgBox(0,"","Okno notatnika otwarte!")

Ty nie wykorzystałeś pętli, on też zrobił to w sposób który nie wymaga użycia pętli a więc nie ma to sensu.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...