1

Тема: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Этот вариант не работает:

WinActivate, ahk_class Notepad++ 
Sleep, 100
WinMenuSelectItem, ahk_class Notepad++ , , ?, Параметры Командной Строки

А, этот пример работает:

WinActivate, ahk_class Notepad++ 
Sleep, 100
WinMenuSelectItem, ahk_class Notepad++ , , ?, 1&

Судя по всему, проблема в пробелах. Пытался заменить пробелы на %A_space% -не сработал такой финт. С кавычками исхитрялся -тоже не помогало... Подскажите как бы так хитро написать, чтобы взяло и заработало используя названия субменю а не порядковый номер?

2

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

У меня так работает:

WinMenuSelectItem, ahk_class Notepad++,, ?, Параметры Командной Строки

Активация не нужна.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: unKn0wn, 2015-09-26 06:15:29)

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

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

4 (изменено: Alectric, 2015-09-26 08:19:00)

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

С кавычками так пробовали:

WinMenuSelectItem, ahk_class Notepad++ , , ?,% "Параметры Командной Строки"

?

Еще как вариант - чувствительность к регистру.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

5

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Соблюдаю регист. Нет, так не срабатывает.

6

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

В программе это меню: ? - О программе ...

Вывод ahkspy:

ahk_id 0x804e2
▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( Control )
Class NN:    ▪  Win class: 
Pos:  x y  ▪  Size:  w h  ▪  x2 y2
Pos relative client area:  x y  ▪  x2 y2
Mouse relative control:  x y  ▪  Client area:  x3 y3 w143 h44
HWND:    ▪  Style:    ▪  ExStyle: 
Focus control:    ▪  Cursor type:  Arrow  ▪  Caret pos:  x y
▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( AccInfo )
Type:  Child  ▪  Id:  1  ▪  Pos: x375 y44 w143 h22  ▪  Mouse relative: x64 y17  ▪  Win relative: x3 y3
▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( State )
отслеженное  ▪  code: 132
▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( Role )
элемент меню  ▪  code: 12
▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( Role - parent )
всплывающее меню  ▪  code: 11
▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( Action )
Выполнить
▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( Focus - parent )
1

7

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Обычно в AccInfo должно быть Name пункта.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Вот скрипт, который выдаст все названия меню:
http://www.autohotkey.com/board/topic/1 … text-menu/

9

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Malcev, и как ты умудряешься такие древности откапывать? Там InsertInteger() ещё присутствует.

Posted 25 July 2007 - 10:35 AM

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Вот то, что отображает если я наведу курсор на меню: ? - О программе ...

1:Highlight
2:Enabled
---
1:{Empty String}
2:{Empty String}

11

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

unKn0wn, можете просто скриншот сделать типа такого:

https://cloclo19.cloud.mail.ru/weblink/thumb/xw1/5L4FT4Qkr4Fs/2015.09.28-21.08.32.2.jpg

?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Ну раз "древность" ничего не показывает, то похоже, что там текста и нету, а видим просто картинку с текстом.

13

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Почему, ведь WinMenuSelectItem по номеру срабатывает. Я просто предположил, что там ещё в конце горячая клавиша приписана, как в пункте «О программе...                F1»

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

А почему он по номеру должен не срабатывать?
Как я понимаю, этот метод и был создан как-раз для тех случаев, когда нельзя определить имя.

The menu name parameters can also specify positions. This method exists to support menus that don't contain text (perhaps because they contain pictures of text rather than actual text). Position 1& is the first menu item (e.g. the File menu), position 2& is the second menu item (e.g. the Edit menu), and so on.

http://ahkscript.org/docs/commands/WinM … ctItem.htm

15

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

А, просто думал, ты имеешь в виду, что меню нестандартное. Но ведь на других пунктах меню по названию срабатывает. Маловероятно, что одни с картинками, другие с текстом.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Суть в том, что текстом я могу выбирать меню, но лишь если название субменю без пробелов. А, вот там где названия с пробелами -я и испытываю трудности.
http://oi59.tinypic.com/b4iywx.jpg

17

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Не пойму, а где ж там пункт «Параметры Командной Строки»?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

А откуда иконки в меню. Это плагин что-ли какой-то?

19 (изменено: unKn0wn, 2015-09-29 02:29:54)

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

http://forum.script-coding.com/viewtopi … 702#p97702

Странно, с блокнотом работает, а с КОРПОРАТИВНОЙ программой нет... И, в чем-же может быть загвоздка-то? Я уверен был, что проблема была в пробелах(даже не протестил на блокноте), а сейчас даже не знаю что думать. Явно не в кодировке дело, другие меню без пробела нормально открываются.

В пример блокнот взял чтобы не на "пальцах" рассказывать, да и суть одна.

20

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

unKn0wn пишет:

В пример блокнот взял чтобы не на "пальцах" рассказывать, да и суть ода.

Почему же "ода"? Меню разные бывают, стандартные и «самописные».

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

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

22

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Ясно, речь уже не о Notepad++ идёт. Скорее всего, меню действительно не с текстом, а с картинками. Если хотите, могу написать код, который это проверит.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Было бы здорово, но всё-равно этими знаниями не воспользоватся с WinMenuSelectItem.

24

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

