Христос Воскрес!
Такая проблема - при запуске скрипт отрисовывает 3 кнопки и лейбл с картинкой. Тело основного скрипта задействуется самой верхней кнопкой под названием "Старт". Так вот пока эта кнопка не нажата, остальные кнопки работают прекрасно (и завершают работу скрипта (вторая кнопка), и меняют значок на третьей кнопке и двигают всё окно GUI за лейбл). Но если нажать кнопку "Старт" - скрипт запускается нормально, всё что нужно делает, но остальные кнопки не работают. Вроде всё делал как в примерах описано. Подскажите, что может быть не так :
Такая проблема - при запуске скрипт отрисовывает 3 кнопки и лейбл с картинкой. Тело основного скрипта задействуется самой верхней кнопкой под названием "Старт". Так вот пока эта кнопка не нажата, остальные кнопки работают прекрасно (и завершают работу скрипта (вторая кнопка), и меняют значок на третьей кнопке и двигают всё окно GUI за лейбл). Но если нажать кнопку "Старт" - скрипт запускается нормально, всё что нужно делает, но остальные кнопки не работают. Вроде всё делал как в примерах описано. Подскажите, что может быть не так :
Код:
#include <WinAPIGdi.au3>
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
Global $Paused
HotKeySet('{Esc}', 'Quit'); полный выход из скрипта по Esc
HotKeySet('{Pause}', 'OnOff') ; включение-отключение через Pause
$hGui = GUICreate(" ",50,93, -1, -1,$WS_POPUPWINDOW)
GUISetBkColor(0x88AABB)
$Button1 = GUICtrlCreateButton("Старт", 5, 5, 40, 20)
$Button2 = GUICtrlCreateButton("Стоп", 5, 26, 40, 20)
$Button3 = GUICtrlCreateButton("-", 5, 47, 40, 20, $BS_ICON )
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 42, 0) ;GUICtrlSetImage(-1, "oemlogo.bmp")
GUICtrlCreatePic(@ScriptDir & '\mslogo.jpg', 5, 68, 40, 20, -1, $GUI_WS_EX_PARENTDRAG )
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1
TrayTip ("Запуск программы", "Программа работает", 5, 1)
Sleep(1000)
Opt("WinTitleMatchMode", 2)
$X = 1190
$Y = 100
; ширина и высота области поиска
$Width = 100
$Height = 100
; икомый цвет пикселя
$Color = 0xE2A114
; проверка наличия окна
$hWnd = WinGetHandle(" – Torch") ; "Chrome_RenderWidgetHostHWND1"
; получаем handle элемента
$hControl = ControlGetHandle($hWnd, "","Chrome_RenderWidgetHostHWND1")
While 1
$aPix = _PixelGetArray($X, $Y, $Width, $Height, $Color, $hControl, True)
If $aPix[0][0] Then ControlClick($hWnd, "", $hControl, "left", 1, $aPix[1][0], $aPix[1][1])
WEnd
Case $Button2
Quit()
Case $Button3
TrayTip ("Запуск программы", "Программа работает", 5, 1)
GUICtrlSetImage($Button3, @SystemDir & '\shell32.dll', 22, 0)
; Case $Button4
; MsgBox(4096, 'Тест', 'Нажата кнопка ', 0, $hGUI); Демонстрация действия при нажатии Button 4
EndSwitch
WEnd
; -------------------------------
; функция поиска массива пикселей
; $i_X, $i_Y - координаты левого верхнего угла области поиска
; $i_Width, $i_Height - ширина и высота области поиска
; $i_Color - искомый цвет пикселя
; $h_Wnd - дескриптор окна или элемента, относительно которого осуществляется поиск (0 - на всём экране)
; $f_FirstOnly - если True, то завершает поиск после нахождения первого пикселя
Func _PixelGetArray($i_X, $i_Y, $i_Width, $i_Height, $i_Color, $h_Wnd, $f_FirstOnly = True)
Local $i_Size = $i_Width * $i_Height, $a_Pixels[$i_Size + 1][2] = [[0]], $h_DC, $h_MemDC, $h_Bitmap, $t_Bits, $i_Index
$h_DC = _WinAPI_GetDC($h_Wnd)
$h_MemDC = _WinAPI_CreateCompatibleDC($h_DC)
$h_Bitmap = _WinAPI_CreateCompatibleBitmap($h_DC, $i_Width, $i_Height)
_WinAPI_SelectObject($h_MemDC, $h_Bitmap)
_WinAPI_BitBlt($h_MemDC, 0, 0, $i_Width, $i_Height, $h_DC, $i_X, $i_Y, 0x00CC0020) ; $SRCCOPY
_WinAPI_DeleteDC($h_MemDC)
_WinAPI_ReleaseDC($h_Wnd, $h_DC)
$t_Bits = DllStructCreate('dword[' & $i_Size & ']')
$p_Bits = DllStructGetPtr($t_Bits)
_WinAPI_GetBitmapBits($h_Bitmap, 4 * $i_Size, $p_Bits)
_WinAPI_DeleteObject($h_Bitmap)
For $i = 0 To $i_Height - 1
For $j = 0 To $i_Width - 1
$i_Index += 1
If BitAND(DllStructGetData($t_Bits, 1, $i_Index), 0x00FFFFFF) = $i_Color Then
$a_Pixels[0][0] += 1
$a_Pixels[$a_Pixels[0][0]][0] = $j + $i_X
$a_Pixels[$a_Pixels[0][0]][1] = $i + $i_Y
If $f_FirstOnly Then ExitLoop 2
EndIf
Next
Next
ReDim $a_Pixels[$a_Pixels[0][0] + 1][2]
Return $a_Pixels
EndFunc ;==>_PixelGetArray по первому найденному пикселю
Func OnOff()
ConsoleWrite("/Paused/")
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFunc ;==> Paused OnOff
Func Quit()
Exit
EndFunc ;==> Quit