Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Вызов GUI в ModernMenuRaw (http://forum.oszone.net/showthread.php?t=186956)

morgan1991 30-09-2010 11:39 1508039

Вызов GUI в ModernMenuRaw
 
Вложений: 1
Прикрутил себе в программу эту библиотеку - ModernMenuRaw.au3
Прикладываю во вложениях...
Дак никак не ммогу понять как она вызывает то самое меню при нажатии на иконку в трее.
нашол в библиотеке такую строчку:
Код:

GUIRegisterMsg($TRAYTIPMSG, "_TrayWndProc")
Но она находится до создания самого меню, т.е. вообще не в функциях, а в теле библиотеки.

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

morgan1991 11-11-2010 18:56 1540301

_Up

beve 14-11-2010 21:52 1542714

Цитата:

Цитата 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. Имеется некоторый глюк, но может это уже кто то исправит...


Время: 19:53.

Время: 19:53.
© OSzone.net 2001-