Selection dans un menu contextuel

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
danylarson
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Selection dans un menu contextuel

#1

Message 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
danylarson
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Re: Selection dans un menu contextuel

#2

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Selection dans un menu contextuel

#3

Message par mikell »

Tu pourrais essayer sur $hWnd un ControlSend à base de {down} pour descendre et {enter} pour le clic
:?:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
danylarson
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Re: Selection dans un menu contextuel

#4

Message 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}")
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Selection dans un menu contextuel

#5

Message par mikell »

Est-ce que WinGetText($hWnd) ou WinGetText("[active]") te retournent quelque chose ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
lpau63
Niveau 1
Niveau 1
Messages : 10
Enregistré le : jeu. 23 mars 2017 15:44
Status : Hors ligne

Re: Selection dans un menu contextuel

#6

Message 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
Répondre