Войти

Показать полную графическую версию : Вызов GUI в ModernMenuRaw


morgan1991
30-09-2010, 11:39
Прикрутил себе в программу эту библиотеку - ModernMenuRaw.au3
Прикладываю во вложениях...
Дак никак не ммогу понять как она вызывает то самое меню при нажатии на иконку в трее.
нашол в библиотеке такую строчку:
GUIRegisterMsg($TRAYTIPMSG, "_TrayWndProc")
Но она находится до создания самого меню, т.е. вообще не в функциях, а в теле библиотеки.

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

morgan1991
11-11-2010, 18:56
_Up

beve
14-11-2010, 21:52
Суть в следующем, нужно чтоб это меню вызывалось не только при нажатии на иконку в трее, но и по нажатию средней кнопки мыши в любом месте и появлялось рядом с курсором. »
Врятли можно чтото другое придумать, кроме такого (имею ввиду суть, а код - это только наброска):
#NoTrayIcon
#include <Misc.au3>
#include "ModernMenuRaw.au3" ; Only unknown constants are declared here

$Transparent_Gui = GUICreate("Transparent Window", 40, 40, @DesktopWidth+40, 0, $WS_POPUP,$WS_EX_TOOLWINDOW)
WinSetTrans($Transparent_Gui,"",1)
GUISetState(@SW_SHOW, $Transparent_Gui)

$nTrayIcon=_TrayIconCreate("Tools", "shell32.dll", -13)
_TrayIconSetState() ; Show the tray icon
$TrayMenu=_TrayCreateContextMenu()
$ExitTray=_TrayCreateItem("Exit")
_TrayItemSetIcon(-1, "shell32.dll", -28)

$dll = DllOpen("user32.dll")
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $ExitTray
ExitLoop
EndSwitch

If _IsPressed("04", $dll) Then
_Show()
endif
Sleep(10)
WEnd

_TrayIconDelete($nTrayIcon)
Exit


Func _Show()
$pos = MouseGetPos()
WinMove($Transparent_Gui,"",$pos[0]-20, $pos[1]-20)
Sleep(50)
_TrayIconContext($Transparent_Gui, $pos[0], $pos[1])
WinMove($Transparent_Gui, "",@DesktopWidth+40, 0)
EndFunc

В библиотеку ModernMenuRaw.au3 в самый низ добавь такую функцию:
Func _TrayIconContext($hWnd, $iX,$iY)
Local $nID = 0x00000001
Local $hMenu = GUICtrlGetHandle($TRAYNOTIFYIDS[$nID][2])
If $hMenu <> 0 Then
Local $stPoint = DllStructCreate("int;int")
SetForegroundWindow($hWnd)

TrackPopupMenuEx($hMenu, 0, $iX, $iY, $hWnd, 0)
PostMessage($hWnd, 0, 0, 0)
EndIf
EndFunc

P.S. Имеется некоторый глюк, но может это уже кто то исправит...




© OSzone.net 2001-2012