А те пункты, которые без пробелов, работают по названиям?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Да, даже в связке: Сервис, 1&, 7&.

26

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Ну ради интереса такой код запустите:

NumberOfMenuItem := ""   ; если оставить пустое значение, выдаст информацию о пунктах последнего подменю оконного меню
                         ; если присвоить номер — выдаст информацию о пунктах подменю с этим номером
                         
MIIM_FTYPE := 0x100, MIIM_STRING := 0x40, oType := {0: "MFT_STRING", 0x800: "MFT_SEPARATOR", 0x4: "MFT_BITMAP"}

F11::
   InfoString := ""
   if !hMenu := DllCall("GetMenu", Ptr, WinExist("A"), Ptr)  {
      MsgBox, Окно использует нестандартное меню
      Return
   }
   count := DllCall("GetMenuItemCount", Ptr, hMenu)
   if !hMenu := DllCall("GetSubMenu", Ptr, hMenu, Int, NumberOfMenuItem = "" ? count - 1 : NumberOfMenuItem - 1)  {
      MsgBox, Подменю не найдено
      Return
   }
   count := DllCall("GetMenuItemCount", Ptr, hMenu)
   Loop % count  {
      Gosub, IniMII
      NumPut(MIIM_FTYPE, &MENUITEMINFO + 4)
      DllCall("GetMenuItemInfo", Ptr, hMenu, UInt, A_Index - 1, UInt, true, Ptr, &MENUITEMINFO)
      type := oType[NumGet(&MENUITEMINFO + 8, "UInt")]
      InfoString .= (InfoString = "" ? "" : "`n")
      if (type != "MFT_STRING")
         InfoString .= type
      else  {
         Gosub, IniMII
         NumPut(MIIM_STRING, &MENUITEMINFO + 4)
         DllCall("GetMenuItemInfo", Ptr, hMenu, UInt, A_Index - 1, UInt, true, Ptr, &MENUITEMINFO)
         TextLength := NumGet(&MENUITEMINFO + 4*4 + A_PtrSize*6, "UInt")
         VarSetCapacity(TextBuff, TextLength * (A_IsUnicode ? 2 : 1), 0)
         NumPut(&TextBuff, &MENUITEMINFO + 4*4 + A_PtrSize*5)
         NumPut(++TextLength, &MENUITEMINFO + 4*4 + A_PtrSize*6)
         DllCall("GetMenuItemInfo", Ptr, hMenu, UInt, A_Index - 1, UInt, true, Ptr, &MENUITEMINFO)
         InfoString .= StrGet(&TextBuff)
      }
   }
   MsgBox, % InfoString
   Return
      
IniMII:
   VarSetCapacity(MENUITEMINFO, size := 4*4 + A_PtrSize*8, 0)
   NumPut(size, MENUITEMINFO)
   Return

Активируйте нужное окно и нажмите F11. Какое сообщение выдаёт?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

27

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

В Notepad++ (английская версия) у меня пишет - "подменю не найдено".

28 (изменено: teadrinker, 2015-09-29 04:57:08)

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Там последний пункт — крестик, нужно порядковый номер указать (от 1 до 12, если пункт «?» имеет порядковый номер 12).

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

29 (изменено: unKn0wn, 2015-09-29 05:20:26)

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

В основном выводит MFT_SEPARATOR. Кое-где проскакивают названия, но в основном именно этот вывод, и количество строк с  MFT_SEPARATOR не совпадает с количеством субменю в софте. Если не присваивать значений то выводит: "подменю не найдено".

30

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Ну, значит ничего не понятно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

31

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

Видимо наши программисты накрутили, перехитрили или пере ленились Жалко, что не побороть эту гадость.

32

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

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

DllCall("LoadLibrary","Str","oleacc","Ptr")

Acc_ObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")
{
    If    DllCall("oleacc\AccessibleObjectFromPoint", "Int64", x==""||y==""?0*DllCall("GetCursorPos","Int64*",pt)+pt:x&0xFFFFFFFF|y<<32, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
    Return    ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"UInt")
}
Acc_Parent(Acc) { 
    try parent:=Acc.accParent
    return parent?Acc_Query(parent):
}
Acc_Query(Acc) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&p=509530#509530
    try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}

MButton::
try tooltip % "1`t" Acc_ObjectFromPoint(c).AccName(c)
        . "`n2`t" Acc_Parent(Acc_ObjectFromPoint(c)).AccName(0)
        . "`n3`t" Acc_Parent(Acc_Parent(Acc_ObjectFromPoint(c))).AccName(0)
        . "`n4`t" Acc_Parent(Acc_Parent(Acc_Parent(Acc_ObjectFromPoint(c)))).AccName(0)
        . "`n"
        . "5`t" Acc_ObjectFromPoint(c).AccValue(c)
        . "`n6`t" Acc_Parent(Acc_ObjectFromPoint(c)).AccValue(0)
        . "`n7`t" Acc_Parent(Acc_Parent(Acc_ObjectFromPoint(c))).AccValue(0)
        . "`n8`t" Acc_Parent(Acc_Parent(Acc_Parent(Acc_ObjectFromPoint(c)))).AccValue(0)

33

Re: AHK: WinMenuSelectItem не воспринимает меню с пробелами

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