Что нового

Как зафиксировать форму GUI поверх всех окон

alexf3791

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

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Дополнительная кнопка в активном окне блокнота
Код:
#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
 
Автор
A

alexf3791

Новичок
Сообщения
5
Репутация
0
InnI, спасибо! Воспользовался советом, но не всё получается...
Код:
#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. Можно ли как-то это обойти?
 
Автор
A

alexf3791

Новичок
Сообщения
5
Репутация
0
Создаю форму, на ней кнопку, располагаю её поверх родной кнопки приложения, нажимаю её, открывается окно, далее мне надо эмулировать клик по кнопке в открывшемся окне.
Так вот, окно "Window_2" открывается нормально, а код почему-то не отрабатывает в нем нажатие кнопки. Почему так может быть?
ps Смысл скрипта в том, чтобы сократить кол-во нажатий до одного
Код:
#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
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Что-то не пойму как он у Вас с первого бесконечного цикла выходит и зачем нужен второй бесконечный цикл...
Может так нужно было ? :
Код:
#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]")
		WinActive("Window_2")
		WinWaitActive("Window_2")
		ControlClick("Window_2", "", "[CLASS:ThunderRT6UserControlDC; INSTANCE:23]")
		WinWaitClose("Window_2")
	EndIf
WEnd
 
Автор
A

alexf3791

Новичок
Сообщения
5
Репутация
0
Спасибо за подсказку, работает как надо )
Один вопрос остался, если я сворачиваю приложение, кнопка продолжает висеть, как это исправить?
Добавил условие
Код:
If  Not WinActive ("Application") Then
GUISetState(@SW_HIDE)
Else
GUISetState(@SW_SHOW)
EndIf


Не помогло (
 
Верх