Juvigy

IE events

16 posts in this topic

It seems that MS changed something in IE11 and the bellow code doesnt work anymore:

 

$test=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
$test2=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2")

Func IEEvent_($event)

msgbox ....
End Func

Any idea how to fix that ? Thanks.

 

Share this post


Link to post
Share on other sites



it works great for me.

 

Can you give more details?

 

Saludos

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

attach("http://www.dir.bg/")
$test=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
$test2=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2")
While 1
 Sleep(10)
WEnd

Func IEEvent_($event)
MsgBox( 0,"","")
EndFunc

This code should pop up a msg box every time an IE event is fired. I dont get any popup when i do actions on the webpage.

@EDIT Attach is a custom function using IEATTACH - that part works , i tested it.

Edited by Juvigy
ADD

Share this post


Link to post
Share on other sites

You must define the event to be handled. 

 

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


Local $oIE = _IECreate("", 0, 1, 0)
; Custom sink object
Local $oIEEvents = ObjEvent($oIE, "_IEEvent_", "DWebBrowserEvents2")

_IENavigate($oIE, "www.autoitscript.com")
While True
    Sleep(30)
WEnd


; BeforeNavigate2 method definition
Func _IEEvent_BeforeNavigate2($oIEpDisp, $sIEURL, $iIEFlags, $sIETargetFrameName, $sIEPostData, $iIEHeaders, $bIECancel)
    MsgBox(0, "", "Event")
EndFunc   ;==>_IEEvent_BeforeNavigate2

Saludos

Share this post


Link to post
Share on other sites

I want to capture all events and my code above used to work before.

Share this post


Link to post
Share on other sites

This is from the help file :

Quote

If you don't know (for some reason) the names of the events, you can add a UDF with only the prefix. In this example: Func IEEvent_($Eventname).
When an event is received and no IEEvent_ Eventname UDF exists, this function will be called instead and the name of the event will be placed in the variable $Eventname.

Can someone please test it and advise if my error reproducer works ?

$test=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
$test2=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2")

Func IEEvent_($event)
    msgbox(0,"","")
End Func

Each event will popup a msg so you should see many msgs. I dont have any msg popups when testing this code!

Share this post


Link to post
Share on other sites

doesn't works here...

where did you found those infos? I don't found that senetence in my AutoIt Help (I'm testing on AutoIt v. 3.3.14.2)


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

10 hours ago, Chimp said:

where did you found those infos?

Maybe in
Obj/COM Reference

in AutoIt HelpFile

Quote

Click here to view the complete script.

There is similar example:

Func IEEvent_($sEventName)
    ; This is an optional event function to catch non-defined events.
    ; The parameter contains the name of the event being called.
    GUICtrlSetData($g_idGUIEdit, "Uncatched event: " & $sEventName & @CRLF, "append")
EndFunc   ;==>IEEvent_

 

Edited by mLipok
1 person likes this

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 - BETA * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Best coding practices * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * 

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2017-06-04

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

I removed that from AutoIt few years back. The feature was consuming too many resources and have been slowing down execution.
On top of that, the feature is senseless. You either know what you want to capture, or don't capture at all. Third option is just gay.

Unfortunately I missed the example script from the help file.

Edited by trancexx

♡♡♡

.

eMyvnE

Share this post


Link to post
Share on other sites

Good to know.
So help file should be revised in this regard.

Thanks @trancexx for explanation.

mLipok

 


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 - BETA * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Best coding practices * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * 

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2017-06-04

Share this post


Link to post
Share on other sites

while experimenting with Obj events, I slammed into a wall...
I'm stucked on how to correctly refer the 'event' object within the event function in the AutoIt listing.
the commented line 79, should print coordinates of the mouse while mouse is moving on the web page, I get an error instead.
event.clientX and event.clientY should return the mouse coordinates,
see here ?? : https://msdn.microsoft.com/en-us/library/ms536947(v=vs.85).aspx
and/or here: ?? https://msdn.microsoft.com/en-us/library/ff975920(v=vs.85).aspx

what I'm doing wrong?

; We use a very simple GUI to show the results of our Events.

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
Global $g_idGUIEdit

Example()
Exit ; End of our Demo.

