1 (изменено: p.polena, 2017-04-25 18:05:54)

Тема: AHK: Активировать дочернее окно при наведении курсора

Здравствуйте. Есть т.н. "браузер", основное окно которого активируется/деактививуется при наведении/отведении курсора (настойка Windows). В основном окне имеется "внутреннее" окно, которое активируется (после отведения курсора из окна "браузера") только после клика внутри его. Задача: активировать "внутренне" окно при наведении курсора. Имя окна меняется. Постоянный Class NN:  Chrome_RenderWidgetHostHWND1 в Control. Пока использую WinWaitActive (основное окно) + Click (область внутреннего окна), что наверняка неправильно. Прошу помощи в создании AHK. Пояснения см. в рис.

Post's attachments

1.jpg 101.29 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2 (изменено: svoboden, 2017-04-25 19:41:26)

Re: AHK: Активировать дочернее окно при наведении курсора

Чтобы узнать имя ClassnameNN под курсором мыши, то так:

MouseGetPos, OutputVarX, OutputVarY, OutputVarWin, OutputVarControl
MsgBox % OutputVarControl

3

Re: AHK: Активировать дочернее окно при наведении курсора

svoboden, непонятно, как первокласснику интегралы. Т.е. скрипт опрашивает ClassnameNN под курсором, и при появлении Chrome_RenderWidgetHostHWND1 должен активировать соответствующее окно? Или как?

4

Re: AHK: Активировать дочернее окно при наведении курсора

Скорее всего окно можно сделать активным без щелчка по нему. Для таких целей существует команда WinActivate. Но она требует указать имя окна, либо имя класса (Window Class), либо идентификатор окна (ID/HWND). Эту информацию можно выудить при помощи программы Active Window Info (Window Spy), которая идёт в комплекте с AutoHotkey. Или AhkSpy от serzh82saratov.

5 (изменено: svoboden, 2017-04-25 23:42:38)

Re: AHK: Активировать дочернее окно при наведении курсора

p.polena, да простит меня teadrinker, вот код по F11 включается и отключается, не забудь выключить при выходе из скрипта.


Модератор: Не  дублируйте код, пользуйтесь url-тегом, тогда и просить прощения будет не за что. Исправлено.

6

Re: AHK: Активировать дочернее окно при наведении курсора

svoboden, это не совсем то, что нужно. Попробую ещё объяснить. Мне нужна имитация клика при наведении в указанную на рисунке область ("внутреннее окно"). После этого основное окно выводится на передний план, а "внутренним" можно управлять. Т.е. прокручивать СКМ и т.д. Без клика оно не активно, даже если основное активно и на переднем плане.

Post's attachments

1.jpg 336.28 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

7 (изменено: svoboden, 2017-04-26 07:05:55)

Re: AHK: Активировать дочернее окно при наведении курсора

Так:

loop {
MouseGetPos, OutputVarX, OutputVarY, OutputVarWin, OutputVarControl
if OutputVarControl = Chrome_RenderWidgetHostHWND1
Click
Sleep 10
}
return

8 (изменено: Malcev, 2017-04-26 07:02:42)

Re: AHK: Активировать дочернее окно при наведении курсора

p.polena, не понимаю, что вы хотите добиться от мышки, но добиться активирования внутреннего окна, после активирования внешнего можно так:

window := "blah-blah"
class := "blah-blah"

loop
{
   WinWaitActive, % window
   WinGet, ControlList, ControlListHwnd
   Loop, Parse, ControlList, `n
   {
      WinGetClass, ControlClass, ahk_id %A_Loopfield%
      If (ControlClass = class)
      {
         WinActivate, ahk_id %A_Loopfield%
         WinWaitActive, ahk_id %A_Loopfield%
         break
      }
   }
}

9

Re: AHK: Активировать дочернее окно при наведении курсора

svoboden, почти так. Только курсор постоянно долбит в окне и кликает куда не надо, если на ссылку попадает. Как исправить?

10

Re: AHK: Активировать дочернее окно при наведении курсора

p.polena

MainWinClass = Chrome_WidgetWin_1
ControlClass = Chrome_RenderWidgetHostHWND1

Loop {
   If WinActive("ahk_class " . MainWinClass) {
      MouseGetPos,,,,  ControlM
      ControlGetFocus, ControlF, A
      If ControlM  = %ControlClass%
      If ControlF != %ControlClass%
       ControlFocus, %ControlClass%, A
   }
   Sleep, 10
}

11 (изменено: p.polena, 2017-04-26 19:01:44)

Re: AHK: Активировать дочернее окно при наведении курсора

Flasher, увы...
О! Так работает, как мне нужно

+ открыть спойлер
MainWinClass = TfmMain
ControlClass = Chrome_RenderWidgetHostHWND1

Loop {
   If WinActive("ahk_class " . MainWinClass) {
      MouseGetPos,,,,  ControlM
      ControlGetFocus, ControlF, A
      If ControlM  = %ControlClass%
      If ControlF != %ControlClass%
       ControlFocus, %ControlClass%, A
   }
   Sleep, 10
}

Всем огромное спасибо.

12

Re: AHK: Активировать дочернее окно при наведении курсора

p.polena
Ну, я же не знал, какой класс у вашего браузера, поэтому взял от обычного Хрома.

13 (изменено: svoboden, 2017-06-17 12:16:19)

Re: AHK: Активировать дочернее окно при наведении курсора

Flasher.
Так я не дублировал ничего, я код немного изменил, подумал, что так понятней будет человеку, а ссылку, я сперва оставил на страницу, только потом передумал.

14

Re: AHK: Активировать дочернее окно при наведении курсора

svoboden
Сравнивал внимательно, не увидел разницы.
Впрочем, мелкую правку в чужом коде не проблема описать без псевдодублирования.