windows - Er det muligt at kalde en funktion i en anden, men i øjeblikket udførelsesproces?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en ven, der arbejder på et firma, der tilbyder en ganske dårlig støtte til sine udviklere (scorer en 1/12 på Joel Test). [2]


Deres byggeproces er låst ned temmelig stramt, og afhængigt af projektets størrelse kan det tage 40 + (x2) museklik, der skal implementeres. Så jeg tænkte: 'Hey, hvorfor automatiserer du ikke de klik, der bruger win32api?' (Specielt ved hjælp af Python). Jeg har fået ham til et rigtig godt værktøj, der fungerer fint, bortset fra et problem. Det værktøj, som de bruger, har en navigationsrude, der måske er åben.


Du kan åbne og lukke den med et tryk på, men jeg er ikke sikker på, hvordan jeg kunne sørge for at den var åben eller lukket. Det er irrelevant for byggeprocessen - det eneste problem er, at det ændrer, hvor musen skal Klik på skærmen afhængigt af dets åbne status. Ansøgningen er skrevet i .NET, og det afslører et funktionsopkald, som applikationer kan bruge til at skifte panelet, så jeg har kigget efter ideer og hidtil har jeg to af dem:



  • Vedhæft processen via en debugger og udfør funktionsopkaldet på en eller anden måde.

  • Tag et skærmbillede på panelets titellinje (som jeg har gennem win32 API og synes ikke at ændre sig, uanset om panelet er skjult eller ej).



Er der en nemmere måde at finde ud af tilstanden på dette panel? Udviklerne får en administratorkonto på deres maskine ud over deres almindelige konto, så jeg kan underholde ideer, der kræver administratoradgang, selvom jeg ikke mener, at det skulle være nødvendigt?


UPDATE:
Det ser ud som om der er en knap, der kan lukke ruden. I UIAVerify vises noget som 'tekst' 'Navigation' 'btnClose'. Det siger, at AutomationId er btnClose, men det er en ControlType.Text

Bedste reference


Hvilken teknologi er dette panel bygget fra? Er det standard GDI eller WPF? Hvis den er GDI, skal den have en HWND. Du skal kunne finde denne HWND gennem enten et klassenavn eller vinduetitel. Når du har HWND, kan du få sin bredde.
Hvis det er bygget med WPF, har jeg ingen anelse om det, men Snoop gør denne slags ting, så jeg ved det muligt.