1

Тема: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Можно ли добавить кнопку в окно калькулятора, например?
При нажатии на эту кнопку должна выполняться функция скрипта ahk, например, открывать еще один калькулятор.
Если нельзя средствами ahk (я по крайней мере не нашел), то можно ли сделать это как-то по-другому?

Сейчас единственным решением вижу, создание окна GUI поверх окна калькулятора.

2

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Не знаю как насчет добавить, а повесить свою функцию на существующую кнопку можно так, например (проверено на калькуляторе) :

MButton::  MouseGetPos,,, TargetWin, TargetControl
$LButton::
   MouseGetPos,,, CurentWin, CurrentControl
   if ((TargetWin == CurentWin) && (TargetControl == CurrentControl))
   {
     MsgBox,,, Своя программа,1
   }
   else Click down
return

LButton UP:: Click up

Выбор кнопки - средняя клавиша мыши

3

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Irbis пишет:

Не знаю как насчет добавить, а повесить свою функцию на существующую кнопку можно так, например (проверено на калькуляторе) :

MButton::  MouseGetPos,,, TargetWin, TargetControl
$LButton::
   MouseGetPos,,, CurentWin, CurrentControl
   if ((TargetWin == CurentWin) && (TargetControl == CurrentControl))
   {
     MsgBox,,, Своя программа,1
   }
   else Click down
return

LButton UP:: Click up

Выбор кнопки - средняя клавиша мыши

По-моему, это что-то новое. Стоит добавить в коллекцию.

4

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Сделано
http://forum.script-coding.com/viewtopic.php?id=6997

Заменить это понятно и легко. А вот именно надо добавить кнопки, а не использовать существующие. Это возможно?

5

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

А если у приложения контролы устроены не стандартно, что делать будете?

6

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Это другой вопрос. Будем считать, что контролы стандартные. Я привел пример калькулятора, там стандартные контролы. Мне надо туда добавить 3 своих кнопки.

7

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Можно увеличить свободное пространство окна,

WinMove, Калькулятор, , , , 800

затем создать своё окно GUI с прозрачным фоном с нужными кнопками и переместить его в свободное пространство. Тогда вопрос сводится к тому, как сделать, чтобы они не "разъехались" при перетаскивании.

Либо создать GUI-клон "Калькулятора", добавить в него свои кнопки. Окно "Калькулятора" сделать невидимым, информацию из него передавать в GUI при помощи ControlGet --> ControlSetText, а из GUI в него при помощи ControlSend.

8

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Да. О создании GUI поверх я писал в первом посте.
GUI клон не подходит, меня интересует именно добавление своих кнопок в окно.
Видимо прямого решения с добавлением кнопок нет.
В любом случае тема стала немного полезна, добавили один скрипт в коллекцию.

9

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Жаль, не могу посоветовать, как сделать динамическое изменение формы стандартного приложения, НО есть способ, как добавить элементы управления в  EXE файл:
Resource Hacker позволяет добавить любые кнопки, изменить размер формы и много еще чего

http://savepic.net/2602537.jpg

Самим приложением они не обрабатываются, но думаю и сами знаете, что с ними делать.  Надеюсь, это пригодится.

10

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Это уже интереснее и ближе к делу, но ковырять exe нет возможности.
Я хотел это сделать в окне AutoCAD, точнее в окне быстрого выбора.

11

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Один из вариантов и наверное самый простой, кроме того можно подгружать AutoHotkey.dll и создавать свои окна и контолы в чужом процессе, в том числе выполнять скрипты в отдельном потоке, но это уже отдельная тема.

VarSetCapacity(pt,8)
Gui, +Hwndhgui -Caption +ToolWindow
Gui, Margin,0,0
Gui, Add,Button,w36 h24 gbt1

