Что нового

Au3Info не видит Title окна

Bodred

Новичок
Сообщения
4
Репутация
0
Всем привет
Используя скриншотер Jet Screenshot столкнулся с проблемой
Отправляя скрин на сервер, Jet Screenshot выводит 2 алерта
- об ходе отправки
- об успешности отправки
Но почему-то Au3Info – не видит в этих окнах Title а Class одинаковый.
А без этого как попросить AutoIt дождаться появления алерата №2, чтобы потом скопировать ссылку на скрин в блокнот? Подскажите…
Окно 1
Код:
>>>> Window <<<<
Title:	
Class:	TJvFormDesktopAlert
Position:	1037, 644
Size:	329, 76
Style:	0x96000000
ExStyle:	0x00090008
Handle:	0x00031824

>>>> Control <<<<
Class:	
Instance:	
ClassnameNN:	
Name:	
Advanced (Class):	
ID:	
Text:	
Position:	
Size:	
ControlClick Coords:	
Style:	
ExStyle:	
Handle:	

>>>> Mouse <<<<
Position:	1102, 662
Cursor ID:	0
Color:	0x000064

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<


>>>> Hidden Text <<<<

Окно 2
Код:
>>>> Window <<<<
Title:	
Class:	TJvFormDesktopAlert
Position:	1037, 501
Size:	329, 143
Style:	0x96000000
ExStyle:	0x00090000
Handle:	0x000D0F2A

>>>> Control <<<<
Class:	
Instance:	
ClassnameNN:	
Name:	
Advanced (Class):	
ID:	
Text:	
Position:	
Size:	
ControlClick Coords:	
Style:	
ExStyle:	
Handle:	

>>>> Mouse <<<<
Position:	1235, 527
Cursor ID:	0
Color:	0xFFFFFF

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<


>>>> Hidden Text <<<<
 

Вложения

  • 1.png
    1.png
    7.3 КБ · Просмотры: 11
  • 2.png
    2.png
    25.6 КБ · Просмотры: 12
A

Alofa

Гость
Ну что же, "Class" вы уже знаете - осталось дождаться окна данного класса с нужной ссылкой.
Я думаю вам Это поможет.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Bodred
1. Обычно у таких окон размеры не меняются. Поэтому можно ждать окно с нужными размерами. Причём в вашем случае достаточно только высоты H
Код:
WinWait("[CLASS:TJvFormDesktopAlert;W:329;H:143]")


2. Можно ждать появления второго окна перечисляя все окна заданного класса
Код:
While Sleep(100)
  If WinList("[CLASS:TJvFormDesktopAlert]")[0][0] = 2 Then ExitLoop
WEnd


3. Можно дождаться первого окна и ждать второго по условию несовпадения дескриптора с первым
Код:
$hWnd = WinWait("[CLASS:TJvFormDesktopAlert]")
While WinWait("[CLASS:TJvFormDesktopAlert]") = $hWnd
WEnd
 
A

Alofa

Гость
OffTopic:
... а в итоге автор все равно сталкнется с проблемой выудить нужную ссылку из окна.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OffTopic:
Alofa
выудить нужную ссылку из окна
Там в окне английским по белому написано, что ссылка скопирована в буфер обмена. Значит получить её можно через ClipGet().



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

Bodred
А если у вас первое окно закрывается перед появлением второго, то можно так
Код:
; ожидание появления и закрытия первого окна
WinWaitClose(WinWait("[CLASS:TJvFormDesktopAlert]"))
; ожидание второго окна
WinWait("[CLASS:TJvFormDesktopAlert]")
 
Автор
B

Bodred

Новичок
Сообщения
4
Репутация
0
InnI

