1 (изменено: becauseim, 2018-12-13 01:32:31)

Тема: AHK: WinMenuSelectItem - Everything

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

+ открыть спойлер

http://puu.sh/CgwPh/3c4dc16e62.png

SetTitleMatchMode, 2
SetTimer, Everything, 100

Everything:
WinWait, Everything
WinMenuSelectItem, ahk_class EVERYTHING,, Search, Everything
WinWaitClose, Everything
return
Win10x64, AHK v1.1.25

2 (изменено: stealzy, 2018-12-12 23:04:21)

Re: AHK: WinMenuSelectItem - Everything

У некоторых программ команда WinMenuSelectItem не может вызывать меню, которое перед этим не было показано вручную. Если нажмете Search вручную, команда будет работать, пока не закроете окно.
Увы. А с некоторыми вообще не работает, например оснастка групповых политик gpedit.

SetTimer Everything, -1

Everything:
	WinWaitActive ahk_class EVERYTHING ahk_exe Everything.exe
	Send !s{LAlt} ; предварительный вызов меню "вручную", для создания меню
	WinMenuSelectItem ahk_class EVERYTHING ahk_exe Everything.exe,, 4&, 12&
	WinWaitClose ahk_class EVERYTHING
	SetTimer Everything, -1
Return

Название темы бессмысленное какое-то.

3

Re: AHK: WinMenuSelectItem - Everything

stealzy, спасибо! Работает. А почему строка SetTimer Everything, -1 повторяется?

Win10x64, AHK v1.1.25

4 (изменено: Malcev, 2018-12-13 14:53:20)

Re: AHK: WinMenuSelectItem - Everything

stealzy пишет:

У некоторых программ команда WinMenuSelectItem не может вызывать меню, которое перед этим не было показано вручную

Возможно такие и есть, но EVERYTHING к ним не относится.
Посылать !s{LAlt}  ненадёжно.

f11::
hwnd := WinExist("ahk_class EVERYTHING")
menu := DllCall("GetMenu", Ptr, hwnd)
SendMessage, 0x116, menu, 0,, ahk_id %hwnd% ; WM_INITMENU
menu := DllCall("GetSubMenu", Ptr, menu, Int, 3)
SendMessage, 0x117, menu, 3,, ahk_id %hwnd% ; WM_INITMENUPOPUP
WinMenuSelectItem, ahk_class EVERYTHING,, Search, Everything
return
stealzy пишет:

А с некоторыми вообще не работает, например оснастка групповых политик gpedit

Можно посмотреть, что отправляется через spy++ и попробовать повторить тоже самое.

5 (изменено: stealzy, 2018-12-13 21:11:05)

Re: AHK: WinMenuSelectItem - Everything

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

Malcev пишет:

Возможно такие и есть, но EVERYTHING к ним не относится.

Тогда зачем SendMessage посылаешь? За правильный способ спасибо.

Malcev пишет:

spy++

Уже пробовал.

6

Re: AHK: WinMenuSelectItem - Everything

stealzy пишет:

Тогда зачем SendMessage посылаешь?

Ну нам же не пришлось показывать меню, а обошлись лишь информированием окна, что пользователь кликнул на меню.
Хотя я не исключаю, что есть и такого уровня защита.

7

Re: AHK: WinMenuSelectItem - Everything

Ну на экране меню появиться не успевает в любом случае.
Кстати, отправка WM_INITMENUPOPUP оснастке тут же закрывает ее окно. Может и защита.

8 (изменено: svoboden, 2018-12-19 08:08:08)

Re: AHK: WinMenuSelectItem - Everything

А чего просто 0x111 нельзя отправить:

F12::
SendMessage, 0x111, 45000,,, ahk_class EVERYTHING
Return

9

Re: AHK: WinMenuSelectItem - Everything

Можно конечно, но в плане дальнейшей модификации скрипта удобней (наглядней) использовать WinMenuSelectItem.

10

Re: AHK: WinMenuSelectItem - Everything

В настройках программы есть фильтр, при открытии нового окна поиска. Options>Home> Filter: Everything.