Func Example()
    Local $hGUIMain = GUICreate("Event Test", 1000, 600)
    $g_idGUIEdit = GUICtrlCreateEdit("", 5, 405, 990, 175)
    ; GUICtrlSetBkColor(-1, 0x000000)
    ; GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetFont(-1,12, 400, -1, 'Courier New')
    GUICtrlCreateLabel("Below are some Browser events 'captured' from the above web page by AutoIt", 5, 385,990, 20)
    Local $idGUIExit = GUICtrlCreateButton(" Close and exit", 5, 580, 990, 15)
    GUISetState() ;Show GUI

    ; We prepare the Internet Explorer as our test subject
    Global $oIE = ObjCreate("Shell.Explorer.2")
    $hIE = GUICtrlCreateObj($oIE, 5, 5, 990, 380) ; <- insert $oIE in the AutoIt GUI

    ; Here we load an example Web page just to have something viewed in the browser
    $oIE.navigate('http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onmousemoveEX.htm')
    Sleep(1000) ; Give it some time to load the web page

    Do ; wait for document
        Sleep(250)
        $oDocument = $oIE.document
    Until IsObj($oDocument)

    ;   +  Scripting Object Interfaces
    ;   |  ---------------------------
    ;   |  https://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx
    ;   |
    ;   +-->   HTMLDocumentEvents2 interface (catch OnClick, OnMouseOver, .... etc
    ;          -----------------------------
    ;          https://msdn.microsoft.com/en-us/library/aa769764(v=vs.85).aspx
    ;
    Global $oEventObject = ObjEvent($oDocument, "IEEvent2_", "HTMLDocumentEvents2")

    If @error Then
        MsgBox($MB_OK, "AutoIt COM Test", _
                "ObjEvent: Can't use event interface 'HTMLDocumentEvents2'. Error code: " & Hex(@error, 8))
        Exit
    EndIf

    ; GUISwitch($hGUIMain) ; Switch back to our GUI in case IE stole the focus

    ; Waiting for user to close the GUI.
    Local $iMsg
    While 1
        $iMsg = GUIGetMsg()
        If $iMsg = $GUI_EVENT_CLOSE Or $iMsg = $idGUIExit Then ExitLoop
    WEnd

    $oEventObject.Stop ; Tell IE we don't want to receive events.
    $oEventObject = 0 ; Kill the Event Object
    $oIE = 0 ; Remove IE from memory (not really necessary).

    GUIDelete() ; Remove GUI
EndFunc   ;==>Example

; A few Internet Explorer Event Functions
Func IEEvent2_onClick()
    ConsolePrint("mouse click:")
EndFunc   ;==>IEEvent2_onClick

Func IEEvent2_onDblClick()
    ConsolePrint("mouse DoubleClick:")
EndFunc   ;==>IEEvent2_onDoubleClick

Func IEEvent2_onMouseMove($oEvent)
    ; according to what is written here:
    ; https://msdn.microsoft.com/en-us/library/ms536947(v=vs.85).aspx
    ; I should be able to get properties from the event using the 'event.property' syntax
    ; but how to refer to the 'event' obj <---- ???????
    ; ConsolePrint("mouse moved to:" & @TAB & "Xpos = " & $oEvent.clientX & @TAB & "Ypos = " & $oEvent.clientY ) ; <-- error
    ConsolePrint("mouse moved to: ???" & @TAB & "Xpos = " & "event.clientX" & @TAB & "Ypos = " & "event.clientY")
EndFunc   ;==>IEEvent2_onMouseMove

Func ConsolePrint($sMsg)
    Local Const $iMaxLines = 12 ; keep last 12 lines only
    $sMsg = @HOUR & ':' & @MIN & ':' & @SEC & ':' & @MSEC & @TAB & $sMsg & @CRLF
    $sMsg = StringReplace(GUICtrlRead($g_idGUIEdit) & $sMsg, @CR, @CR)
    If @extended > $iMaxLines Then ; more than $iMaxLines
        $sMsg = StringMid($sMsg, StringInStr($sMsg, @CR, 0, -1 * $iMaxLines) + 2)
    EndIf
    GUICtrlSetData($g_idGUIEdit, $sMsg)
EndFunc   ;==>ConsolePrint

any help will be appreciated.
Thanks


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites

@Chimp make the MouseMove event function  volatile.

 

Saludos

1 person likes this

Share this post


Link to post
Share on other sites

#13 ·  Posted (edited)

Thanks reverend @Danyfirex
I see, declaring event functions as Volatile those works :).

; We use a very simple GUI to show the results of our Events.

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
Global $g_idGUIEdit

Example()
Exit ; End of our Demo.

