Что нового

[Ошибки] при третьем обращении выдает ошибку WinGetHandle

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
есть код при нажитии клавиши, все работает, но только происходит нажатие Ctrl все окна не отображаются и выдает ошибку WinActivate(WinGetHandle($aList[$k][1]))
WinActivate(WinGetHandle(^ ERROR..... в чем может быть проблема? когда скрываю окна все работает.

вот код

Код:
Case _IsPressed("22")=1 ;page down
     $i=1
   Do
	  WinActivate(WinGetHandle($aList[$i][1])) ;[Title:Документ Microsoft Office Word (5).docx - Microsoft Word]
	  Send('привет!!!!');{SPACE}
	  WinSetState(WinGetHandle($aList[$i][1]), "", @SW_HIDE)
	  Sleep(1000)
	  $i=$i+1
		 if $i= $aList[0][0]+1 Then $i=1
   Until _IsPressed("11")=1
	  for $k=1 to $aList[0][0]+1
		 WinActivate(WinGetHandle($aList[$k][1]))
		 WinSetState(WinGetHandle($aList[$k][1]), "", @SW_SHOW)
		 Sleep(10)
		 $k=$k+1
	  Next

проясните пожалуйста ситуацию

Используйте для AutoIt кода тег [autoit]
autoit.gif

madmasles.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Александр_,
Если Вы хотите получить ответ, то показывайте весь код. Что за массив $aList?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Автор
А

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
Код:
#include <Misc.au3>

	$aList = WinList('[title:Документ]') 
Dim $sText = ''
For $i = 1 To $aList[0][0]
    ; Только для кон имеющих заголовок и не скрытых
    if $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 2) Then
        ; бъединяющее присвоение элементов массива к переменной $sText с переносом строки @LF
        $sText &= "Дескриптор=" & $aList[$i][1] & "    Заголовок=" & $aList[$i][0] & @LF
		;$j =WinGetHandle($aList[1][1]); & @LF
		;$k = $aList[2][1]
	EndIf

Next
MsgBox(4096, 'Сообщение', $sText)
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
While 1
Select
Case _IsPressed("22")=1 ;page down
     $i=1
   Do
	  WinActivate(WinGetHandle($aList[$i][1])) ;[Title:Документ Microsoft Office Word (5).docx - Microsoft Word]
	  Send('привет!!!!');{SPACE}
	  WinSetState(WinGetHandle($aList[$i][1]), "", @SW_HIDE)
	  Sleep(1000)
	  $i=$i+1
		 if $i= $aList[0][0]+1 Then $i=1
   Until _IsPressed("11")=1
	  for $k=1 to $aList[0][0]+1
		 WinActivate(WinGetHandle($aList[$k][1]))
		 WinSetState(WinGetHandle($aList[$k][1]), "", @SW_SHOW)
		 Sleep(10)
		 $k=$k+1
	  Next
Case _IsPressed("21")=1 ;page up
    $i=1
   Do
	  WinActivate(WinGetHandle($aList[$i][1])) ;[Title:Документ Microsoft Office Word (5).docx - Microsoft Word]
	  Send('привет!!!');{SPACE}
      Sleep(1000)
	  $i=$i+1
		 if $i= $aList[0][0]+1 Then $i=1
	Until 	_IsPressed("11")=1
Case _IsPressed("1B")= 1 ;esc
   MsgBox(32,'Внимание!','хотите прекратить работу?')
   for $i=1 to $aList[0][0]
		 WinSetState(WinGetHandle($aList[$i][1]), "", @SW_SHOW)
		 $i=$i+1
		 Next
   ExitLoop
 EndSelect
 WEnd
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
Последний тег
Код:
[autoit]
замени на [/autoit] :smile:
 

Ksaan

Знающий
Сообщения
207
Репутация
15
А ошибка случаем не?
Код:
Array variable has incorrect number of subscripts or subscript dimension range exceeded
просто я не совсем понял смысл данного скрипта, но на первый взгляд у тебя идет превышение $k в массиве.
 
Автор
А

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
нет, ошибка именно WinActivate(WinGetHandle($aList[$k][1]))
WinActivate(WinGetHandle(^ ERROR..... причем на третьем проходе цикла
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Александр_,
А зачем Вы пытаетесь получить дескриптор из дескриптора?
 
Автор
А

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
потому что если обращаться к элементу массива, то почему-то обращение к окнам не получается


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

получается другая ошибка
WinActivate($aList[$k][1]))
WinActivate($aList[$k][1])^ ERROR
хотя казалось бы, возвращаю дискриптор


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

И еще интересный факт, если я не скрываю окна, а сворачиваю, то все работает как нужно,. Если же скрываю, то снова показать могу только 2 :stars: :scratch:
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Александр_ [?]
Ошибка в лишней скобке

все работает как нужно
Если б ещё было понятно "как нужно"...

Вот попробуйте (если правильно понял). Ctrl + PgUp/PgDn : предыдущее следующее окно, Ctrl + Home : обновление списка окон
Код:
#include <Misc.au3>

Opt("WinWaitDelay", 10)

HotKeySet("^{PGDN}", "_Next")
HotKeySet("^{PGUP}", "_Prev")
HotKeySet("^{HOME}", "_Refresh")
HotKeySet("{ESC}", "_Exit")

Global $aList = WinList('[title:Документ]')
Global $iIndex = 1

While Sleep(100)
WEnd

Func _Next()
  If Not $aList[0][0] Then Return
  WinSetState($aList[$iIndex][1], "", @SW_HIDE)
  $iIndex += 1
  If $iIndex > $aList[0][0] Then $iIndex = 1
  WinSetState($aList[$iIndex][1], "", @SW_SHOW)
  WinActivate($aList[$iIndex][1])
EndFunc

Func _Prev()
  If Not $aList[0][0] Then Return
  WinSetState($aList[$iIndex][1], "", @SW_HIDE)
  $iIndex -= 1
  If $iIndex < 1 Then $iIndex = $aList[0][0]
  WinSetState($aList[$iIndex][1], "", @SW_SHOW)
  WinActivate($aList[$iIndex][1])
EndFunc

Func _Refresh()
  $aList = WinList('[title:Документ]')
  $iIndex = 1
EndFunc

Func _Exit()
  If MsgBox(32 + 1, 'Внимание!', 'Хотите прекратить работу?') = 1 Then
    For $i = 1 To $aList[0][0]
      WinSetState($aList[$i][1], "", @SW_SHOW)
      WinActivate($aList[$i][1])
    Next
    Exit
  EndIf
EndFunc
 
Верх