Page 1 sur 1
Selection dans un menu contextuel
Posté : jeu. 16 nov. 2017 17:29
par danylarson
Bonjour Tout le monde,
Dans le cadre d'automatisation d'une application, j'aurais besoin de pouvoir cliquer sur l'une option d'un menu contextuel
qui apparait apres un clic droit sur une ligne d'un tableau.
j'ai reussi a recuperer le handle du menu grace au code suivant :
WinWait("[CLASS:#32768]")
$hWnd = WinGetHandle("[CLASS:#32768]")
Malheureusement je ne suis pas arrivé a afficher le contenu du menu ni même de cliquer dessus.
L idéal pour moi serait d'avoir un exemple qui fonctionnerai sur le notepad:
a)ouverture du menu dans le notepad par clic droit
b) sélection de l'option coller
c) clic sur l'option coller (et affichage d'une valeur)
Merci mille fois

Re: Selection dans un menu contextuel
Posté : ven. 17 nov. 2017 11:19
par danylarson
Rebonjour,
Afin d'avancer plus vite je joint 'un bout de code qui ne marche pas pour une raison que j'ignore :
#include <GuiMenu.au3>Func ClickTableItemRight
($WindowName, $ControlId) $Handle = ControlGetHandle($WindowName, "", $ControlId) ; je fais un clic droit sur une listview mais on peut faire le test sur un notepad ; pour voir apparaitre un menu contextuel _GUICtrlListView_ClickItem($Handle, 0, "right", True, 1) WinWait("[CLASS:#32768]") $hWnd = WinGetHandle("[CLASS:#32768]", "") $test = _GUICtrlMenu_IsMenu($hWnd) ; Apparament la valeur $hWnd n est pas reconnu comme un "handle menu" et je ne comprends pas pourquoi ... Print
($test) $MaxMenu = _GUICtrlMenu_GetItemCount($hWnd) For $i = 0 To $MaxMenu $menuValue = _GUICtrlMenu_GetItemData($hWnd, $i, True) ConsoleWrite($menuValue & @CRLF);~ print($menuValue) NextEndFunc ;==>ClickTableItemRight
Merci pour tout
Re: Selection dans un menu contextuel
Posté : ven. 17 nov. 2017 13:56
par mikell
Tu pourrais essayer sur $hWnd un ControlSend à base de {down} pour descendre et {enter} pour le clic

Re: Selection dans un menu contextuel
Posté : lun. 20 nov. 2017 11:13
par danylarson
Merci pour ta reponse Mikell
C'est une autre partie de mon code, le soucis et que les choix de mon menu contextuels varient en fonction de la ligne sur laquelle je clique
dans mon tableau.
C'est pour cette raison que je cherche a lire les menus qui sont affiché dans mon menu ,ainsi je les enregistrerais dans un tableau avec l'index qui me dira le nombre de fois que je dois faire un send("{DOWN}") avant de faire un send("{ENTER}")
Re: Selection dans un menu contextuel
Posté : lun. 20 nov. 2017 19:24
par mikell
Est-ce que WinGetText($hWnd) ou WinGetText("[active]") te retournent quelque chose ?
Re: Selection dans un menu contextuel
Posté : mer. 22 nov. 2017 09:30
par lpau63
bonjour,
il y a ce ce bout de code sur le forum US qui pourrais t'aider a faire ce que tu veux
Code : Tout sélectionner
#include <GuiMenu.au3>
Run("notepad.exe")
$hWnd = WinWaitActive("[CLASS:Notepad]")
Send("{APPSKEY}")
sleep(1000)
If WinExists("[CLASS:#32768]") Then
$hMenu = _GUICtrlMenu_GetMenuBarInfo(WinGetHandle("[CLASS:#32768]"), 0, 0)
$iCount = _GUICtrlMenu_GetItemCount($hMenu[4])
For $iItem = 0 To $iCount-1 Step 1
$iID = _GUICtrlMenu_GetItemID($hMenu[4], $iItem, True)
$iText = _GUICtrlMenu_GetItemText($hMenu[4], $iID, False)
ConsoleWrite("Item=[" & $iItem & "] ItemID=[" & $iID & "] text=[" & $iText & "]" & @CRLF) ;console write all rightclick menu options
If $iText = "&Paste" then
ConsoleWrite(_GUICtrlMenu_SetItemID($hMenu,$iItem,$iID)& @CRLF) ;trying to invoke context menu item here
ConsoleWrite(ControlCommand($hMenu,"","[CLASS:#32768]","SelectString",$iText) & @CRLF) ;trying to invoke context menu item here
ConsoleWrite(ControlCommand($hMenu,"","[CLASS:#32768]","SendCommandID", $iID) & @CRLF) ;trying to invoke context menu item here
ConsoleWrite(WinMenuSelectItem($hMenu,"",$iText)& @CRLF) ;trying to invoke context menu item here
For $i =0 to $iCount-1 step 1
Send("{DOWN}") ;sucessfully invoking item, seems crude
Next
Send("{Enter}")
EndIf
Next
EndIf