Func Example()
    Local $hGUIMain = GUICreate("Event Test", 1000, 600)
    $g_idGUIEdit = GUICtrlCreateEdit("", 5, 405, 990, 175)
    ; GUICtrlSetBkColor(-1, 0x000000)
    ; GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetFont(-1, 9, 400, -1, 'Courier New')
    GUICtrlCreateLabel("Below are some Browser events 'captured' from the above web page by AutoIt", 5, 385, 990, 20)
    Local $idGUIExit = GUICtrlCreateButton(" Close and exit", 5, 580, 990, 15)
    GUISetState() ;Show GUI

    ; We prepare the Internet Explorer as our test subject
    Global $oIE = ObjCreate("Shell.Explorer.2")
    $hIE = GUICtrlCreateObj($oIE, 5, 5, 990, 380) ; <- insert $oIE in the AutoIt GUI

    ; Here we load an example Web page just to have something viewed in the browser
    $oIE.navigate('http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onmousemoveEX.htm')
    Sleep(1000) ; Give it some time to load the web page

    Do ; wait for document
        Sleep(250)
        $oDocument = $oIE.document
    Until IsObj($oDocument)

    ;   +  Scripting Object Interfaces
    ;   |  ---------------------------
    ;   |  https://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx
    ;   |
    ;   +-->   HTMLDocumentEvents2 interface (catch OnClick, OnMouseOver, .... etc
    ;          -----------------------------
    ;          https://msdn.microsoft.com/en-us/library/aa769764(v=vs.85).aspx
    ;
    Global $oEventObject = ObjEvent($oDocument, "IEEvent2_", "HTMLDocumentEvents2")

    If @error Then
        MsgBox($MB_OK, "AutoIt COM Test", _
                "ObjEvent: Can't use event interface 'HTMLDocumentEvents2'. Error code: " & Hex(@error, 8))
        Exit
    EndIf

    ; GUISwitch($hGUIMain) ; Switch back to our GUI in case IE stole the focus

    ; Waiting for user to close the GUI.
    Local $iMsg
    While 1
        $iMsg = GUIGetMsg()
        If $iMsg = $GUI_EVENT_CLOSE Or $iMsg = $idGUIExit Then ExitLoop
    WEnd

    $oEventObject.Stop ; Tell IE we don't want to receive events.
    $oEventObject = 0 ; Kill the Event Object
    $oIE = 0 ; Remove IE from memory (not really necessary).

    GUIDelete() ; Remove GUI
EndFunc   ;==>Example

; A few Internet Explorer Event Functions
; ( reference to the Event Obj interface: )
; ( https://msdn.microsoft.com/en-us/library/aa703876(v=vs.85).aspx )
;
Volatile Func IEEvent2_onClick($oEvent)
    ConsolePrint("mouse click: " & $oEvent.clientX & ',' & $oEvent.clientY & '  on ' & $oEvent.srcElement.NodeName)
EndFunc   ;==>IEEvent2_onClick

Volatile Func IEEvent2_onDblClick($oEvent)
    ConsolePrint("mouse DoubleClick: @" & $oEvent.clientX & ',' & $oEvent.clientY)
EndFunc   ;==>IEEvent2_onDblClick

Volatile Func IEEvent2_onMouseMove($oEvent)
    ConsolePrint("mouse moved to:" & @TAB & "Xpos = " & $oEvent.clientX & @TAB & "Ypos = " & $oEvent.clientY)
EndFunc   ;==>IEEvent2_onMouseMove

Func ConsolePrint($sMsg)
    Local Const $iMaxLines = 9 ; keep last 9 log lines only
    $sMsg = @HOUR & ':' & @MIN & ':' & @SEC & ':' & @MSEC & @TAB & $sMsg & @CRLF
    $sMsg = StringReplace(GUICtrlRead($g_idGUIEdit) & $sMsg, @CR, @CR)
    If @extended > $iMaxLines Then ; more than $iMaxLines
        $sMsg = StringMid($sMsg, StringInStr($sMsg, @CR, 0, -1 * $iMaxLines) + 2)
    EndIf
    GUICtrlSetData($g_idGUIEdit, $sMsg)
EndFunc   ;==>ConsolePrint


p.s.
:huh2: volatile? :think:... yes volatile, naturally! ... :blink:

Edited by Chimp
added link for Event Obj interface

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites
20 hours ago, Chimp said:

:huh2: volatile? :think:... yes volatile, naturally! ... :blink:

Just exactly what I said here:

;)

 

1 person likes this

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 - BETA * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Best coding practices * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * 

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2017-06-04

Share this post


Link to post
Share on other sites

#15 ·  Posted (edited)

On 10/28/2016 at 2:57 PM, trancexx said:

I removed that from AutoIt few years back. The feature was consuming too many resources and have been slowing down execution.
On top of that, the feature is senseless. You either know what you want to capture, or don't capture at all. Third option is just gay.

Unfortunately I missed the example script from the help file.

I was using this functionality for testing purposes. It was very convenient. That way i was looking on the events that were firing at the time i was clicking on a IE page and later on i was refining the code. How do you propose to do that now?

@PS

What does Volatile means? I cant use it - my AutoIT(v3.3.8.1) gives me compilation error "ERROR: syntax error".

Edited by Juvigy
PS

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

  • Similar Content

    • Simpel
      By Simpel
      Hi.
      I'm trying to do a teletext viewer. Here is my code:
      #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <ButtonConstants.au3> Local $sURL = "http://www.ndr.de/public/teletext/100_01.htm" Local $oIE = ObjCreate("Shell.Explorer.2") GUICreate("NDR Text", 494, 601) GUICtrlCreateObj($oIE, 0, 0, 513, 574) Local $idLabel_Number = GUICtrlCreateInput("", 2, 574, 60, 25, $ES_CENTER) GUICtrlSetFont(-1, 14) GUICtrlSetLimit(-1, 3) GUICtrlSetState(-1, $GUI_FOCUS) Local $idButton_OK = GUICtrlCreateButton("OK", 64, 574, 60, 25, $BS_DEFPUSHBUTTON) GUICtrlSetFont(-1, 14) $oIE.navigate($sURL) GUISetState(@SW_SHOW) ;Show GUI While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE ExitLoop Case $idButton_OK If GUICtrlRead($idLabel_Number) >= 100 And GUICtrlRead($idLabel_Number) < 900 Then $oIE.navigate("http://www.ndr.de/public/teletext/" & GUICtrlRead($idLabel_Number) & "_01.htm") EndIf GUICtrlSetState($idLabel_Number, $GUI_FOCUS) EndSwitch WEnd GUIDelete() It works but it doesn't look so good as shown direct in the InternetExplorer 11. Differences seen in the images I attached. I want to have the look like in the IE (first picture).
      How to change my code?
      Regards, Conrad
       


    • slidy56fr
      By slidy56fr
      Internet Explorer 11, AutoIt 3.3.14.2
      I want to download many files which are published with hyperlink on a web page. I use AutoIt and when there is a few files, it works even if It's on a website with secured links.
      I have a script to download link items with the object method (I gave a partial sample), but when the number of link exceed the web page, there is not an auto scroll, then the links which are not on displayed without scroll are not downloaded.
      Thank you
      From France
       
       
      EchantillonRecepAnonym.au3
    • tarretarretarre
      By tarretarretarre
      Yet another IE UDF, but this time I "covered all angels" to make it as close to "embedded" as possible, the biggest inspiration came from Dale
      Anyway, one of the issues with the other "snipplets\UDF's" is that $WS_POPUP style will cause other Windows to overlap, even though you clicked on the GUI's "Embedded window". see picture:

      This issue is solved, but there is an option to disable it, if the user want
      One more small issue with others IE Embedded UDF's is that implementation should not be so much different than the original implementation was. I am not ranting, I am just speaking for my mind.
      So here we go:
      This is how the classic _IeCreateEmbedded() implementation goes down
      #include <IE.au3> Local $hGUI = GUICreate("_IECreateEmbedded", 800, 600) Local $oIE = _IECreateEmbedded() GUICtrlCreateObj($oIE, 0, 0, 800, 600) GUISetState() _IENavigate($oIE, "https://www.google.se") While GUIGetMsg() <> - 3 wend and this is how _IeCreateEmbedded2() is implemented
      #include <IE.au3> #include <_IECreateEmbedded2.au3> Local $hGUI = GUICreate("_IECreateEmbedded", 800, 600) Local $oIE = _IEEmbedded2_Create($hGUI, 0, 0, 800, 600) GUISetState() _IENavigate($oIE, "https://www.google.se") While GUIGetMsg() <> - 3 wend The only downside with this implementation is that _IECreateEmbedded2() is not an GUI control, it only has our Com Object, so I added basic manipulation.
      I will change \ add more options based on user requests or if I feel like it.
      _IEEmbedded2_Move($iLeft, $iTop, $iWidth = Default, $iHeight = Default) ;Similar to AutoIT's WinMove _IEEmbedded2_Hide() _IEEmbedded2_Show()
      Here is a GUI example with different options, so you can test some of the functionality
       Example.au3
      #include <_IEEmbedded2.au3> Local $hGUI = GUICreate("_IEEmbedded2 Example Gui", 1575, 600) Local $iDMove = GUICtrlCreateButton("Move", 0, 0, 225, 50) Local $iDHide = GUICtrlCreateButton("Hide", 225, 0, 225, 50) Local $iDShow = GUICtrlCreateButton("Show", 450, 0, 225, 50) Local $iDnav = GUICtrlCreateButton("Navigate", 675, 0, 225, 50) Local $iDestroy = GUICtrlCreateButton("Destroy", 900, 0, 225, 50) Local $iDCreate = GUICtrlCreateButton('Create with ($iCmdLine = "-extoff -private")', 1125, 0, 225, 50) Local $iDCreateNoWsChildOnBlur = GUICtrlCreateButton("Create with ($iWsChildOnBlurMS = 0)", 1350, 0, 225, 50) Local $oIE = _IEEmbedded2_Create($hGUI, 0, 50, 1575, 550, "http://www.google.se/", Default, Default, Default) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _IEQuit($oIE) Exit Case $iDMove _IEEmbedded2_Move(Random(0, 10, 1), Random(50, 60, 1)) If @error Then MsgBox(0, "Error", "Failed to move window") Case $iDHide _IEEmbedded2_Hide() If @error Then MsgBox(0, "Error", "Failed to hide window") Case $iDShow _IEEmbedded2_Show() If @error Then MsgBox(0, "Error", "Failed to show window") Case $iDnav If IsObj($oIE) Then _IENavigate($oIE, "https://www.autoitscript.com/site/") Else MsgBox(0, "Error", "Failed to navigate") EndIf Case $iDestroy If IsObj($oIE) Then _IEQuit($oIE) ___IEEmbedded2_Data(0, 0, 0, 0); only required if $iWsChildOnBlurMS = 0 Else MsgBox(0, "Error", "Failed to destroy object.") EndIf Case $iDCreate Local $tmpOie = _IEEmbedded2_Create($hGUI, 0, 50, 1575, 550, "https://www.google.com/", "-extoff -private", Default, Default) If Not @error Then $oIE = $tmpOie Else MsgBox(0, "Error", "Failed to _IEEmbedded2_Create, error code: "&@error) EndIf Case $iDCreateNoWsChildOnBlur Local $tmpOie = _IEEmbedded2_Create($hGUI, 0, 50, 1575, 550, Default, Default, Default, 0) If Not @error Then $oIE = $tmpOie Else MsgBox(0, "Error", "Failed to _IEEmbedded2_Create, error code: "&@error) EndIf EndSwitch WEnd
       _IEEmbedded2.au3
      #include-once #include <IE.au3> #include <WinAPI.au3> #include <GuiConstants.au3> Opt("WinWaitDelay", 1) ; #FUNCTION# ==================================================================================================================== ; Name ..........: _IEEmbedded2_Create ; Description ...: Creates an "embedded Internet Explorer window" for a parent window (E.ex GuiCreate), and returns a webbrowser object refrence which can be used with _IE* Functions ; Syntax ........: _IEEmbedded2_Create($hWndParent, $iLeft, $iTop, $iWidth, $iHeight, $iCmdLine = Default, $iTimeoutMS = Default, $iWsChildOnBlurMS = Default) ; Parameters ....: $hWndParent - The handle of the window you would like to embed internet explorer in ; $iLeft - X1 ; $iTop - Y1 ; $iWidth - X2 ; $iHeight - Y2 ; $iDefaultPage - [optional] Default page on launch, _IeNavigate will be used as soon as the object exists and the script does not wait for the page to load (Default = about:blank) ; $iCmdLine - [optional] Parameters passed when starting Iexplore, see remarks. (Default = "") ; $iTimeoutMS - [optional] Max wait time in milliseconds before SetError, se @error 5 and 6. (Default = 30000 ms) ; $iWsChildOnBlurMS - [optional] How often in milliseconds we want to make sure $hParrent does not get overlapped by other Windows gui's, set 0 to disable (Default = 100 ms) ; Return values .: Success - a Webbrowser object reference. ; Failure - 0 and sets @error to non zero. ; Author ........: TarreTarreTarre ; Modified.......: ; Remarks .......: Max 1 instance is allowed. ; ; Set $iWsChildOnBlurMS to 0 if you do not wish to have $hWndChild altered when the $hWndParent is not active, this will however cause other windows to overlap your Gui and more. ; Also, if $iAdlibCalltime is 0, you have to manually reset _IEEmbedded2_Createdata's data if you want to invoke _IEEmbedded2_Create again. ; Use ___IEEmbedded2_Data(0, 0, 0, 0) to reset data ; ; For $iCmdLine, these commands are avilable -extoff, -framemerging, -noframemerging, -nohangrecovery, -private, -nosessionmerging And -sessionmerging ; Read more about Command-Line Options at https://msdn.microsoft.com/en-us/library/hh826025(v=vs.85).aspx ; Link ..........: ; Example .......: ; @error ........: 1 - $hWndParent is not a valid window handle. ; 2 - Iexplore.exe not found. ; 3 - Another instance of _IEEmbedded2_ is already running. ; 4 - $iCmdLine is provided with invalid parameters ; 5 - Load Wait Timeout, was not able to retrive Iexplore.exe window handle. ; 6 - (IE >= 10 only) Load Wait Timeout, failed to force $hWndChild into a minimized state. ; 7 - Windows API error, check @extended for more information Func _IEEmbedded2_Create($hWndParent, $iLeft, $iTop, $iWidth, $iHeight, $iDefaultPage = Default, $iCmdLine = Default, $iTimeoutMS = Default, $iWsChildOnBlurMS = Default) $iDefaultPage = ($iDefaultPage == Default ? "about:blank" : $iDefaultPage) $iCmdLine = ($iCmdLine == Default ? "" : StringRegExpReplace($iCmdLine, "([a-zA-Z]*)\s*[-]{1}", "$1 -")) $iTimeoutMS = ($iTimeoutMS == Default ? 30000 : $iTimeoutMS) $iWsChildOnBlurMS = ($iWsChildOnBlurMS == Default ? 100 : $iWsChildOnBlurMS) Local $sIexplorePath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE", "") Local $sUrl = StringFormat("about:blank#%s", Chr(Random(65, 90, 1)) & Random(1, 100, 1)) If Not IsHWnd($hWndParent) Then Return SetError(1, 0, 0) If Not FileExists($sIexplorePath) Then Return SetError(2, 0, 0) If ___IEEmbedded2_IsInited() Then Return SetError(3, 0, 0) If Not StringRegExp($iCmdLine, _ "^((|-extoff|-framemerging|-noframemerging|-nohangrecovery|-private|-nosessionmerging|-sessionmerging)\s*){1,}+$") Then Return SetError(4, 0, 0) Local $Pid = Run(StringFormat("%s -k %s %s", $sIexplorePath, $iCmdLine, $sUrl), "", @SW_HIDE) Local $Timeout = TimerInit() Local $_IEErrorNotify = _IEErrorNotify(False) Do Local $oIE = _IEAttach($sUrl, "url") If TimerDiff($Timeout) > $iTimeoutMS Then _IEErrorNotify($_IEErrorNotify) ProcessClose($Pid) Return SetError(5, 0, 0) EndIf Sleep(0) Until IsObj($oIE) _IEErrorNotify($_IEErrorNotify) Local $hWndChild = _IEPropertyGet($oIE, "hwnd") _WinAPI_MoveWindow($hWndChild, -1000, -1000, -1000, -1000, True) _IENavigate($oIE, $iDefaultPage, 0) ;IEVer >= 10 needs to be minimized or it will not disappear from the taskbar @ windows 7 32\64 bit & mby other win vers. If Int(FileGetVersion($sIexplorePath)) >= 10 Then Do WinActivate($hWndChild, "") WinSetState($hWndChild, "", @SW_MINIMIZE) If TimerDiff($Timeout) > $iTimeoutMS Then ProcessClose($Pid) Return SetError(6, 0, 0) EndIf Until WinGetState($hWndChild) == 23 ; $WIN_STATE_EXISTS + $WIN_STATE_VISIBLE + $WIN_STATE_MINIMIZED EndIf _WinAPI_SetParent($hWndChild, $hWndParent) _WinAPI_MoveWindow($hWndChild, $iLeft, $iTop, $iWidth, $iHeight, True) _WinAPI_SetWindowLong($hWndChild, $GWL_STYLE, $WS_POPUP + $WS_VISIBLE) If @error Then SetExtended(1, _WinAPI_GetLastError()) ProcessClose($Pid) Return SetError(7, 1, 0) EndIf Local $aDimensions = [$iLeft, $iTop, $iWidth, $iHeight] ___IEEmbedded2_Data($hWndParent, $hWndChild, $aDimensions, $iWsChildOnBlurMS) If $iWsChildOnBlurMS Then AdlibRegister("___IEEmbedded2_WsChildOnBlur", $iWsChildOnBlurMS) EndIf Return $oIE EndFunc ;==>_IEEmbedded2_Create ; #FUNCTION# ==================================================================================================================== ; Name ..........: _IEEmbedded2_Move ; Description ...: Moves a previously created _IEEmbedded2_Create window ; Syntax ........: _IEEmbedded2_Move($iLeft, $iTop, $iWidth = Default, $iHeight = Default) ; Parameters ....: $iLeft - X1 ; $iTop - Y1 ; $iWidth - X2 [optional] (Default = Original value) ; $iHeight - Y2 [optional] (Default = Original value) ; Return values .: Success - True ; Failure - 0 and sets @error to non zero. ; Author ........: TarreTarreTarre ; Modified.......: ; Remarks .......: Similar to AutoIt's WinMove ; Do not use this to "hide" objects, use _IEEmbedded2_Hide() instead ; Link ..........: ; Example .......: ; @error ........: 1 - _IEEmbedded2_Create is not invoked Func _IEEmbedded2_Move($iLeft, $iTop, $iWidth = Default, $iHeight = Default) Local $e = ___IEEmbedded2_Data() Local $hc = $e[1] Local $d = $e[2] Local $alr = $e[3] If Not IsHWnd($hc) Then Return SetError(1, 0, 0) $iWidth = ($iWidth == Default ? $d[2] : $iWidth) $iHeight = ($iHeight == Default ? $d[3] : $iHeight) _WinAPI_MoveWindow($hc, $iLeft, $iTop, $iWidth, $iHeight, True) Local $nd = [$iLeft, $iTop, $iWidth, $iHeight] ___IEEmbedded2_Data(Null, Null, $nd) If $alr Then AdlibRegister("___IEEmbedded2_WsChildOnBlur", $alr) Return True EndFunc ;==>_IEEmbedded2_Move ; #FUNCTION# ==================================================================================================================== ; Name ..........: _IEEmbedded2_Hide ; Description ...: Hides a previously created _IEEmbedded2_Create window ; Syntax ........: _IEEmbedded2_Hide() ; Parameters ....: ; Return values .: Success - True ; Failure - 0 and sets @error to non zero. ; Author ........: TarreTarreTarre ; Modified.......: ; Remarks .......: ; Link ..........: ; Example .......: ; @error ........: 1 - _IEEmbedded2_Create is not invoked Func _IEEmbedded2_Hide() Local $e = ___IEEmbedded2_Data() Local $hc = $e[1] If Not IsHWnd($hc) Then Return SetError(1, 0, 0) _WinAPI_MoveWindow($hc, 0, 0, 0, 0, True) AdlibUnRegister("___IEEmbedded2_WsChildOnBlur") Return True EndFunc ;==>_IEEmbedded2_Hide ; #FUNCTION# ==================================================================================================================== ; Name ..........: _IEEmbedded2_Show ; Description ...: Restore the window to its original size, a counter to _IEEmbedded2_Move() \ _IEEmbedded2_Hide() ; Syntax ........: _IEEmbedded2_Show() ; Parameters ....: ; Return values .: Success - True ; Failure - 0 and sets @error to non zero. ; Author ........: TarreTarreTarre ; Modified.......: ; Remarks .......: ; Link ..........: ; Example .......: ; @error ........: 1 - _IEEmbedded2_Create is not invoked Func _IEEmbedded2_Show() Local $e = ___IEEmbedded2_Data() Local $hc = $e[1] If Not IsHWnd($hc) Then Return SetError(1, 0, 0) Local $d = $e[2] Local $alr = $e[3] _WinAPI_MoveWindow($hc, $d[0], $d[1], $d[2], $d[3], True) If $alr Then AdlibRegister("___IEEmbedded2_WsChildOnBlur", $alr) Return True EndFunc ;==>_IEEmbedded2_Show #Region IECreateEmbedded2 Internals functions Func ___IEEmbedded2_Data($_hWndParent = Null, $_hWndChild = Null, $_aDimensions = Null, $_iWsChildOnBlurMS = Null) Local Static $hWndParent = 0 Local Static $hWndChild = 0 Local Static $aDimensions = 0 Local Static $iWsChildOnBlurMS = 0 If $_hWndParent <> Null Then $hWndParent = $_hWndParent If $_hWndChild <> Null Then $hWndChild = $_hWndChild If IsArray($_aDimensions) Then $aDimensions = $_aDimensions If $_iWsChildOnBlurMS <> Null Then $iWsChildOnBlurMS = $_iWsChildOnBlurMS Local $aRet = [$hWndParent, $hWndChild, $aDimensions, $iWsChildOnBlurMS] Return $aRet EndFunc ;==>___IEEmbedded2_Data Func ___IEEmbedded2_IsInited() Local $e = ___IEEmbedded2_Data() Return IsHWnd($e[1]) EndFunc ;==>___IEEmbedded2_IsInited Func ___IEEmbedded2_WsChildOnBlur() Local Static $p Local $c = 0 Local $e = ___IEEmbedded2_Data() Local $hp = $e[0] Local $hc = $e[1] If Not IsHWnd($hc) Then ___IEEmbedded2_Data(0, 0, 0, 0) Return AdlibUnRegister("___IEEmbedded2_WsChildOnBlur") EndIf If WinActive($hp) Or WinActive($hc) Then $c = 1 If $c And $p <> $c Then Local $gmp = _WinAPI_GetMousePos() Local $wfp = _WinAPI_WindowFromPoint($gmp) Local $gp = _WinAPI_GetParent($wfp) _WinAPI_SetWindowLong($hc, $GWL_STYLE, $WS_POPUP + $WS_VISIBLE) _WinAPI_UpdateWindow($hp) If $wfp <> $hp And $gp <> $hp Then WinActivate($hc) EndIf $p = $c ElseIf Not $c And $p <> $c Then _WinAPI_SetWindowLong($hc, $GWL_STYLE, $WS_CHILD + $WS_VISIBLE) _WinAPI_UpdateWindow($hp) $p = $c EndIf EndFunc ;==>___IEEmbedded2_WsChildOnBlur #EndRegion IECreateEmbedded2 Internals functions This is currently tested with (AutoIt v3.3.14.0):
      Windows 7 x86: Ie 8-9-10-11
      Windows 7 x64: Ie 8-9-10-11

      Error-report on this thread: IE version, @error code, Operationg system ex: (Windowx 10 64 bit)
       
      Trevlig Helg /Tarre
    • uncommon
      By uncommon
      For a while I thought this was caused by a security restriction in IE so I did not think much of it. But I was able to reproductive the problem using the help file scripts.
      Basically, Using IE property get screenx, or screeny for IE 11 in windows 8 seem off a bit in the controls. See the attached Pics. This does not seem to be the case for my window 7 computer so I am wondering if this is some kind of setting?
       
      ; Open a browser with the form example and get a reference to the form ; textarea element. Get the coordinates and dimensions of the text area, ; outline its shape with the mouse and come to rest in the center #include <ScreenCapture.au3> #include <IE.au3> #RequireAdmin Local $oIE = _IE_Example("form") Local $oForm = _IEFormGetObjByName($oIE, "ExampleForm") Local $oTextArea = _IEFormElementGetObjByName($oForm, "textareaExample") ; Get coordinates and dimensions of the textarea Local $iScreenX = _IEPropertyGet($oTextArea, "screenx") Local $iScreenY = _IEPropertyGet($oTextArea, "screeny") Local $iBrowserX = _IEPropertyGet($oTextArea, "browserx") Local $iBrowserY = _IEPropertyGet($oTextArea, "browserY") Local $iWidth = _IEPropertyGet($oTextArea, "width") Local $iHeight = _IEPropertyGet($oTextArea, "height") ; Outline the textarea with the mouse, come to rest in the center Local $iMousespeed = 50 MouseMove($iScreenX, $iScreenY, $iMousespeed) MouseMove($iScreenX + $iWidth, $iScreenY, $iMousespeed) MouseMove($iScreenX + $iWidth, $iScreenY + $iHeight, $iMousespeed) MouseMove($iScreenX, $iScreenY + $iHeight, $iMousespeed) MouseMove($iScreenX, $iScreenY, $iMousespeed) MouseMove($iScreenX + $iWidth / 2, $iScreenY + $iHeight / 2, $iMousespeed) _ScreenCapture_Capture(@MyDocumentsDir & "\GDIPlus_Image2.jpg", $iScreenX, $iScreenY, $iScreenX + $iWidth, $iScreenY + $iHeight) ShellExecute(@MyDocumentsDir & "\GDIPlus_Image2.jpg") The top image is from windows 7, and the bottom is window 8.