Тема: AHK: Добавление элементов в чужое контекстное меню
Написал такой скрипт:
versionsMenu := "(^Вырезать`nКопировать`nВставить`nУдалить`nВыделить все`n"
. "|^&Отменить`n`n&Вырезать`n&Копировать`nВст&авить`n&Удалить`n`nВ&ыделить все)"
SetBatchLInes, -1
#Persistent
VarSetCapacity(sString, nSize := 70)
loop
{
while !(hwnd:= WinExist("ahk_class #32768")) or (listH ~= ":" hwnd ":")
DllCall("Sleep",Int,10)true and !WinExist("ahk_class #32768") and listH and (listH := "")
listH.= ":" hwnd ":" ,listItems:=""
SendMessage, MN_GETHMENU:=0x1E1, 0, 0
hMenu := ErrorLevel
loop % DllCall("GetMenuItemCount", "Uint", hMenu)
DllCall("GetMenuString", "Uint", hMenu, "int"
, A_Index-1, "str", sString, "int", nSize, "Uint", 0x400) true
and (listItems.= ((listItems)? "`n" : "") sString)
if listItems ~= versionsMenu
{
hSubmenu := DllCall("CreateMenu")
DllCall("AppendMenu", Ptr, hMenu, UInt, MF_STRING := 0, UInt, "", Str, "элемент 1")
DllCall("AppendMenu", Ptr, hMenu, UInt, MF_POPUP := 0x10, Ptr, hSubmenu, Str, "дочернее меню")
DllCall("AppendMenu", Ptr, hSubmenu, UInt, MF_STRING := 0, UInt, "", Str, "элемент 2")
}
}
*немного исправил. в 11стр убрал проверку несуществующей переменной(осталось от старого способа) и в 12стр сделал проверку на полноту переменной. А в общем скрипт работает точно так же.
Он добавляет новые элементы в контекстное меню редактирования текста(правый клик по любому edit полю windows).
В другие не должен.
Как актуальней всего на них действие назначить? Для этого тоже есть api'шка которая просто на клик переходит на метку в скрипте?
И есть ли возможность добавлять свои элементы в контекстное меню google chrome? Там класс идет Chrome_WidgetWin_2 а не #32768. Если его даже указать в моем скрипте в замен то он не может с ними работать, ничего не происходит.