Jump to content
Sign in to follow this  
drapdv

Issue with UIAWrappers.au3 when compiled

Recommended Posts

drapdv
Posted (edited)

So, I have this odd issue happening with UIAWrappers.  When I run simplespy.au3 through SciTE, it finds the object I'm trying to work with, no problem. But, when I compile simplespy.exe, it can't find it.  Another script that utilizes UIAWrappers is experiencing the same phenomenon. EDIT: Compiling as 32-bit or 64-bit does not affect this behavior.

The trouble starts at the very first object I try to get via _UIA_getObjectByFindAll, so I included the $properties2Match array and the object properties that were returned by _UIA_getPropertyValue for that first object both when running from SciTE and when compiled.

It always finds the matches for the title and control type properties.  But when compiled, it fails to find the Automation ID property.  Any ideas as to why this would be happening?  Hoping junkew will see this and have an idea.

 

These are the $properties2Match

30005|Screen/PVN - ###.###.##.## - CDK Drive|0|False
30003|50032|0|False
30011|Portal|0|False

 

Object properties when running from SciTE:

<propertymatching>       
        j:1 propID:[30005] expValue:[Screen/PVN - ###.###.##.## - CDK Drive]actualValue:[Screen/PVN - ###.###.##.## - CDK Drive]1
        j:2 propID:[30003] expValue:[50032]actualValue:[50032]1
        j:3 propID:[30011] expValue:[Portal]actualValue:[Portal]1  :)
</propertymatching>

 

Object properties when script is compiled:

<propertymatching>
        j:1 propID:[30005] expValue:[Screen/PVN - ###.###.##.## - CDK Drive]actualValue:[Screen/PVN - ###.###.##.## - CDK Drive]1
        j:2 propID:[30003] expValue:[50032]actualValue:[50032]1
        j:3 propID:[30011] expValue:[Portal]actualValue:[]0  :o
</propertymatching>

 

Edited by drapdv
Included results of compiling as 32/64-bit application

Share this post


Link to post
Share on other sites
junkew

no clue , never observed that behavior (and 99.99% of the time I do not use automationid as identifying property)

  • leave the property out and if duplicates use as alternative instance:## or indexrelative construction
    if you can find it that way you could retrieve the automationid to see what the actual value is
  • check with inspect.exe to see if you have similar behavior on the object you try to recognize
  • sometimes it makes a difference in which order you start the applications

 

Share this post


Link to post
Share on other sites
drapdv

First of all, thank you for your reply, and for developing this UDF.  I literally couldn't do my job without it!

Second, I figured it out...I ran SciTE as admin, but compiled so it would run without requiring admin rights.  The (poorly obfuscated) screenshot below shows what simplespy could identify when run as admin (left) and when run with standard rights (right).  With admin rights, it cycled through 40 objects to get the one I needed.  Without admin rights, it cycled through only 16, and they were different than the first 16 found when run with admin rights.  Weird deal, but that's how it goes. 

Anyway, basic reminder to UIA people - check your 32/64-bit settings and admin privileges if things aren't behaving.

 

SimpleSpy - Admin vs Reg.jpg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • dimm
      By dimm
      Is it possible to compile script without any icon resources included?
      When I make exe it uses default system icon of current OS even if I compile as console application.
      On other versions of Windows it looks a little strange

       
      Update:
      It seems that the only way is remove icons from exe after compilation using resource editors like ResHacker.

       
      another bad solution:
      Using corrupted 35 bytes icon file. Windows can't load it and shows default system icon.
      #pragma compile(Icon, broken.ico) broken.ico
    • Skeletor
      By Skeletor
      Hi All,
      It has been bugging me for a while now. 
      Can you view the AutoIt code from within a compiled exe. Like how you can with most .Net exe's by using a certain program.
      If this is possible, how then can I secure my program (if this method exists).
       
    • Dreamfire
      By Dreamfire
      Hi,
      Since today, exe's are being flagged as having a trojan by Windows Defender (Fuery.B!cl)
      Version:  3.3.14.3 - SciTE Version 3.7.3



       

    • nacerbaaziz
      By nacerbaaziz
      Hello all
      I found this function in the Internet
      It is to play audio files from  the compiled script
      I did not understand just one thing on this function
      func play($name, $wait = 0) local Const $SND_RESOURCE = 0x00040004 local Const $SND_ASYNC = 1 ; Play the file - the script will pause as it sounds if $wait = 0 then DllCall("winmm.dll", "int", "PlaySound", "str", $name, "hwnd", 0, "int", BitOR($SND_RESOURCE, $SND_ASYNC)) else DllCall("winmm.dll", "int", "PlaySound", "str", $name, "hwnd", 0, "int", $SND_RESOURCE) endIf return 1 endFunc What I did not understand was this variable
      local Const $SND_RESOURCE = 0x00040004 I know that this variable is contains the resource name
      But what if I want to change the name of the resource what i'll do?
      can i do that?
      Thanks in advance
       
    • FrancescoDiMuro
      By FrancescoDiMuro
      Good evening everyone
      I was trying to compile my executable, adding #pragma directives instead of #AutoIt3Wrapper* directives, and, I don't know why the #pragma compile doesn't add the Author field to the executable.

      These are the directives:
      #pragma compile(Author, 'Surname Name') ; or #pragma compile(Author, Surname Name)
      and this is the output, in both cases:
       
      - #pragma directive Author found but don't understand it so will ignore: #pragma compile(Author, 'Surname Name') - #pragma directive Author found but don't understand it so will ignore: #pragma compile(Author, Surname Name) What am I missing?
      Thanks

      Francesco
×