Что нового

Autoit - работа скрипта в виртуальной машине

lightforever

Новичок
Сообщения
37
Репутация
2
Имеется виртуальная машина, на которой записана операционная система windows xp. Запускаю на своеё настоящей системе один скрипт - он работает хорошо, запускаю на виртуальной машине( на которой установлена та же операционка кстати) и происходит через 5-20 мин нормальной работы скрипта следущее:

1) скрипт перестаёт выполняться, но в диспетчере задач показано, что программа не зависла
2) скрипт грузит ЦП на макс

Не скажу, чтобы скрипт не ел много ресурсов, но я итак даю виртуальной машине ресурсов подзавязку(пробовал и меньше давать - та же ерунда)
Пробовал выставлять самый высокий приоритет на виртуальную машину - тоже не помогает
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
lightforever
скрипт в студию
 
Автор
L

lightforever

Новичок
Сообщения
37
Репутация
2
Скрипт для открытия столов покерного клиента. "Зависает" на виртуальной машине в разных местах
Код:
Opt("WinTitleMatchMode", -2)

Global $Up=false;$Limit=50

$f=FileOpen("C:\\Poker\\timeend.txt", 0); файл с временем конца скрипта
If ($f == -1) Then
    Exit
EndIf
 $mins = FileReadLine($f)
 $hours=FileReadLine($f)
 $days=FileReadLine($f)
FileClose($f)
$timeend=$mins+$hours*60
	
Do ; работаем пока не выйдет время
$windows=WinList("[REGEXPTITLE:^\w+\s*\w*\s*\w*,]")
If $windows[0][0]<9 Then
	
$a=WinActivate("RedKings"); активируем главное окно-лобби
if Not $a Then Exit
WinMove("RedKings","",1290,950);далее идёт набор кликов на пунктах-настройках
MouseClick("left",1717,996,1);
MouseClick("left",1523,1060,1);
If Not (PixelGetColor(1794,1058)==4390912) Then MouseClick("left",1794,1058,1)
If Not (PixelGetColor(1794,1077)==4390912) Then MouseClick("left",1794,1077,1)
MouseClick("left",1523,1080,1);
MouseClick("left",1678,1060,1);
MouseClick("left",1678,1111,1);
Sleep(4000)
MouseClick("left",1310,1120,1);
EndIf


Do
	
$now=@Min+@Hour*60





$windows=WinList("[REGEXPTITLE:^\w+\s*\w*\s*\w*,]")
If $windows[0][0]<9 Then; если окон-детей меньше 9 - набираем
WinActivate("RedKings")
WinActive("RedKings")
WinMove("RedKings","",1290,950);
If Not (PixelGetColor(1717,996)== 16711422) Then
MouseClick("left",1717,996,1);
Sleep(4000)
EndIf
EndIf 
Dim $a[10][2]; массив с координатами нужных нам позиций
$a[0][0]=1845;
$a[0][1]=1142;
$a[1][0]=1921
$a[1][1]=1142
$a[2][0]=2000;
$a[2][1]=1142;
$a[3][0]=1837
$a[3][1]=1179;
$a[4][0]=2008;
$a[4][1]=1179;
$a[5][0]=1837;
$a[5][1]=1216;
$a[6][0]=2009;
$a[6][1]=1216;
$a[7][0]=1845;
$a[7][1]=1253;
$a[8][0]=1921 
$a[8][1]=1253;
$a[9][0]=2000
$a[9][1]=1253
Dim $chairs=0,$i
For $i=0 to 9 
	If PixelGetColor($a[$i][0], $a[$i][1])==10223616 Then $chairs=$chairs+1
	Next
$coord=PixelSearch(1790,1121,2060,1290,10223616)

If $chairs<=2 And Not @error Then ; если позиций определённого цвета меньше 2
	MouseClick("left",$coord[0],$coord[1],1)
	Sleep(3000)
	$font1=PixelGetColor(1808,1098)
    $font2=PixelGetColor(1828,1098)
	$font3=PixelGetColor(1835,1098)
	If Not $Up Then ;далее- установка флага, чтобы определить - повторяется ли окно в правой части главного меню, если да,то меняем направление хода
		Send("{DOWN}")
		Sleep(400)
		If PixelGetColor(1808,1098)==$font1 And PixelGetColor(1828,1098)==$font2 And PixelGetColor(1835,1098)==$font3 Then $Up=true
	Else
		Send("{UP}")
		Sleep(400)
		If PixelGetColor(1808,1098)==$font1 And PixelGetColor(1828,1098)==$font2 And PixelGetColor(1835,1098)==$font3 Then $Up=false
	EndIf
Else 
	$font1=PixelGetColor(1808,1098)
    $font2=PixelGetColor(1828,1098)
	$font3=PixelGetColor(1835,1098)
	If Not $Up Then 
		Send("{DOWN}")
		Sleep(200)
		If PixelGetColor(1808,1098)==$font1 And PixelGetColor(1828,1098)==$font2  And PixelGetColor(1835,1098)==$font3 Then 
			$Up=true
		EndIf
	Else
		Send("{UP}")
		Sleep(200)
		If PixelGetColor(1808,1098)==$font1 And PixelGetColor(1828,1098)==$font2 And PixelGetColor(1835,1098)==$font3 Then $Up=false
	EndIf
