26

Re: AHK: Замена "Window Spy"

ypppu
Спасибо за новый статус!

Добавил сабж в коллекцию.
Надеюсь что смогу быть ещё чем-то полезен.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

27 (изменено: Irbis, 2013-05-27 20:04:23)

Re: AHK: Замена "Window Spy"

Бегло ознакомился со скриптом, возник пока что 1 вопрос и 1 предложение:

Во-первых, странно отображает текст некоторых контролов в Notepad++
http://savepic.net/3762625m.png
Полагаю, эти иероглифы соответствуют тексту редактируемого скрипта, только в непонятной кодировке.
AhkSpy сообщает, по поводу этого контрола, что Class NN: Scintilla1
Также информация в client area size, что означают эти многоциферные выражентия, так и не понял.

Во-вторых, конструктивное предложение по поводу длиннющей "портянки" хоткеев с 515 по 830 строки
(Идея взята отсюда) :
В секцию автовыполнения, с 20й строки добавить:

XKeys = 
(Join|
vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|vk43|vk44|vk45|vk46
vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57
vk58|vk59|vk5A|vkC1|vkC2|vkDF|vkE1|vkE2|vkE6|vkE3|vkF0|vkF2|vkF3|vkF5|vkF6|vkF7|vkF8
vkF9|vkFE|vk2B|vk6C|0|1|2|3|4|5|6|7|8|9
F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24
AppsKey|Backspace|CapsLock|Del|Down|End|Enter|Esc|Home|Left|Pause|PgDn|PgUp|PrintScreen
Right|ScrollLock|Space|Tab|Up|Break|CtrlBreak|Help|Insert|Sleep|Numlock|Numpad0|Numpad1
Numpad2|Numpad3|Numpad4|Numpad5|Numpad6|Numpad7|Numpad8|Numpad9|NumpadAdd|NumpadClear
NumpadDel|NumpadDiv|NumpadDot|NumpadDown|NumpadEnd|NumpadEnter|NumpadHome|NumpadIns|NumpadLeft
NumpadMult|NumpadPgDn|NumpadPgUp|NumpadRight|NumpadSub|NumpadUp|Browser_Back|Browser_Favorites
Browser_Forward|Browser_Home|Browser_Refresh|Browser_Search|Browser_Stop|Launch_App1|Launch_App2
Launch_Mail|Launch_Media|Media_Next|Media_Play_Pause|Media_Prev|Media_Stop|Volume_Down
Volume_Mute|Volume_Up|MButton|WheelUp|WheelDown|WheelLeft|WheelRight|XButton1|XButton2
)
Loop Parse, XKeys, |
   HotKey %A_LoopField%, ShowKey
