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 :D :D :D :D :D

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)

   Next

EndFunc   ;==>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