z::
hParentWnd:=WinActive("A")
;MouseGetPos,,,,hParentWnd,2
DllCall("GetCursorPos","uint",&pt)
DllCall("ScreenToClient","uint",hParentWnd,"uint",&pt)
x:=NumGet(pt), y:=NumGet(pt,4)
DllCall("SetParent","uint",hgui,"uint",hParentWnd)
Gui, Show, x%x% y%y%
return

bt1:
MsgBox Своя кнопка
return

Esc::
ExitApp

12

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Браво! Все гениально просто... (выглядит)

13 (изменено: Drugoy, 2017-12-24 19:32:06)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1

14 (изменено: Drugoy, 2017-12-24 19:32:03)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1

15 (изменено: Irbis, 2012-04-09 09:50:34)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Drugoy пишет:

017: MsgBox,����

Посмотри тут, пункты 1 и 4.

Насчет http://forum.script-coding.com/viewtopic.php?id=6997 согласен, не для всех очевидно, что своя функция (в данном примере) вешается на кнопку средней клавишей мыши.
Надо бы расписать логику работы, составить блок-схему, заодним уж развернуто объяснить, как работает MouseGetPos,
для чего нужны хоткеи, что делает конструкция if...  else... И так - по каждому скрипту на 30+ страницах форума
В общем, RTFM и будет вам счастье.

16 (изменено: Drugoy, 2017-12-24 19:29:38)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1

17 (изменено: Drugoy, 2017-12-24 19:29:32)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1

18

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1. Можете используя ShellProc callback function отлавливать HSHELL_REDRAW и «перерисовывать окно» при перерисовке родительского окна.
2. Ответ в справке
3. GetCursorPos задавайте подобные вопросы как можно чаще.
5. Либо «ждите окно» постоянно, либо отслеживайте HSHELL_WINDOWACTIVATED.
7. Добавьте в упомянутом скрипте соответствующее окно в исключения.

Пожалуйста, а не могли бы вы показать на примере как это сделать?

Вопрос не мне задан, но: по ссылке достаточно документации с примерами.

Ваш бы энтузиазм в задавании вопросов да перенаправить на поиск ответов…

19

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

4. Да, уже было на форуме.
6. Конечно нет.

20 (изменено: Drugoy, 2017-12-24 19:29:27)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1

21 (изменено: creature.ws, 2012-08-23 17:41:33)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Нужный кусок кода можно найти в поиске по форуму. Вы не пробовали.

Размер резервируется под возвращаемое значение, если размер меньше нужного — данные не поместятся. Динамическое выделение памяти под переменные, автоматическая инициализация — свойство ahk, но не неопределённого множества функций которые можно вызвать используя DllCall.

Масса абстрактных примеров не нужна. Необходимая базовая информация есть в соответствующем разделе справки.
Вы просите «обзор по функция win API», к разделу форума отношения запрос не имеет msdn читайте.

22 (изменено: Drugoy, 2017-12-24 19:29:16)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1

23

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Давайте ссылку где вы прочитали, что VarSetCapacity() ограничивает длину, иначе ход ваших мыслей непонятен. Вроде бы сказано мной — «резервирует место» под данные в переменной.

Задавать вопросы и не читать ответы — плохой способ разобраться в чём-либо, выглядит как поиск внимания, а не ответов.
Возможно где-то любят цитировать msdn

24 (изменено: Александр_, 2012-08-23 19:24:27)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

Drugoy пишет:

Я правильно понял, что если сформулировать ваш ответ иначе, то в AutoHotkey принципиально отсутствует возможность добавления кнопок в существующие окна таким образом, чтобы это было именно добавление кнопок, а не эмуляция добавления, через создания собственных окон повех существующих?

Нужно чтобы код, обрабатывающий нажатие на эту кнопку, находился в адресном пространстве того же процесса, что и вся форма. Если предыдущее предложение непонятно, то считайте что кнопку добавить невозможно.

creature.ws пишет:

«резервирует место»

«выделяет память» .

25 (изменено: Drugoy, 2017-12-24 19:29:12)

Re: AHK: Добавить кнопку в произвольное окно (не ahk GUI)

1