Loop, % 4*32
   Hotkey % ((A_Index-1)//32)+1 . "Joy" . Mod(A_Index-1,32)+1, ShowKey

А вместо 515-830 строк - подпрограмму ShowKey:

ShowKey:
    if InStr(A_ThisHotkey, "vk")
    {
       HF_Hotkey := HF_VkCode := A_ThisHotkey
       HF_ThisKey := HF_KeyName := GetKeyName(A_ThisHotkey)
       SetFormat, IntegerFast, H
       HF_SCCode := "sc" SubStr(GetKeySC(HF_VkCode),3)
    }
    Else
    {
       SetFormat, IntegerFast, H
       HF_VkCode := "vk" SubStr(GetKeyVK(A_ThisHotkey),3)
       HF_SCCode := "sc" SubStr(GetKeySC(A_ThisHotkey),3), (HF_SCCode = "sc0") ? HF_SCCode := ""
       HF_Hotkey := HF_ThisKey := HF_KeyName := A_ThisHotkey
    }
    if InStr(A_ThisHotkey, "Joy")
    {
       HF_VkCode := HF_SCCode := ""
       HF_Hotkey := HF_ThisKey := HF_KeyName := A_ThisHotkey
    }
    Gosub, HF_Write
Return

Итого получилось: AhkSpy.ahk

+ Off

Честно говоря, задумка скрипта неплохая, но идти по пути... хм...  экстенсивной разработки программ - идея не самая лучшая

28 (изменено: serzh82saratov, 2013-05-28 16:17:33)

Re: AHK: Замена "Window Spy"

Irbis пишет:

Полагаю, эти иероглифы соответствуют тексту редактируемого скрипта, только в непонятной кодировке.

Само собой. ControlGetText неможет правильно извлекать инфо из Scintilla. Потому я и написал что давайте развивать это направление. Если у вас есть код для извлечения инфо из такого контрола, то велкам. Хотя большого смысла в данном случае не вижу. Текст можно и так увидеть и скопировать.

Irbis пишет:

Также информация в client area size, что означают эти многоциферные выражентия, так и не понял.

Что именно тут не ясно?:

Client area size: width 1680 height 975     top 36 left 9 bottom 9 right 9
Irbis пишет:

конструктивное предложение по поводу длиннющей "портянки" хоткеев

Не поверите подобный вашему вариант был первым пришедшим в голову, в аттаче его черновой недопиленый вариант. Перебор всех хоткеев увеличивает время старта. Непосредственное указание хоткеев на него невлияет. То что я прописал их в виде меток, это правильное решение, о чем также сказано в справке к команде Hotkey:

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

Экстенсивности тут нет, так как увеличение количества строк ведёт к улучшению быстродействия. Индусского вы ничего не выделили, т.к. невыявили нарушения синтаксиса или явно излишние действия. Если сокращение количества строк в ущерб быстродействию по вашему правильно, то увольте.
В коде есть ссылка на библиотеку http://forum.script-coding.com/viewtopi … 765#p69765. По ссылке к библиотеке вы можете увидеть также её вариант на основе SetWindowsHookEx. Он короче (так как в нём не указываются кнопки клавиатуры ввиде хоткеев) и определяет все кнопки клавиатуры, но в данном случае не использован из-за сильного притормаживания в данном контексте. 
Если у вас есть предложение по допиливанию данной библиотеки, или принципиально другой подход к решению задачи, то напишите в соответствующей теме.

Post's attachments

HotkeyUserFunc.ahk 10.88 kb, 4 downloads since 2013-05-28 

You don't have the permssions to download the attachments of this post.
По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

29 (изменено: creature.ws, 2013-05-28 16:40:45)

Re: AHK: Замена "Window Spy"

Разница в быстродействии незначительная. Код, который помещается на одном экране — всегда лучше многоэкранной портянки. Публичный код прежде всего должен быть понятен, быстродействие на втором месте (если речь о разработке, созданной по собственной инициативе, «для сообщества»).
Предложение в сообщении #28 здравое. Отсылки к «библиотеке» неуместны.

serzh82saratov у меня предложение — пишите код как пожелаете, размещайте что угодно в коллекции, но добавляйте «дисклеймер» по типу «пользуйтесь этим как законченным приложением, не пытайтесь использовать код скрипта как руководство к скриптописанию»

30

Re: AHK: Замена "Window Spy"

Публичный код прежде всего должен быть понятен

А что непонятного?

быстродействие на втором месте.

Сомнительное утверждение. Аргументы есть?

Предложение в сообщении #28 здравое.

Ну и... в чём здравое? Где хотя-бы комментарий к:

Создание горячих клавиш по принципу метки, ограниченной двоеточиями, более предпочтительно

опровергающий это утверждение из справки?

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

31

Re: AHK: Замена "Window Spy"

А что непонятного?

Отличный диалог. Вы, как обычно, начинаете пустой спор. Продолжайте, не буду вам мешать.

32 (изменено: serzh82saratov, 2013-05-28 16:51:12)

Re: AHK: Замена "Window Spy"

не пытайтесь использовать код скрипта как руководство к скриптописанию

Вот это очень интересно! Где я такое утверждал???

по типу «пользуйтесь этим как законченным приложением,

Я и написал законченное приложение, используя код написанный для быстродействия в первую очередь, а не для того чтоб он у кого-то куда-то умещался.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

33 (изменено: serzh82saratov, 2013-05-28 17:08:18)

Re: AHK: Замена "Window Spy"

creature.ws
Вы считаете отличным диалогом - высказывание неаргументированных утверждений общими фразами?

Вы, как обычно, начинаете пустой спор.

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

34

Re: AHK: Замена "Window Spy"

creature.ws пишет:

(если речь о разработке, созданной по собственной инициативе, «для сообщества»).

Первое предложение топика пишет:

Сделал себе на замену ... бла бла бла ... простой скрипт, может кому подойдёт.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

35 (изменено: Irbis, 2013-05-28 18:49:30)

Re: AHK: Замена "Window Spy"

serzh82saratov пишет:

Что именно тут не ясно?:

Client area size: width 1680 height 975     top 36 left 9 bottom 9 right 9

Похоже, у кого-то из нас запущенный случай искаженного восприятия реальности - я же привел скриншот, на котором параметры Client area size, мягко говоря, трудно интерпретировать как нормальные для существующих на данный момент разрешений дисплеев. Возможно, дело в том, что я использую АНК 64-битную версию

По другим пунктам от комментариев воздержусь, причину (если вам будет угодно) придумайте сами.

36

Re: AHK: Замена "Window Spy"

Похоже, у кого-то из нас запущенный случай искаженного восприятия реальности - я же привел скриншот, на котором параметры Client area size, мягко говоря, трудно интерпретировать как нормальные для существующих на данный момент разрешений дисплеев.

Ну зачем же так откровенно грубить? У меня картинки отключены из-за мобильного интернета, и я просто незаметил её присутствие в посте. Посмотрев на неё конечно всё очевидно. Вы бы тоже могли догадатся, т.к. я привёл текст в котором другие цифры. Или хотя-бы переспросить, в таком очевидном случае.

Возможно, дело в том, что я использую АНК 64-битную версию

Переделайте функции GetClientSize и GetClientPos.

По другим пунктам от комментариев воздержусь


Типичное поведение человека которому нечего сказать, и он пытается всех убедить в невменяемости собеседника, что всегда намного проще, и обычно на ура поддерживается остальными наблюдателями, и всем доставляет ЛОЛов.

причину (если вам будет угодно) придумайте сами.


Думаю как и в случае с предыдущим оратором, "за отсутствием вменяемых аргументов своих утверждений".


Давайте перепишем рабочий код чтобы он хорошо и продвинуто смотрелся у меня в блокноте, и пускай будет чуть медленнее и останутся теже самые функции, зато уберём хвостик с самого конца кода который не даёт спокойно спать. А завтра скажем что надо ещё что-то  исправить, просто потому-что вот так надо и с этим кто-то ещё согласен.
А ТС нехороший человек, потому-что не идёт у нас поводу, и за это его вопросы мы будем байкотировать

Я под этим неподписываюсь.

И у команды хоткей есть недостаток. У меня в другом скрипте есть глобальные гор. клавиши. При запуске вашего кода эти кнопки неопределяются в АНКSpy.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

37

Re: AHK: Замена "Window Spy"

Переделайте функции GetClientSize и GetClientPos.

Имхо этим должен заниматься автор программы.
Так как это его детище.

38

Re: AHK: Замена "Window Spy"

Malcev пишет:

Имхо этим должен заниматься автор программы.
Так как это его детище.

Я думаю, автор должен только указать, в какой среде работает его программа. Приспосабливать её ко всем существующим вариантам он не обязан.

39

Re: AHK: Замена "Window Spy"

Я имел в виду "должен != обязан", а "должен = правильнее".
Переформулирую.
Этим правильнее заниматься автору программы.
Так как это его детище.

40

Re: AHK: Замена "Window Spy"

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

41 (изменено: serzh82saratov, 2013-05-31 23:52:55)

Re: AHK: Замена "Window Spy"

v1.67
+ Добавлена инфо для контрола msctls_updown32

Проблема с msctls_updown32: неопределяется максимум диапазона.
Код:


GetInfo_msctls_updown:
    SendMessage, 0x0400+102,,,, ahk_id %MouseControlID%        ;     UDM_GETRANGE
    UDM_GETRANGE := ErrorLevel
    SendMessage, 0x400+114,,,, ahk_id %MouseControlID%        ;     UDM_GETPOS32
    GetInfoCtrl := "Level: " ErrorLevel "     ||     Range:   min " UDM_GETRANGE >> 16 "   max No support" 
    MouseControlNN_Sub := "msctls_updown32" 
    Return

Проблема с msctls_trackbar32: невсегда определяется стиль TBS_REVERSED (параметр Invert для Slider в АНК) например на контролах окон AutoHotkey. К примеру этот стиль есть на ползунке микшера громкости в Win-7, и определяется верно.
Код:


GetInfo_msctls_trackbar:
    SendMessage, 0x0400+1,,,, ahk_id %MouseControlID%        ;     TBM_GETRANGEMIN
    TBM_GETRANGEMIN := ErrorLevel
    SendMessage, 0x0400+2,,,, ahk_id %MouseControlID%        ;     TBM_GETRANGEMAX
    TBM_GETRANGEMAX := ErrorLevel
    SendMessage, 0x0400,,,, ahk_id %MouseControlID%            ;     TBM_GETPOS
    (ControlGetStyle & 0x0200)    ? (TBM_GETPOS := TBM_GETRANGEMAX - (ErrorLevel - TBM_GETRANGEMIN) , TBS_REVERSED := "Yes")
                                : (TBM_GETPOS := ErrorLevel , TBS_REVERSED := "No")
    GetInfoCtrl := "Level: " TBM_GETPOS "     ||     Invert style: " TBS_REVERSED
    . "`nRange:   min " TBM_GETRANGEMIN "   max " TBM_GETRANGEMAX
    MouseControlNN_Sub := "msctls_trackbar32"   
    Return

Gui для опытов:


Gui, Add, Slider, w100 h100 Invert Range22-333, 44
Gui, Add, Slider, w100 h100 Range22-333, 44
Gui, Add, UpDown, -16  Range22-55 vG2_MoveKeyList w100 h100
GuiControl, Move, G2_MoveKeyList ,  w100 h100 
Gui, show 
return
По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

42 (изменено: serzh82saratov, 2013-06-03 09:51:39)

Re: AHK: Замена "Window Spy"

AhkSpy v1.69
+ Функции GetClientSize и GetClientPos должны работать и на AutoHotkey х64 бит (спасибо YMP).
+ В переменные настроек добавлена "SpotActiveWin". В режиме "Window" можно определять данные не активного окна, а окна находящегося под курсором. Полезно для окон меню, тултипов, окон с запретом активации, или получения всех параметров дочерних окон. А также может кому-то показатся просто удобным.
+ Запрещено уменьшать окно менее, чем до размеров при старте.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

43 (изменено: serzh82saratov, 2013-06-03 09:53:39)

Re: AHK: Замена "Window Spy"

AhkSpy v1.70

+ Несколько доработок

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

44

Re: AHK: Замена "Window Spy"

AhkSpy v1.71
+ Кнопки клавиатуры определяются с помощью WinApi (т.е. любые кнопки). Кнопки мыши и джойстиков, как и ранее, с помощью горячих клавиш.

. Было желание извлекать из SysTabControl список всех пунктов, но метода ненашёл.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

45

Re: AHK: Замена "Window Spy"

serzh82saratov пишет:

+ Функции GetClientSize и GetClientPos должны работать и на AutoHotkey х64 бит (спасибо YMP).

у вас там

GetClientSize(hwnd, ByRef RealWidth, ByRef RealHeight)
{
    VarSetCapacity(rcClient, 16, 0)
    DllCall("user32\GetClientRect","ptr", hwnd ,"ptr",&rcClient)
    RealWidth := NumGet(rcClient, 8, "int"), RealHeight := NumGet(rcClient, 12, "int")
}

эта функция универсальна ?

46

Re: AHK: Замена "Window Spy"

эта функция универсальна ?

Я проверял, универсальна. У вас неработает?

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

47 (изменено: Malcev, 2013-06-08 18:28:31)

Re: AHK: Замена "Window Spy"

Предложения по доработке.
1) Исправить - При переключении из Mouse%Control в Window и обратно - скрипт изменяет координаты мыши.
2) Добавить - При двойном нажатии правой кнопки мыши в окне скрипта информация копируется и замораживается до повторного двойного нажатия.
Это будет удобно если надо копировать и вставлять несколько значений.
3) От удаления пробелов при нажатии правой кнопки мыши сомнительная польза, так как сам только, что напоролся на контрол в котором текст начинался с пробела.

