Jump to content

Recommended Posts

Posted (edited)

Hi All,

Below is an example of my code that will reproduce an issue I am having, all be it an issue that sometimes occurs and sometimes does not.

#include <WinAPI.au3>
#include <IE.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>


Call ("Project")

Func Project()

Local $WaitTime         =   10000 ; Set the time between checks in miliseconds

While 1
    $hwnd               =   WinGetHandle("[active]")
    If Not @error Then ; Ensure 'WinGetHandle' worked.
        Local $WinClassName = _WinAPI_GetClassName($hwnd)

        If $WinClassName = "IEFrame" Then ; If the curent window is an IE exploere instance then...
            Local $Object   =   _IEAttach($hwnd, "embedded")
            If not @error Then
                Local $url      =   _IEPropertyGet($Object, 'locationurl')
                If not @error Then
                    Local $Split    =   StringSplit($url, "/")

                    If $Split[0] > 2 Then ; This stops an error if the array did not have enought rows e.g no url to display form row 3.
                        If Not $Split[3] = "" Then ; Dont bother if no url e.g blank
                            msgbox(0, "URL is:", $Split)
                        EndIf
                    EndIf
                EndIf
            EndIf
        EndIf   
    EndIf
    
Sleep($WaitTime)

WEnd

EndFunc

The issue is from IE.au3 and the error message is attached.  I am able to reproduce it is I run the scrip, load an instance of IE, then navigate to a different page such as google or something.

 

I have looked in the code for IE.au3 and it reference to a function “__IEControlGetObjFromHWND(ByRef $hWin)” however I am not using this function so am a little unsure why or how this error is being called or what I can do to stop it?

 

Any advice / help would be gratefully appreciated.

Thank you.

Capture.JPG

Edited by Lights_On
Added image of error received.
Posted

Could you please try:

Local $Object   =   _IEAttach($hwnd, "hwnd")

My UDFs and Tutorials:

  Reveal hidden contents

 

Posted

Hi,

 

Thank you for your help.

The error i get is now different and attached for you.

I only seem to get an error is I am typing in the address bar (Instance 2 when using window info tool) so perhaps i could add an if statement to not _IEAttach if focus is on instance 2 

 

NewError.JPG

Posted

You was not told to us which AutoIt Version you are using .
I suppose 3.3.14.x

try 3.3.12.x

.

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

Hi,

 

Thank you mLipok - you are correct I had not - apologies.

 

I can confirm i have tried both compiled and not compiled test on both versions you note and I get the same results on both.

Posted

Works for me when run from SciTE with AutoIt 3.3.14.2 and 3.3.15.0.

Which version of IE do you run?

My UDFs and Tutorials:

  Reveal hidden contents

 

Posted

I'm using IE 11 (11.0.9600.18617)

The issue seems to only occur when I go to try and manually type in a url.  Also it does not happen always - only on occasions.

Posted

Hi,

Okay so with some further testing I can make it work without error when using:

_IEAttach($hwnd, "hwnd")

Instead of:

 

_IEAttach($hwnd, "embedded")

Only when compiled with v3.3.12.0

My issue is however that this change means I only get the URL from 1st tab in IE, before I would get URL from the tab in focus, which is what i seek?

Posted

Thank you to all that helped.

In the end I changed the way I did things and below is a small bit of code to explains (hopefully) what I did.  Of occurs it is an extract so wont run standing alone but does show what I did.  In short I just got the URL via different means.

 

If $WinClassName = "IEFrame" Then ; If the curent window is an IE exploere instance then...
            Local $VisableText      =   WinGetText($hwnd)
            Local $VisableTextSplit =   StringSplit($VisableText, @CRLF)
            Local $url              =   $VisableTextSplit[8]
            Local $Split            =   StringSplit($url, "/")
                If $Split[0] > 2 Then ; This stops an error if the array did not have what was needed e.g no url to display form row 3.
                    If Not $Split[3] = "" Then ; Dont bother if no url e.g blank
                        Msgbox(0, "URL", $Split[3])
                    EndIf
                EndIf

 

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
×
×
  • Create New...