J'essaie d'accéder au menu contextuel interface utilisateur AutomationElement du Bloc-notes, mais je me bats pour le faire:accès Menu contextuel
Imports System.Windows.Automation
Imports System.Windows.Forms
Module AutomateNotepad
Sub Main()
Dim wNotepad, document As AutomationElement
wNotepad = AutomationElement.RootElement.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "Untitled - Notepad"))
document = wNotepad.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "document"))
document.SetFocus()
SendKeys.SendWait("+{F10}")
context = AutomationElement.RootElement.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "context"))
While context Is Nothing
Console.WriteLine("Trying to get context again")
Threading.Thread.Sleep(100)
context = AutomationElement.RootElement.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "context"))
End While
MsgBox("Found it!")
End Sub
End Module
Mon problème est que quand je lance l'application, le menu contextuel du bloc-notes ouvre mais UIAutomation ne semble jamais obtenir le AutomationElement de celui-ci ...
C'est une capture d'écran de Inspect.exe:
Compte tenu de l'image d'inspection et de la structure qu'elle présente, je ne vois pas pourquoi cela se produirait ... Est-ce que quelqu'un sait où je pourrais me tromper?
P.S. Je suis très nouveau sur VB.NET mais j'ai travaillé avec VBA pendant 2-3 ans donc je m'excuse pour toutes les mauvaises habitudes que j'ai pu avoir ...
Si vous utilisez .net s'il vous plaît se débarrasser des déclarations 'GoTo' ... Tous – Codexer
raison pour cela ...? – Sancarn
Oui, en effet. C'est à propos de flux de contrôle et il peut rendre le code difficile à lire et à maintenir. Ils ne sont en aucun cas mauvais, c'est le mauvais usage de 'GoTo' que j'ai vu ...' If', 'Case' etc. justifierait vos conditions ... Actuellement, la façon dont votre code circule maintenant, il continuera à boucler' jusqu'à ce que context' *** soit *** quelque chose, mais ce ne sera jamais 'Not Nothing' car le code est faux, vous pouvez éventuellement recevoir une' StackOverflowException' éventuellement. – Codexer