EndIf




Dim $Must_pos[9][3]; фиксированные позиции для окон
$Must_pos[0][0]=0
$Must_pos[0][1]=0
$Must_pos[1][0]=502
$Must_pos[1][1]=0
$Must_pos[2][0]=1004
$Must_pos[2][1]=0
$Must_pos[3][0]=1506
$Must_pos[3][1]=0
$Must_pos[4][0]=0
$Must_pos[4][1]=386
$Must_pos[5][0]=502
$Must_pos[5][1]=386
$Must_pos[6][0]=1004
$Must_pos[6][1]=386
$Must_pos[7][0]=1506
$Must_pos[7][1]=386
$Must_pos[8][0]=0
$Must_pos[8][1]=772


For $w=0 to 8 
	$Must_pos[$w][2]=0
Next
If $windows[0][0] Then; определение свободны/занятых позиций
For $w=1 to $windows[0][0]
	If Not @error Then 
		$element=$windows[$w][1]
		$element_pos=WinGetPos($element,"")
	EndIf
	For $j=0 To 8
		If Not @error Then
	If Abs($Must_pos[$j][0]-$element_pos[0]+8)<20 And Abs($Must_pos[$j][1]-$element_pos[1])<20 Then $Must_pos[$j][2]=1  
		EndIf
	Next
Next
EndIf
Dim $WPos[4]

$windows=WinList("[REGEXPTITLE:^\w+\s*\w*\s*\w*,]")

If $windows[0][0] Then
    For $j = 1 To $windows[0][0]
        $WPos = WinGetPos($windows[$j][1])
		$has=False;
	    $Result=StringRegExp($windows[$j][0],"(\d+\d+)",1 )
        If Not @error Then
            For $i = 0 To 8
                If Abs($WPos[0] - $Must_pos[$i][0]) < 50 And Abs($WPos[1] - $Must_pos[$i][1]) < 20 Then
                    $has = True
                EndIf
            Next
        EndIf
    
	If Not $has	Then; если это окно не на своём месте, то....
		For $i=0 to 8 
			If $Must_pos[$i][2]==0 Then 
				WinMove($windows[$j][0],"",$Must_pos[$i][0],$Must_pos[$i][1],502,366)
				Sleep(6000)
				MouseClick("left",$Must_pos[$i][0],$Must_pos[$i][1]+100,1)
				MouseClick("left",$Must_pos[$i][0]+325,$Must_pos[$i][1]+167,2)
				Send($Result[0]/2.5)
				Sleep(1000)
				$test=PixelGetColor($Must_pos[$i][0]+136,$Must_pos[$i][1]+223)
				If NOT ($test==723723)  Then 
					MouseClick("left",$Must_pos[$i][0]+480,$Must_pos[$i][1]+20,1)
					ExitLoop
				Else 
					  MouseMove($Must_pos[$i][0]+167,$Must_pos[$i][1]+261)
					  WinActivate($windows[$j][1])
				      MouseClick("left",$Must_pos[$i][0]+167,$Must_pos[$i][1]+261,1)
	                  Sleep(5000)
					  MouseMove($Must_pos[$i][0]+449,$Must_pos[$i][1]+306)
					  WinActivate($windows[$j][1])
					  MouseClick("left",$Must_pos[$i][0]+449,$Must_pos[$i][1]+306,1)
					  MouseClick("left",$Must_pos[$i][0]+449,$Must_pos[$i][1]+327,1)
					  Sleep(1000)
					  If PixelGetColor($Must_pos[$i][0]+186,$Must_pos[$i][1]+353)==16772193 Then MouseClick("left",$Must_pos[$i][0]+480,$Must_pos[$i][1]+20,1)
			
					  MouseClick("left",110,1520,1)
				      ExitLoop
				EndIf
				
            EndIf
		Next
	EndIf
	Next
EndIf

Until $windows[0][0]>8 Or $now>$timeend

For $i=0 to 25 ;бездействуем


	Sleep(3000)
Next
  
Until $now>$timeend
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Качество цветопередачи в параметрах дисплея выставлено одинаково?
 
Автор
L

lightforever

Новичок
Сообщения
37
Репутация
2
edyapd сказал(а):
Качество цветопередачи в параметрах дисплея выставлено одинаково?
Да




Добавлено:
Сообщение автоматически объединено:

Всё становится ещё интереснее: запустил тот же скрипт на виртуальной машине на другом компьютере -там всё работает. У нас железо имеет одинаковые характеристики, но у меня материнка и проц AMD, а на том, где работает - Intel. Все проги на компах одинаковые. Неужто Intel настолько лучше AMD?
 
Автор
L

lightforever

Новичок
Сообщения
37
Репутация
2
И на других компьютерах работает - дело в железе вобщем
 

The Dream

Новичок
Сообщения
393
Репутация
3
:smile: Ребята,у меня тоже похожее бывает - на виртуальной,не может быть произведена вторая загрузка с помощью InetGet (просто зависает скрипт,я так понимаю в ожидании загрузки), такое чуство,что интернет отключаетса (хотя на самом деле все есть).
В физичесской - все ок.
Странности еще есть , но нехватит сил и времени обьяснить.
 
Верх