Цитата:
Цитата morgan1991
Суть в следующем, нужно чтоб это меню вызывалось не только при нажатии на иконку в трее, но и по нажатию средней кнопки мыши в любом месте и появлялось рядом с курсором. »
|
Врятли можно чтото другое придумать, кроме такого (имею ввиду суть, а код - это только наброска):
Код:
#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. Имеется некоторый глюк, но может это уже кто то исправит...
|