Где-то я прокололся, не пойму где .
Используя Ваши варианты - сталкиваюсь с двумя проблемами:
- или скрипт не дожидается алеротов Jet Screenshot, так как отправляет в блокнот то что в данный момент в буфере находится (я как раз менял код через буфер обмена)
- или вообще не отправляет, попросту не активируя окно блокнота.
Позвольте отправлю Вам:то что написал
Код:
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WinAPIEx.au3>
#include "UIAutomate.au3"


;~ кликаем по  часам, что бы зафиксировать момент скриншота.
;~ ничего интереснее  простого клика мышкой не придумал  :)
MouseMove(1313,743)
MouseDown("left")
MouseUp("left")
;~ Ждем когда появится окно врменни, чтобы зафикстировать момент скриншота.
WinWaitActive("[CLASS:ClockFlyoutWindow]")

;~ связвл   отправку скриншота с Cntrl+F1
Send("^{f1}")

;~ жду алерты от программы Jet Screenshot
WinWait("[CLASS:TJvFormDesktopAlert;W:329;H:143]")

;~ активирую окно блокнта для получения ссылки
WinActivate("newfile.txt - AkelPad")

;~ отправляю через Cntrl + v ссылку на скриншот в окно блокнота (переведя раскладку на английский)
_FixAccelHotKeyLayout()
Send("^v")
Func _FixAccelHotKeyLayout()
    Static $iKbrdLayout, $aKbrdLayouts

    If Execute('@exitMethod') <> '' Then
        Local $iUnLoad = 1

        For $i = 1 To $aKbrdLayouts[0]
            If Hex($iKbrdLayout) = Hex('0x' & StringRight($aKbrdLayouts[$i], 4)) Then
                $iUnLoad = 0
                ExitLoop
            EndIf
        Next

        If $iUnLoad Then
            _WinAPI_UnloadKeyboardLayout($iKbrdLayout)
        EndIf

        Return
    EndIf

    $iKbrdLayout = 0x0409
    $aKbrdLayouts = _WinAPI_GetKeyboardLayoutList()
    _WinAPI_LoadKeyboardLayout($iKbrdLayout, $KLF_ACTIVATE)

    OnAutoItExitRegister('_FixAccelHotKeyLayout')
EndFunc

И то что выходит:
Код:
;~ Результаты :

;~ 1 Результат
WinWait("[CLASS:TJvFormDesktopAlert;W:329;H:143]")
;~ Не дожидаясь отправки скрина, отправляет  в блокнот
;~ WinWait("[CLASS:TJvFormDesktopAlert;W:329;H:143]")

;~ 2 Результат:
While Sleep(100)
  If WinList("[CLASS:TJvFormDesktopAlert]")[0][0] = 2 Then ExitLoop
WEnd
;~ Ничего не отправляет в блокнот, окно просто не активируется  - ждет чего-то...

;~ 3 Результат
$hWnd = WinWait("[CLASS:TJvFormDesktopAlert]")
While WinWait("[CLASS:TJvFormDesktopAlert]") = $hWnd
WEnd
;~ Не дожидаясь отправки скрина, отправляет  в блокнот
;~ $hWnd = WinWait("[CLASS:TJvFormDesktopAlert]")
;~ While WinWait("[CLASS:TJvFormDesktopAlert]") = $hWnd
;~ WEnd


;~ 4 Результат
WinWaitClose(WinWait("[CLASS:TJvFormDesktopAlert]"))
; ожидание второго окна
WinWait("[CLASS:TJvFormDesktopAlert]")

;~ Ничего не отправляет в блокнот, окно просто не активируется  - ждет чего-то...
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Bodred
зафиксировать момент скриншота
Для получения времени есть макросы
Код:
ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & @CRLF)


Не дожидаясь отправки скрина, отправляет в блокнот
Вероятно, у вас есть ещё скрытые окна. Попробуйте так
Код:
WinWaitActive("[CLASS:TJvFormDesktopAlert;W:329;H:143]")


Чтобы не переключать раскладку, в AkelPad можно вставить так
Код:
Send("+{ins}")
 
Верх