48 (изменено: Hydrogenium, 2013-06-08 18:51:19)

Re: AHK: Замена "Window Spy"

Malcev пишет:

так как сам только, что напоролся на контрол в котором текст начинался с пробела.

надо всегда удалять слева и справа пробелы

т.е.
" Test win " -> "Test win"

хз правда какая функция это делает ))

49

Re: AHK: Замена "Window Spy"

Не надо, так как

напоролся на контрол в котором текст начинался с пробела.

хз правда какая функция это делает ))

RButton::
    Copy := Clipboard := RegExReplace(Copy, "(^\s+|\s+$|\R?" D "+\R?)")

50 (изменено: serzh82saratov, 2013-10-24 02:12:48)

Re: AHK: Замена "Window Spy"

Malcev пишет:

1) Исправить - При переключении из Mouse%Control в Window и обратно - скрипт изменяет координаты мыши.

Потому что деактивируется окно. И собственно зачем их неизменять?

Malcev пишет:

2) Добавить - При двойном нажатии правой кнопки мыши в окне скрипта информация копируется и замораживается до повторного двойного нажатия.

Вы имеете в виду паузу?

Malcev пишет:

3) От удаления пробелов при нажатии правой кнопки мыши сомнительная польза, так как сам только, что напоролся на контрол в котором текст начинался с пробела.

Ну пробелы по бокам видно когда обводишь. Польза в том чтоб не прицеливатся при обводке, и выделении двойным щелчком. Можете выделять так:
http://savepic.org/3552897.png
На всех тут неугодишь. Вы можете копировать также как и в Window Spy.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).