Прошу помочь с непонятным поведением курсора при отрисовке GUI.
Скрипит постоянно нажимает {CTRL}+{INS} и {DOWN}, копируя столбец таблицы и записывая их в файл.
Если использовать «Send ("^{INS}", 0)», то не возможно нажать кнопку «Стоп». Из-за нажатий {DOWN} смещается фокус.
Если же использовать «ControlSend($title, "", "", "{DOWN}")»,то курсор при наведении на GUI-форму скрипта постоянно мигает часиками.
Такое поведение курсора замечено только, если GUI-форма скрипта расположена поверх таблицы Excel. Если же сделать так чтобы GUI-форма скрипта и окно с таблицей не пересекались все вроде нормально.
Ps: я не использую <Excel.au3> т.к. Еxcel эмулирует Java интерфейс программы из которой я получаю данные. Поведение курсора, что на Java окне, что на Excel одинаковое.
Скрипит постоянно нажимает {CTRL}+{INS} и {DOWN}, копируя столбец таблицы и записывая их в файл.
Если использовать «Send ("^{INS}", 0)», то не возможно нажать кнопку «Стоп». Из-за нажатий {DOWN} смещается фокус.
Если же использовать «ControlSend($title, "", "", "{DOWN}")»,то курсор при наведении на GUI-форму скрипта постоянно мигает часиками.
Такое поведение курсора замечено только, если GUI-форма скрипта расположена поверх таблицы Excel. Если же сделать так чтобы GUI-форма скрипта и окно с таблицей не пересекались все вроде нормально.
Ps: я не использую <Excel.au3> т.к. Еxcel эмулирует Java интерфейс программы из которой я получаю данные. Поведение курсора, что на Java окне, что на Excel одинаковое.
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#Region Interface
$frm_main = GUICreate("Еxample", 149, 50, 250, 218, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
$btn_start = GUICtrlCreateButton("Старт", 0, 0, 49, 25)
$btn_stop = GUICtrlCreateButton("Стоп", 75, 0, 73, 25)
GUISetState(@SW_SHOW)
#EndRegion
Opt("GUIOnEventMode", 1)
Opt("SendKeyDelay", 10)
Opt("SendKeyDownDelay", 10)
GUISetOnEvent($GUI_EVENT_CLOSE, "Close_click")
GUICtrlSetOnEvent($btn_start, "Start_click")
GUICtrlSetOnEvent($btn_stop, "Stop_click")
Global $stop_flag = 1 ; флаг останова
Global $cur_step = 0 ; текущий шаг
Global $stroki = 1000 ; число строк в столбеце excel для копирования
; просто большое число, чтобы успеть нажать stop
Global $flag_onTop = 262144
Global $title = "Microsoft Excel"
While 1
if $stop_flag= 0 Then Initial() ;проверяем начальниые условия
While ($stop_flag = 0)
$file = FileOpen("Test.txt", 2) ; открыть файл для чтения и для записи. удалить прежнее содержимое
$cur_step =0
While (($stop_flag = 0) And ($cur_step <= $stroki))
; не могу нажать кнопку стоп. смещается фокус из-за постоянных нажатий стрелки "вниз"
;Send ( "^{INS}", 0 )
;Send ( "{DOWN}", 0 )
;при полноэкранном excel курсор часто мигает часами
ControlSend($title, "", "", "^{INS}")
ControlSend($title, "", "", "{DOWN}")
$tmp = ClipGet() & @CRLF
FileWrite ( $file, $tmp)
$cur_step += 1
WEnd
FileClose($file)
$stop_flag = 1
WEnd
Sleep(1000) ; Idle around
WEnd
Func Close_click()
$stop_flag=1
Sleep(100) ;даю время доработать циклу и закрыть файл
Exit
EndFunc
Func Start_click()
$stop_flag=0
EndFunc
Func Stop_click()
$stop_flag = 1
EndFunc
Func Initial()
If WinWait($title,"",1) = 0 Then
$stop_flag = 1
MsgBox($flag_onTop,"Ошибка", "Запустите excel и выделите 1-ю ячейку")
Else
WinActivate ( $title )
EndIf
EndFunc