Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Куда посылается WM_HELP при нажатии F1 в открытом меню трея? / 3 сообщений из 3, страница 1 из 1
20.08.2013, 14:08
    #38371942
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куда посылается WM_HELP при нажатии F1 в открытом меню трея?
Если в обычной форме нажать F1 то выводится Help согласно HelpContextID этой формы
и генерируется WM_HELP которое отлавливается через сабклассинг этой формы.

Допустим форма имеет иконку в трее, установленную через Shell_NotifyIcon + меню этой иконки.
Я вызываю меню трея и нажимаю F1 (при отображаемом меню трея).
Выводится Help согласно HelpContextID формы (как и в первом случае).
Но при этом WM_HELP через сабклассинг самой формы не ловится.
Через сообщения трея тоже не ловится:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    Case WM_MySysTrayNotify 'уведомления Tray -вместо WM_MOUSEMOVE
      Dim lw_lparam
      lw_lparam = LOWORD(lParam)
      Select Case lw_lparam
        Case WM_HELP
           Debug.Print "WM_HELP" ' НЕ ЛОВИТСЯ
        Case WM_LBUTTONDBLCLK
           Debug.Print "WM_LBUTTONDBLCLK"



И такая же ситуация с любым popup menu (не обязательно в трее).
Как отловить?
...
Рейтинг: 0 / 0
21.08.2013, 05:30
    #38372659
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куда посылается WM_HELP при нажатии F1 в открытом меню трея?
Чего-то я не догоняю.

WM_HELP message

Ясно написано:
If a menu is active when F1 is pressed, WM_HELP is sent to the window associated with the menu

Что это за окно такое? Что они имеют в виду?

Ну я попробовал (с menu=visible, единственный столбец меню File)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  Dim hwndMenu As Long
  'hwndMenu = GetSubMenu(GetMenu(Me.hwnd), 0)  ВАРИАНТ 1
  hwndMenu = GetMenu(Me.hwnd)ВАРИАНТ 2
  Debug.Print hwndMenu
  OldMenuWindowProc = SetWindowLong( _
   hwndMenu, GWL_WNDPROC, _
   AddressOf NewMenuWindowProc)

Public Function NewMenuWindowProc( _
 ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
  Select Case Msg
    Case WM_HELP
      Debug.Print "WM_HELP"
    Case Else
      Debug.Print Msg
  End Select
    
  NewMenuWindowProc = CallWindowProc( _
   OldMenuWindowProc, hwnd, Msg, wParam, _
   lParam)
End Function



Вообще ничего не ловит.
"Чужое" окно?

В google единственная ссылка:
WM_HELP Message Not Received When F1 Pressed on Menu
Да и та:
The Microsoft Knowledge Base Article cannot be found

Где ж его ловить то?
...
Рейтинг: 0 / 0
21.08.2013, 14:08
    #38373293
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куда посылается WM_HELP при нажатии F1 в открытом меню трея?
Глухо. Help выводится, F1 не детектируется.
Если сабклассить Form1, при нажатии F1 пусто.
WM_MENUCHAR к F1 не относится
289 сообщение постоянно выводится, но это от елозанья по меню мышкой.

Нашел статейку
ftp://ftp.microsoft.com/MISC1/DEVELOPR/VISUAL_C/KB/Q133/3/08.TXT
но похоже не тот случай.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Куда посылается WM_HELP при нажатии F1 в открытом меню трея? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]