damien2008
Осваивающий
- Сообщения
- 178
- Репутация
- 34
Всем добрый день. Прошу помочь...
Есть пример создания дополнительного меню.
Когда создается новое меню полностью, то выбор пункта отслеживается; попробовал добавить пункт "1212". Он не отслеживается.
Как отловить нажатие на добавляемом пункте; или вообще любое выбранное?
Есть пример создания дополнительного меню.
Когда создается новое меню полностью, то выбор пункта отслеживается; попробовал добавить пункт "1212". Он не отслеживается.
Как отловить нажатие на добавляемом пункте; или вообще любое выбранное?
Код:
#cs ------------------------------------------------------------------------
Версия AutoIt: 3.3.12.0
Автор: myName
Описание: Шаблон программы на языке AutoIt
#ce ------------------------------------------------------------------------
; Код программы
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
#include <Misc.au3>
#include <GUIConstantsEx.au3>
HotKeySet('{ESC}', '_OnExit')
Global $hWnd, $hMenu, $sCurrent_Item = ""
;Global $idNew = 0x5000
Global $mnu = '1212'
Global $sub
; Set menu text and CmdIds
Global $aCmdID[4][2] = [ _
["Item &1", 0x2000], _
["Item &2", 0x2100], _
["Item &3", 0x2200], _
["Item &4", 0x2300]]
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
; Insert menu into Notepad
_InsertMenu()
; Open DLL for IsPressed
$dll = DllOpen("user32.dll")
While 1
; Check status of Notepad menubar
$aInfo = _GUICtrlMenu_GetMenuBarInfo($hWnd)
; If menu is active
If $aInfo[6] = True Then
; Run through our added items to see if they are active
$sCurrent_Item = ""
For $i = 0 To 3
If _GUICtrlMenu_GetItemHighlighted($hMenu, $aCmdID[$i][1], False) Then
; If active, get text
If $aCmdID[$i][0] <> $sCurrent_Item Then $sCurrent_Item = $aCmdID[$i][0]
EndIf
Next
If _GUICtrlMenu_GetItemHighlighted($hMenu, $mnu, False) Then $sCurrent_Item = '1212 Нажат?'
EndIf
; If one of our menu items was selected
If $sCurrent_Item <> "" Then
; If mouse clicked or Enter pressed
If _IsPressed("01", $dll) Or _IsPressed("0D", $dll) Then
; This is where you do what the selection is there for!!!!!!!!!
ConsoleWrite("You selected " & $sCurrent_Item & @CRLF)
; Prevent "double tap"
$sCurrent_Item = ""
; Wait until mouse/Enter released
While _IsPressed("0D", $dll) Or _IsPressed("01", $dll)
Sleep(10)
WEnd
EndIf
EndIf
Sleep(10)
; Exit if Notepad is closed
If Not WinExists("[CLASS:Notepad]") Then _OnExit()
WEnd
Func _InsertMenu()
Local $hItem1, $hItem2
; Open Notepad
Run("Notepad.exe")
WinWaitActive("[CLASS:Notepad]")
$hWnd = WinGetHandle("[CLASS:Notepad]")
$hMenu = _GUICtrlMenu_GetMenu($hWnd)
; Create menu
$hItem2 = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hItem2, 0, $aCmdID[0][0], $aCmdID[0][1])
_GUICtrlMenu_InsertMenuItem($hItem2, 1, $aCmdID[1][0], $aCmdID[1][1])
_GUICtrlMenu_InsertMenuItem($hItem2, 2, "", 0)
_GUICtrlMenu_InsertMenuItem($hItem2, 3, $aCmdID[2][0], $aCmdID[2][1])
_GUICtrlMenu_InsertMenuItem($hItem2, 4, $aCmdID[3][0], $aCmdID[3][1])
; Insert new menu into Notepad
_GUICtrlMenu_InsertMenuItem($hMenu, 6, "&AutoIt", 0, $hItem2)
;_GUICtrlMenu_AppendMenu ($hHelp, $MF_STRING, $idAbout, 'О программе')
;_GUICtrlMenu_AppendMenu('Файл', $MF_STRING, 'Файл1', 'О программе5')
$sub = _GUICtrlMenu_GetItemSubMenu($hMenu, 0)
_GUICtrlMenu_AddMenuItem($sub, $mnu, 0)
;_GUICtrlMenu_InsertMenuItem($hMenu, 0, "123", 0, $hItem2)
_GUICtrlMenu_DrawMenuBar($hWnd)
EndFunc ;==>_Insertmenu
Func _OnExit()
DllClose($dll)
Exit
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $ilParam
Switch _WinAPI_LoWord ($iwParam)
Case $sub
ConsoleWrite("Новый" & @CRLF)
;~ Case $idOpen
;~ MemoWrite("Открыть")
;~ Case $idSave
;~ MemoWrite("Сохранить")
;~ Case $idExit
;~ Exit
;~ Case $idCut
;~ MemoWrite("Вырезать")
;~ Case $idCopy
;~ MemoWrite("Копировать")
;~ Case $idPaste
;~ MemoWrite("Вставить")
;~ Case $idAbout
;~ MemoWrite("О программе")
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND