Автор Тема: Как зафиксировать форму GUI поверх всех окон  (Прочитано 490 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн alexf3791 [?]

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Доброго дня )
Подскажите, возможно ли решить следующую задачу:
Хотелось бы, чтобы при запуске стороннего приложения  поверх интерфейса всплывала зафиксированная на одном месте кнопка из формы GUI, по нажатию на которую будет производиться определенное действие в этом приложении. То есть, как бы дополнить интерфейс...
Насколько сложно это сделать новичку? Можете помочь? )

Русское сообщество AutoIt

Как зафиксировать форму GUI поверх всех окон
« Отправлен: Май 05, 2017, 15:12:08 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3294
  • Репутация: 864
    • Награды
  • Версия AutoIt: 3.3.14.0
Дополнительная кнопка в активном окне блокнота
Код: AutoIt [Выделить]
#include <WindowsConstants.au3>

$GUI = GUICreate("", 50, 30, 50, 50, $WS_POPUP, $WS_EX_TOOLWINDOW)
$Btn = GUICtrlCreateButton("Button", 0, 0, 50, 30)
GUISetState()

While 1
  $Pos = WinGetPos("[class:Notepad]")
  If @error Then
    GUISetState(@SW_HIDE)
  Else
    GUISetState(@SW_SHOW)
    WinMove($GUI, "", $Pos[0] + 150, $Pos[1] + 150)
    WinSetOnTop($GUI, "", WinActive("[class:Notepad]") ? 1 : 0)
  EndIf
  If GUIGetMsg() = $Btn Then ControlSend("[class:Notepad]", "", "Edit1", "Click ")
WEnd


Оффлайн alexf3791 [?]

  • Новичок
  • *
  • Сообщений: 4

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI, спасибо! Воспользовался советом, но не всё получается...
Код: AutoIt [Выделить]
#include <WindowsConstants.au3>

$GUI = GUICreate("", 100, 60, 50, 50, $WS_POPUP, $WS_EX_TOOLWINDOW)
$Btn = GUICtrlCreateButton("Button1", 0, 0, 100, 60)
GUISetState()
While 1
  $Pos = WinGetPos("Application1")
      If @error Then
GUISetState(@SW_HIDE)
  Else
    GUISetState(@SW_SHOW)
    WinMove($GUI, "", $Pos[0] + 900, $Pos[1] + 80)
    WinSetOnTop($GUI, "", WinActive("Application1) ? 1 : 0)
  EndIf
  If GUIGetMsg() = $Btn Then MouseClick("
left", 242, 104, 1, 1)
WEnd

В приложении должна открываться выпадающая менюшка, курсор перемещается в нужное место, но действие (нажатие ЛКМ) не происходит. Предполагаю, что в момент клика мыши активна форма GUI. Можно ли как-то это обойти?

Оффлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 1054
  • Репутация: 137
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0

Русское сообщество AutoIt

Re: Как зафиксировать форму GUI поверх всех окон
« Ответ #3 Отправлен: Май 09, 2017, 22:05:39 »

Оффлайн alexf3791 [?]

  • Новичок
  • *
  • Сообщений: 4

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Создаю форму, на ней кнопку, располагаю её поверх родной кнопки приложения, нажимаю её, открывается окно, далее мне надо эмулировать клик по кнопке в открывшемся окне. 
Так вот, окно "Window_2" открывается нормально, а код почему-то не отрабатывает в нем нажатие кнопки. Почему так может быть?
ps Смысл скрипта в том, чтобы сократить кол-во нажатий до одного
Код: AutoIt [Выделить]
#include <WindowsConstants.au3>

$GUI = GUICreate("", 100, 60, 50, 50, $WS_POPUP, $WS_EX_TOOLWINDOW)
$Btn = GUICtrlCreateButton("Button1", 0, 0, 100, 60)
GUISetState()
While 1
  $Pos = WinGetPos("Application")
      If @error Then
GUISetState(@SW_HIDE)
  Else
    GUISetState(@SW_SHOW)
    WinMove($GUI, "", $Pos[0] + 107, $Pos[1] + 31)
    WinSetOnTop($GUI, "", 1)
  EndIf
   If GUIGetMsg() = $Btn Then ControlClick("Application", "", "[CLASS:ThunderRT6UserControlDC; INSTANCE:38]")
WEnd
while 1
WinActive("Window_2")
WinWaitActive("Window_2")
ControlClick("Window_2", "", "[CLASS:ThunderRT6UserControlDC; INSTANCE:23]")
WinWaitClose("Window_2")
WEnd


Помечен как лучший ответ пользователем alexf3791 Отправлен Май 18, 2017, 13:00:44

Оффлайн ra4o [?]

  • Продвинутый
  • ***
  • Сообщений: 507
  • Репутация: 81
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Что-то не пойму как он у Вас с первого бесконечного цикла выходит и зачем нужен второй бесконечный цикл...
Может так нужно было ? :
(нажмите для показа/скрытия)
« Последнее редактирование: Май 15, 2017, 16:50:24 от ra4o »

Оффлайн alexf3791 [?]

  • Новичок
  • *
  • Сообщений: 4

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо за подсказку, работает как надо )
Один вопрос остался, если я сворачиваю приложение, кнопка продолжает висеть, как это исправить?
Добавил условие
Код: AutoIt [Выделить]

Не помогло (

Русское сообщество AutoIt

Re: Как зафиксировать форму GUI поверх всех окон
« Ответ #6 Отправлен: Май 22, 2017, 12:20:48 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
8 Ответов
5556 Просмотров
Последний ответ Июль 12, 2011, 14:20:03
от xlgrgrc
5 Ответов
12400 Просмотров
Последний ответ Апрель 29, 2010, 19:41:04
от gregaz
2 Ответов
4288 Просмотров
Последний ответ Декабрь 02, 2010, 20:53:06
от Can
8 Ответов
8493 Просмотров
Последний ответ Октябрь 22, 2011, 16:47:06
от agikon
5 Ответов
3628 Просмотров
Последний ответ Январь 06, 2013, 19:57:21
от madmasles
5 Ответов
3712 Просмотров
Последний ответ Сентябрь 26, 2013, 18:23:35
от MnM
0 Ответов
1448 Просмотров
Последний ответ Сентябрь 26, 2013, 17:35:09
от madmasles
2 Ответов
2043 Просмотров
Последний ответ Декабрь 04, 2013, 01:49:06
от AZJIO
5 Ответов
2369 Просмотров
Последний ответ Май 28, 2014, 18:07:59
от madmasles
1 Ответов
1508 Просмотров
Последний ответ Июль 07, 2015, 22:32:58
от InnI