Помогите пожалуйста нажать кнопку PopUp меню.
Меню динамическое и имеет разное количество кнопок и порядок.
поэтому приходится ориентироваться только на наименование которое у меня и проблема получить.
Просидел всю ночь в интернете, а результатов нет.
последняя надежда на знатоков.
Делаю так:
Код:
#include <WindowsConstants.au3>
#Include <GuiToolBar.au3>
#include <GuiMenu.au3>
Func GetPopUpItem($ItemName)
Local $aPopUp_List = _WinAPI_EnumWindowsPopup()
Local $hWnd = $aPopUp_List[1][0]
Local $sClass = $aPopUp_List[1][1]
If $sClass = "#32768" Then
$hMenu = _SendMessage($hWnd, $MN_GETHMENU, 0, 0)
If _GUICtrlMenu_IsMenu($hMenu) Then
$iCount = _GUICtrlMenu_GetItemCount($hMenu) ;$iCount принимает значение 7
For $j = 0 To $iCount - 1
If not _GUICtrlMenu_GetItemType($hMenu, $j, True) = $MFT_SEPARATOR Then
;_GUICtrlMenu_GetItemType получает значение 256
if _GUICtrlMenu_GetItemText($hMenu, $j) = $ItemName then
;_GUICtrlMenu_GetItemText получает пустое значение
Return $j
endif
EndIf
Next
EndIf
EndIf
; Return $aPopUp_Text
return -1
EndFunc
Func ClickPopUpItem($ItemName)
$cur_pos = MouseGetPos()
if IsArray($cur_pos) = 0 Then
Return 0
EndIf
if WinExists("[Class:#32768]") = 0 Then
Return 0
Else
$h_win = WinGetHandle("[Class:#32768]")
if $h_win = "" Then
Return 0
EndIf
$hMenu = _SendMessage($h_win, $MN_GETHMENU,0,0)
$it_index = GetPopUpItem($ItemName)
if $it_index = -1 Then
Return 0
EndIf
$it_pos = _GUICtrlMenu_GetItemRect($h_win, $hMenu, $it_index)
if IsArray($it_pos) = 0 Then
Return 0
EndIf
MouseClick("left", $it_pos[0] + ($it_pos[2]-$it_pos[0])/2, $it_pos[1] + ($it_pos[3]-$it_pos[1])/2)
EndIf
MouseMove($cur_pos[0], $cur_pos[1])
Return 1
EndFunc
Меню динамическое и имеет разное количество кнопок и порядок.
поэтому приходится ориентироваться только на наименование которое у меня и проблема получить.
Просидел всю ночь в интернете, а результатов нет.
последняя надежда на знатоков.
Делаю так:
Код:
#include <WindowsConstants.au3>
#Include <GuiToolBar.au3>
#include <GuiMenu.au3>
Func GetPopUpItem($ItemName)
Local $aPopUp_List = _WinAPI_EnumWindowsPopup()
Local $hWnd = $aPopUp_List[1][0]
Local $sClass = $aPopUp_List[1][1]
If $sClass = "#32768" Then
$hMenu = _SendMessage($hWnd, $MN_GETHMENU, 0, 0)
If _GUICtrlMenu_IsMenu($hMenu) Then
$iCount = _GUICtrlMenu_GetItemCount($hMenu) ;$iCount принимает значение 7
For $j = 0 To $iCount - 1
If not _GUICtrlMenu_GetItemType($hMenu, $j, True) = $MFT_SEPARATOR Then
;_GUICtrlMenu_GetItemType получает значение 256
if _GUICtrlMenu_GetItemText($hMenu, $j) = $ItemName then
;_GUICtrlMenu_GetItemText получает пустое значение
Return $j
endif
EndIf
Next
EndIf
EndIf
; Return $aPopUp_Text
return -1
EndFunc
Func ClickPopUpItem($ItemName)
$cur_pos = MouseGetPos()
if IsArray($cur_pos) = 0 Then
Return 0
EndIf
if WinExists("[Class:#32768]") = 0 Then
Return 0
Else
$h_win = WinGetHandle("[Class:#32768]")
if $h_win = "" Then
Return 0
EndIf
$hMenu = _SendMessage($h_win, $MN_GETHMENU,0,0)
$it_index = GetPopUpItem($ItemName)
if $it_index = -1 Then
Return 0
EndIf
$it_pos = _GUICtrlMenu_GetItemRect($h_win, $hMenu, $it_index)
if IsArray($it_pos) = 0 Then
Return 0
EndIf
MouseClick("left", $it_pos[0] + ($it_pos[2]-$it_pos[0])/2, $it_pos[1] + ($it_pos[3]-$it_pos[1])/2)
EndIf
MouseMove($cur_pos[0], $cur_pos[1])
Return 1
EndFunc