Geht es ein Context Menu ohne GUI zu erstellen??
Context Menu
-
- [ offen ]
-
Bakku -
29. März 2010 um 17:51 -
Geschlossen -
Erledigt
-
-
hier einmal mit einer unsichtbaren GUI
-
Hm.
Nicht so wirklich das was ich suche glaube ich.
Ich will, dass ein ContextMenu sich beim drücken eines beliebigen Hotkeys öffnet, und es sich auch überall öffnet.
Geht das?? -
- Offizieller Beitrag
Geht das??
Nicht wirklich, es heißt nicht umsonst Kontextmenü - d.h. es besteht immer ein Kontext (Zusammenhang) zu einem anderen Element. -
zwar ziemlich aufwändig aber mach dir sowas doch mit GDI+
-
Geht das??
ohne gui im egtl nicht. aber wieso baust dus nicht so um, dann kannst du genauso deine hotkeys verwenden:
Spoiler anzeigen
[autoit]#include <GuiMenu.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>
#include <WindowsConstants.au3>HotKeySet("{F10}", "Menue")
[/autoit] [autoit][/autoit] [autoit]$Handle = GUICreate("")
[/autoit] [autoit][/autoit] [autoit]Global Enum $idOpen = 1000, $idSave, $idInfo, $idExit
[/autoit] [autoit][/autoit] [autoit]
Local $hMenu$hMenu = _GUICtrlMenu_CreatePopup ()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlMenu_InsertMenuItem ($hMenu, 0, "Open", $idOpen)
_GUICtrlMenu_InsertMenuItem ($hMenu, 1, "Save", $idSave)
_GUICtrlMenu_InsertMenuItem ($hMenu, 2, "", 0)
_GUICtrlMenu_InsertMenuItem ($hMenu, 3, "Info", $idInfo)
_GUICtrlMenu_InsertMenuItem ($hMenu, 4, "EXIT", $idExit)Func OnAutoItExit()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlMenu_DestroyMenu ($hMenu)
EndFunc; Register message handlers
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
Wend; Handle WM_COMMAND messages
[/autoit] [autoit][/autoit] [autoit]
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $idOpen
_WinAPI_ShowMsg ("Open")
Case $idSave
_WinAPI_ShowMsg ("Save")
Case $idInfo
_WinAPI_ShowMsg ("Info")
Case $idExit
Exit
EndSwitch
EndFunc ;==>WM_COMMANDFunc Menue()
[/autoit]
_GUICtrlMenu_TrackPopupMenu ($hMenu, $Handle)
EndFunc -
Auch eine Möglichkeit (ziemlich die selbe).
Spoiler anzeigen
[autoit]Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]Global $hGui = GUICreate("Dummy Gui", 0, 0, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, '_Exit')HotKeySet("1", "_NewMenu")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("2", "_NewMenu")
HotKeySet("{ESC}", "_Exit")$DateiContext = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
[/autoit] [autoit][/autoit] [autoit]
$OptionsOpen = GUICtrlCreateMenuItem("Ö&ffnen", $DateiContext)
$OptionsClose = GUICtrlCreateMenuItem("S&chließen", $DateiContext)
GUICtrlCreateMenuItem("", $DateiContext)
$OptionsExit = GUICtrlCreateMenuItem("B&eenden", $DateiContext)
GUICtrlSetOnEvent(-1, '_Exit')$HelpContext = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
[/autoit] [autoit][/autoit] [autoit]
$HelpWWW = GUICtrlCreateMenuItem("&Website", $HelpContext)
GUICtrlSetOnEvent(-1, '_Website')
GUICtrlCreateMenuItem("", $HelpContext)
$HelpAbout = GUICtrlCreateMenuItem("Ü&ber...", $HelpContext)
GUICtrlSetOnEvent(-1, '_About')While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(10000)
WEndFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _NewMenu()
[/autoit] [autoit][/autoit] [autoit]
If @HotKeyPressed = "1" Then
TrackPopupMenu($hGui, GUICtrlGetHandle($DateiContext), 20, 20)
Else
TrackPopupMenu($hGui, GUICtrlGetHandle($HelpContext), 100, 100)
EndIf
EndFuncFunc _About()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(64, "About...", "Beispiel für ein eigenes Menü")
EndFuncFunc _Website()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(64, "Website...", "www.autoit.de")
EndFuncFunc TrackPopupMenu($hWnd, $hMenu, $x, $y)
[/autoit]
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc ;==>TrackPopupMenu -
So gehts auch (wollt noch meinen Senf abgeben :D)
m öffnet das Menü.
Spoiler anzeigen
[autoit]#include <GuiMenu.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{m}", "CONTEXTMENU")
Global Enum $idOpen = 1000, $idSave, $idInfo
Global $hGUI
_Main()Func _Main()
[/autoit] [autoit][/autoit] [autoit]; Create GUI
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("Menu", 1, 1, 0, 0, $WS_POPUP)
WinSetTrans($hGUI, "", 1)
GUISetState(); Register message handlers
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND"); Loop until user exits
[/autoit] [autoit][/autoit] [autoit]
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc ;==>_Main; Handle WM_COMMAND messages
[/autoit] [autoit][/autoit] [autoit]
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $idOpen
_WinAPI_ShowMsg("Open")
Case $idSave
_WinAPI_ShowMsg("Save")
Case $idInfo
_WinAPI_ShowMsg("Info")
EndSwitch
EndFunc ;==>WM_COMMAND; Handle WM_CONTEXTMENU messages
[/autoit] [autoit][/autoit] [autoit]
Func CONTEXTMENU()
Local $hMenu$hMenu = _GUICtrlMenu_CreatePopup()
[/autoit]
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Open", $idOpen)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Save", $idSave)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "Info", $idInfo)
_GUICtrlMenu_TrackPopupMenu($hMenu, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenu)
Return True
EndFunc ;==>CONTEXTMENU