Ich suche nach einer Möglichkeit das Systemmenu eines Consolen Fensters (CMD Box) zu hooken, um ein Menu Eintrag, das ich angelegt habe, zu kontrollieren.
D.h., wenn ich z.B. ein Menü Eintrag "About" hinzufüge und dieser selektiert wird, soll dann ein Prozess starten.
Leider habe ich kein Weg gefunden, um diesen Event zu kontrollieren, wie er normalerweise über WM_NOTIFY möglich wäre.
Hat jemand eine Idee?
Edit: dies scheint zu funzen.
AutoIt
#AutoIt3Wrapper_Change2CUI=y
#include <GuiMenu.au3>
#include <WinAPIConstants.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
Global $id_Test = 1000
Global $hConsole = DllCall("kernel32.dll", "hwnd", "GetConsoleWindow")[0]
HotKeySet("{ESC}", "_Exit")
Global $hSysmenu = _GUICtrlMenu_GetSystemMenu($hConsole)
Global $iCount = _GUICtrlMenu_GetItemCount ($hSysmenu)
_GUICtrlMenu_InsertMenuItem($hSysmenu, $iCount, "Test", $id_Test)
Global $hMouseFunc = DllCallbackRegister("_MouseHook", "int", "int;wparam;lparam")
Global $hMouseHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hMouseFunc), _WinAPI_GetModuleHandle(0))
Do
Sleep(50)
Until False
Func _Exit()
_WinAPI_UnhookWindowsHookEx($hMouseHook)
DllCallbackFree($hMouseFunc)
Exit
EndFunc
Func _MouseHook($iCode, $iwParam, $ilParam)
If $iCode >= 0 And $iwParam = $WM_LBUTTONDOWN Then
If $hSysmenu Then
If _GUICtrlMenu_GetItemHighlighted($hSysmenu, $id_Test, False) Then
ConsoleWrite("Test selected" & @CRLF)
EndIf
EndIf
Return 0
EndIf
Return _WinAPI_CallNextHookEx($hMouseHook, $iCode, $iwParam, $ilParam)
EndFunc
Alles anzeigen