Jump to content

IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI)


Recommended Posts

Cheers bud, pretty ace.

Any Idea why protected mode is turned off, and if so how to enable it?

EDIT: scrap that question Protected mode was not introduced until IE 8 I believe.

EDIT2: Discovered while the control is good for html5 it still will not handle flash games like those bingo or card games on the face book.

Edited by JohnOne

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Link to post
Share on other sites

JohnOne, I'm not sure about Protected mode.  There may be a way to enable/disable it, but I haven't looked into it myself yet.

Also, I've just tested the control on a random flash game (from armorgames.com), and it worked fine.  Did you successfully login to facebook before trying to run those games?  Maybe there's some other incompatibility issue?

By the way, I'm using IE11 and the latest flash plugin for my tests.

Link to post
Share on other sites

I use IE 11 and have latest flash also.

It simply would not load any games I tried, including farmville, slingo bingo and others.

Just tried on IE normal and when entered game area got a security message about the content which I choose show all content.

Never seen this with UDF, could be related.

Edited by JohnOne

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Link to post
Share on other sites

JohnOne, all the UDF does is set a value in the registry.  You can try experimenting with different IE versions if you like, or the DOCTYPE setting, etc.  As far as IE browser and security settings, I am not sure how that would be done programmatically.  But the UDF has nothing to do with that stuff :)

Also, I saw a message from mesale0077 earlier that I see he deleted (dude, stop deleting your posts!), referencing >his thread in General Help & Support.

Anyway, he solved the problem he was having by deleting the key, but really the problem stems from the fact that the HTMLDocumentEvents2 interface has changed starting IE11.  See MSDNs HTMLDocumentEvents2 interface page for information on the changes in IE11.  The workaround?  Either figure out how to work with the new interface, or set the Browser Emulation mode to IE 10 or lower.

Edit: Turns out the problem mesale0077 was having isn't related to the new IE11 event objects, but rather to the fact that the <a> anchor elements (without text) weren't registering as being clicked.  Moving the id="#" attributes to the <img> element (or even the <span> element) actually solves the problem.

Edit2: A better option was conceived: on a click, check the parentNode to see if it is an <a> anchor element and if so, what its id attribute is. (see the code in >this post).

Edited by Ascend4nt
Link to post
Share on other sites

Since everyone likes to look at pictures, I added one ;)

Also, some changes:

2014-08-19:

Changed: UDF Renamed to IE_EmbeddedVersioning

Changed: Function _IE_EmbeddedSetBrowserEmulation() can be called with no parameters - in this case, it sets the Browser Emulation Flags to reflect the current installed version of IE

Updated: HTML5 Canvas demo

Link to post
Share on other sites

IE_EmbeddedVersioning.au3
mini changed
 
added
#include <Process.au3>
OnAutoItExitRegister("_IE_Embedded_unregistry")
 
 
 
Func _IE_Embedded_unregistry()
     RegDelete('HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION', _ProcessGetName(@AutoItPID))
  endfunc

Edited by mesale0077
Copied UDF code removed
Link to post
Share on other sites

IE_EmbeddedVersioning.au3

mini changed

added

#include <Process.au3>

OnAutoItExitRegister("_IE_Embedded_unregistry")

 

Func _IE_Embedded_unregistry()

     RegDelete('HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION', _ProcessGetName(@AutoItPID))

  endfunc

 

mesale0077, a 'feature request' might work better, than adding your own (flawed) code.  And why post the entire UDF? Please delete it from your post as it will not reflect the current and new versions of the UDF.

Anyway, even though you didn't really ask, I went ahead and added a 'Remove' function to the UDF, which actually works correctly for both HKCU and HKLM branches..

2014-08-19 Update 2:

Added: _IE_EmbeddedRemoveBrowserEmulation() per (pseudo-request) by mesale0077

Changed: _IE_EmbeddedGetBrowserEmulation() parameters are rearranged to match other function signatures

Update in 1st post

Link to post
Share on other sites

I suppose it might be of interest how the Canvas example would be done in Javascript, and how it compares to the AutoiIt script, so here's the html & Javascript code:

HTML:

<!DOCTYPE html>
<html>
 <head>
     <meta content="text/html; charset=UTF-8" http-equiv="content-type">
     <title>Experiments</title>
     <style>
         canvas { display:block; background-color:white; outline:#00FF00 dotted thin;}
     </style>     
    <script src="html5-canvas-click-example.js" type="text/javascript" language="javascript"></script>
 </head>
 <body>
    <!-- onevent="func()" attributes fail to pass event objects correctly in Firefox, so addEventListener() is used instead
    <canvas width=420 height=320 id="myCanvas" onmousedown="MouseDownCanv()" onmouseup="MouseUpCanv()" oncontextmenu="OnCanvCtxMenu()">
     -->
    <canvas width=420 height=320 id="myCanvas">
    If you are seeing this, your browser doesn't support HTML5 Canvas.
    </canvas>
 </body>
</html>

Javascript (named "html5-canvas-click-example.js"):

// Simple interactive HTML5 Canvas demo
// Author: Ascend4nt (except MouseEventToCanvasCoords() by Mark Pilgrim)

// Globals
var g_Canvas, g_Ctx;
var g_LastX, g_LastY;
var g_bMouseDown = false;

// Canvas event coordinate transfer
// (from http://diveintohtml5.info/canvas.html)
// Author: Mark Pilgrim
function MouseEventToCanvasCoords(e, Canvas)
{
    var x, y;
    if (e.pageX != undefined && e.pageY != undefined) {
        x = e.pageX;
        y = e.pageY;
    }
    else {
        x = e.clientX + document.body.scrollLeft +
            document.documentElement.scrollLeft;
        y = e.clientY + document.body.scrollTop +
            document.documentElement.scrollTop;
    }
    x -= Canvas.offsetLeft;
    y -= Canvas.offsetTop;
    return [x, y];
}
// "oncontextmenu" handler for Canvas
function OnCanvCtxMenu(evt)
{
    evt = evt || window.event;    
    //console.log("Canvas Context-menu event");

    // Prevent the Default context menu from showing up:
    evt.preventDefault();
    evt.returnValue = false;    
}
// "onmousedown" handler for Canvas
// - Draws small box, records X, Y position -
function MouseDownCanv(evt)
{
    evt = evt || window.event;
    //var elem = evt.target || event.SrcElement;

    // evt.x doesn't work on Firefox:
    //g_LastX = evt.x - g_Canvas.offsetLeft;
    //g_LastY = evt.y - g_Canvas.offsetTop;
    var coords = MouseEventToCanvasCoords(evt, g_Canvas);
    g_LastX = coords[0];
    g_LastY = coords[1];
    
    //console.log("Mouse down recvd, X = " + g_LastX);
    
    g_bMouseDown = true;
    g_Ctx.fillStyle = "blue";
    g_Ctx.fillRect(g_LastX - 2, g_LastY - 2, 3, 3);
}
// "onmouseup" handler for Canvas
// - Draws either a line from last X, Y, or draws a circle if no movement -
function MouseUpCanv(evt)
{
    evt = evt || window.event;
    if (g_bMouseDown)
    {
        var coords = MouseEventToCanvasCoords(evt, g_Canvas);
        var x2 = coords[0], y2 = coords[1];
        
        // Assemble random color string
        // as a # followed by 3 hex pairs: "#1A2B3C"
        var sColor = "#";
        for (i = 0; i < 3; i++)
            sColor += Math.floor((Math.random() * 256)).toString(16);
        
        //console.log("Color = " + sColor);

        // Draw either a line or circle depending on where the mouse button is released
        if (x2 == g_LastX && y2 == g_LastY)
        {
            // Circle if mouse start = mouse end
            g_Ctx.beginPath();
            g_Ctx.arc(x2, y2, 8, 0, Math.PI * 2);
            g_Ctx.fillStyle = sColor;
            g_Ctx.fill();
        } else {
            // Line if mouse start <> mouse end
            g_Ctx.beginPath();
            g_Ctx.lineWidth = "3";
            g_Ctx.strokeStyle = sColor;
            g_Ctx.moveTo(g_LastX, g_LastY);
            g_Ctx.lineTo(x2, y2);
            g_Ctx.stroke();
        }
        g_bMouseDown = false;
    }    
}
// Main function (runs after page is loaded)
function main()
{
    //console.log("HTML loaded");
    
    // Get Canvas element and Context
    g_Canvas = document.getElementById("myCanvas");
    if (!g_Canvas) return;
    g_Ctx = g_Canvas.getContext("2d");
    if (!g_Ctx) return;   
    
    // Add event handlers (The onevent="func()" attributes work incorrectly
    // in Firefox [event objects aren't passed])
    // Also, older IE versions might need .attachEvent()
    g_Canvas.addEventListener("mousedown", MouseDownCanv, false);
    g_Canvas.addEventListener("mouseup", MouseUpCanv, false);
    g_Canvas.addEventListener("contextmenu", OnCanvCtxMenu, false);
    
    // Example Drawing: Gradient:    
    var Grad = g_Ctx.createLinearGradient(0,0,0,60);
    if (Grad)
    {
        Grad.addColorStop(0, "red");
        Grad.addColorStop(1, "blue");
        g_Ctx.fillStyle = Grad;
    }
    g_Ctx.fillRect(0,0,419,60);
     
    // Example Drawing: Text
    g_Ctx.font = "30px serif";
    g_Ctx.fillStyle = "white";
    g_Ctx.textBaseline = "top";
    g_Ctx.fillText("HTML5 Canvas Drawing!", 50, 10);
    
    // Example Drawing: Circle, Line
    g_Ctx.beginPath();
    g_Ctx.arc(200, 100, 20, 0, Math.PI * 2);
    g_Ctx.fillStyle = "red";
    g_Ctx.fill();

    g_Ctx.beginPath();
    g_Ctx.lineWidth = "3";
    g_Ctx.strokeStyle = "green";
    g_Ctx.moveTo(185, 85);
    g_Ctx.lineTo(215, 115);
    g_Ctx.stroke();
    
    // End main [event handlers will continue to run]
}

window.onload = main;

_

edit: see >1st post for the 'standalone' ZIP file with these 2 files inside

Edited by Ascend4nt
Link to post
Share on other sites
  • 4 years later...

Additional example is located here:

 

Signature beginning:
Please remember: "AutoIt".....  Wondering who uses AutoIt and what it can be used for ?
* GHAPI UDF - modest beginning - communication with GitHub REST API Forum Rules *
Include Dependency Tree (Tool for analyzing script relations)
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 APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

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 * Good coding practices in AutoIt * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

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) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) *

PDF Related:How to get reference to PDF object embeded in IE *

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 *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

"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: 2021-03-17

Link to post
Share on other sites
  • 1 year later...

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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Pured
      I am looking to create a script which refreshes/reads a webpage every few seconds. My goal is to see if the page has changed, then I will send myself a notification that the webpage has been updated.
       
      However, rather than downloading the entire webpage every single time, is there a way to check when the webpage last updated?
       
      If not, is there away to partially download/read html source until a specific tag is hit?
       
      Goal: I would like to increase my poll rate and not excessively waste data.
    • By nacerbaaziz
      hello guys, please i need your help
      am trying to work with CreateWindowEx api, i created the window with it controls, also i setup the call back function
      i'am using WinMSGLoop to focus with the keyboard.
      here i have a problem, i hope that you can help me.
      on the controls i used the UDF that comme with the autoit, such as _GUIButton_Create, _GUIListBox_Create....
      but i can't find a STATIC control UDF, for that i used this

      local $h_ssrvlbl = _WinAPI_CreateWindowEx(0, "STATIC", "الخادم", BitOr($WS_VISIBLE, $WS_CHILD, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN), 250, 10, 100, 20, $hWnd)
      as you can see here, there is an arabic text, so here is the problem, the arabic text isn't show normally, what is the problem here?
      also i have  an other question about keyboard focus, when i used WinMSGLoop, it worked, but if i press alt+tab to switch windows or focus an other window and return back to my window, the focus of control is kill.
      can any one help me to solve that please?
      my code will be as file here with the include files
      i hope can any one help me here
      thanks in advance
       
      speed Test win.zip
    • By mLipok
      In the past there was many questions about how to: "Automatic file upload using without user interaction"

      https://www.autoitscript.com/forum/topic/92907-ie-8-input-namenomfic-typefile-idnomfic/
      https://www.autoitscript.com/forum/topic/116899-cant-automate-input-typefile-tag-in-ie/?tab=comments#comment-815478
      https://www.autoitscript.com/forum/topic/14883-input-typefile/
      https://www.autoitscript.com/forum/topic/188708-how-to-set-the-value-of-an-input-typefile-element/
      https://www.autoitscript.com/forum/topic/91513-how-can-i-auto-set-file-path-for-input-file-in-ie/
      https://www.autoitscript.com/forum/topic/116899-cant-automate-input-typefile-tag-in-ie/
      https://www.autoitscript.com/forum/topic/169190-how-to-script-file-upload-button/
      https://www.autoitscript.com/forum/topic/145327-how-to-deal-with-ie-window-for-upload-a-fileinput-typefile/
      https://www.autoitscript.com/forum/topic/140482-internet-explorer-input-file-problem/
       
      I found solution here: 
      https://stackoverflow.com/questions/33253517/upload-a-file-via-input-input-in-html-form-with-vba
      and:
      https://www.motobit.com/tips/detpg_uploadvbsie/
      And I translate this code to AutoIt3 code:
      ; Upload file using http protocol And multipart/form-data ; v1.01 ; 2001 Antonin Foller, PSTRUH Software Global $oErrorHandler = ObjEvent("AutoIt.Error", _ErrFunc) do_vbsUpload() Func do_vbsUpload() #cs ; We need at least two arguments (File & URL) ConsoleWrite('- ' & @ScriptLineNumber & @CRLF) If $CmdLine[0] < 2 Then InfoEcho() ConsoleWrite('- ' & @ScriptLineNumber & @CRLF) ; Are some required objects missing? If StringInStr(CheckRequirements(), "Error") > 0 Then InfoEcho() ConsoleWrite('- ' & @ScriptLineNumber & @CRLF) Local $s_FileName, $s_DestURL, $s_FieldName $s_FieldName = "FileField" ; Default field name For $i_argCounter = 1 To $CmdLine[0] ConsoleWrite('+ '& $i_argCounter& ' >> ' & $CmdLine[$i_argCounter] & @CRLF) Select Case $i_argCounter = 1 ;~ $s_FileName = $CmdLine[$i_argCounter] $s_FileName = @ScriptFullPath Case $i_argCounter = 2 $s_DestURL = $CmdLine[$i_argCounter] Case $i_argCounter = 3 $s_FieldName = $CmdLine[$i_argCounter] EndSelect Next UploadFile($s_DestURL, $s_FileName, $s_FieldName) #ce UploadFile('http://www.dobeash.com/test.html', @ScriptFullPath, 'fileExample') EndFunc ;==>do_vbsUpload ; ******************* upload - begin ; Upload file using input type=file Func UploadFile($s_DestURL, $s_FileName, $s_FieldName) ; Boundary of fields. ; Be sure this string is Not In the source file Const $Boundary = "---------------------------0123456789012" ; Get source file As a binary data. Local $d_FileContents = GetFile($s_FileName) ; Build multipart/form-data document Local $s_FormData = BuildFormData($d_FileContents, $Boundary, $s_FileName, $s_FieldName) ; Post the data To the destination URL IEPostBinaryRequest($s_DestURL, $s_FormData, $Boundary) EndFunc ;==>UploadFile ; Build multipart/form-data document with file contents And header info Func BuildFormData($d_FileContents, $Boundary, $s_FileName, $s_FieldName) Const $s_ContentType = "application/upload" ; The two parts around file contents In the multipart-form data. Local $s_Pre = "--" & $Boundary & @CRLF & mpFields($s_FieldName, $s_FileName, $s_ContentType) Local $s_Po = @CRLF & "--" & $Boundary & "--" & @CRLF ; Build form data using recordset binary field Const $i_adLongVarBinary = 205 Local $oRS = ObjCreate("ADODB.Recordset") ; https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/append-method-ado?view=sql-server-ver15 $oRS.Fields.Append("b", $i_adLongVarBinary, StringLen($s_Pre) + BinaryLen($d_FileContents) + StringLen($s_Po)) $oRS.Open() $oRS.AddNew() ; Convert Pre string value To a binary data Local $i_LenData = StringLen($s_Pre) $oRS("b").AppendChunk(StringToMB($s_Pre) & StringToBinary(Chr(0))) $s_Pre = $oRS("b").GetChunk($i_LenData) $oRS("b") = "" ; Convert Po string value To a binary data $i_LenData = StringLen($s_Po) $oRS("b").AppendChunk(StringToMB($s_Po) & StringToBinary(Chr(0))) $s_Po = $oRS("b").GetChunk($i_LenData) $oRS("b") = "" ; Join Pre & $d_FileContents & Po binary data $oRS("b").AppendChunk($s_Pre) $oRS("b").AppendChunk($d_FileContents) $oRS("b").AppendChunk($s_Po) $oRS.Update() Local $s_FormData = $oRS("b") $oRS.Close() Return $s_FormData EndFunc ;==>BuildFormData ; sends multipart/form-data To the URL using IE Func IEPostBinaryRequest($s_URL, $s_FormData, $Boundary) ; Create InternetExplorer Local $oIE = ObjCreate("InternetExplorer.Application") ; You can uncoment Next line To see form results $oIE.Visible = True ; Send the form data To $s_URL As POST multipart/form-data request $oIE.Navigate($s_URL, '', '', $s_FormData, _ "Content-Type: multipart/form-data; boundary=" & $Boundary & @CRLF) While $oIE.Busy Wait(1, "Upload To " & $s_URL) WEnd ; Get a result of the script which has received upload ;~ On Error Resume Next Local $s_IE_InnerHTML = $oIE.Document.body.innerHTML MsgBox(0, 'TEST #' & @CRLF & @ScriptLineNumber, $s_IE_InnerHTML) $oIE.Quit() Return $s_IE_InnerHTML EndFunc ;==>IEPostBinaryRequest ; Infrormations In form field header. Func mpFields($s_FieldName, $s_FileName, $s_ContentType) Local $s_MPTemplate = _ ; template For multipart header 'Content-Disposition: form-data; name="{field}";' & _ 'FileName="{file}"' & @CRLF & _ 'Content-Type: {ct}' & @CRLF & @CRLF & _ '' Local $s_Out $s_Out = StringReplace($s_MPTemplate, "{field}", $s_FieldName) $s_Out = StringReplace($s_Out, "{file}", $s_FileName) $s_Out = StringReplace($s_Out, "{ct}", $s_ContentType) Return $s_Out EndFunc ;==>mpFields Func Wait($i_Seconds, $s_Message) MsgBox(64, '', $s_Message, $i_Seconds) EndFunc ;==>Wait ; Returns file contents As a binary data Func GetFile($s_FileName) Local $oStream = ObjCreate("ADODB.Stream") $oStream.Type = 1 ; Binary $oStream.Open() $oStream.LoadFromFile($s_FileName) Local $d_GetFile = $oStream.Read() $oStream.Close() Return $d_GetFile EndFunc ;==>GetFile ; Converts OLE string To multibyte string Func StringToMB($S) Local $I, $B For $I = 1 To StringLen($S) $B &= StringToBinary(Asc(StringMid($S, $I, 1))) Next Return $B EndFunc ;==>StringToMB ; ******************* upload - end ; ******************* Support ; Basic script info Func InfoEcho() Local $sMsg = _ "Upload file using http And multipart/form-data" & @CRLF & _ "Copyright (C) 2001 Antonin Foller, PSTRUH Software" & @CRLF & _ "use" & @CRLF & _ "[cscript|wscript] fupload.vbs file $s_URL [fieldname]" & @CRLF & _ " file ... Local file To upload" & @CRLF & _ " $s_URL ... $s_URL which can accept uploaded data" & @CRLF & _ " fieldname ... Name of the source form field." & @CRLF & _ @CRLF & CheckRequirements() & @CRLF & _ "" ConsoleWrite('! ' & $sMsg & @CRLF) EndFunc ;==>InfoEcho ; Checks If all of required objects are installed Func CheckRequirements() Local $sMsg = _ "This script requires some objects installed To run properly." & @CRLF & _ CheckOneObject("ADODB.Recordset") & @CRLF & _ CheckOneObject("ADODB.Stream") & @CRLF & _ CheckOneObject("InternetExplorer.Application") & @CRLF & _ "" Return $sMsg ; $sMsgBox $sMsg EndFunc ;==>CheckRequirements ; Checks If the one object is installed. Func CheckOneObject($sClassName) Local $sMsg ObjCreate($sClassName) If @error = 0 Then $sMsg = "OK" Else $sMsg = "Error:" & @error EndIf Return $sClassName & " - " & $sMsg EndFunc ;==>CheckOneObject ; ******************* Support - end ; User's COM error function. Will be called if COM error occurs Func _ErrFunc(ByRef $oError) ; Do anything here. ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _ @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _ @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _ @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _ @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _ @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _ @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _ @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _ @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _ @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF) EndFunc ;==>_ErrFunc  
      But I miss something and the code not works as intendend.
      Please join and contribute, in solving this issue, as this will be handy for entire community.
      @mLipok
       
      btw.
      I think that this may be realated to ChrB() which I simply translate to StringToBinary()
      Especialy this :
      StringToBinary(Chr(0))) could be the main issue.
      But for now I'm tired and going to sleep.
      Hope maybe tomorrow somebody solve this issue.
       
    • By Synaps3
      This script will make it so you can press Alt + "+" in Windows Explorer to select all files with the current file extension. This is something that I wanted for a long time and it should be a feature in Windows, but it's not. The only way to get close is to use the search thing (but then it shows the results excluding everything else) or to group by that type, but I don't want it grouped.
      You can press Alt + Enter right after to open properties on those files or you can press delete to delete only files of that type.
      You need the "Automating Windows Explorer" pack here: https://www.autoitscript.com/forum/topic/162905-automating-windows-explorer/
       
      #include "Includes\AutomatingWindowsExplorer.au3" #include <Array.au3> Opt( "MustDeclareVars", 1 ) HotKeySet("!=", "SelectTypes") Func SelectTypes() ; Windows Explorer on XP, Vista, 7, 8 Local $hExplorer = WinGetHandle("[REGEXPCLASS:^(Cabinet|Explore)WClass$]") If Not $hExplorer Then MsgBox(0, "Explorer", "Could not find Windows Explorer.") Return EndIf $hExplorer = WinActive("[REGEXPCLASS:^(Cabinet|Explore)WClass$]") If Not $hExplorer Then MsgBox(0, "Explorer", "Windows Explorer is not in focus.") Return EndIf ; Get an IShellBrowser interface GetIShellBrowser($hExplorer) If Not IsObj($oIShellBrowser) Then MsgBox(0, "Explorer", "Could not get an IShellBrowser interface.") Return EndIf ; Get other interfaces GetShellInterfaces() ; Get selected files with full path ;GetFiles( $fSelected = False, $fFullPath = False, $fPidl = False, $iMax = 0 ) Local $aAllFiles = GetItems(False, False) Local $aFiles = GetItems(True, False) Local $sExt Local $i If UBound($aFiles) = 1 Then ;MsgBox(0, "Selected", $aFiles[0]) $sExt = StringRight($aFiles[0], StringLen($aFiles[0]) - StringInStr($aFiles[0], ".", 0, -1)) ;MsgBox(0, "Selected", $sExt) For $i = 0 To UBound($aAllFiles) - 1 If StringInStr($aAllFiles[$i], ".") > 0 Then If StringRight($aAllFiles[$i], StringLen($aAllFiles[$i]) - StringInStr($aAllFiles[$i], ".", 0, -1)) = $sExt Then SetSelectedItem($i) EndIf EndIf Next Else MsgBox($MB_ICONWARNING, "Error", "None or multiple items selected!") EndIf EndFunc While 1 GUIGetMsg() Wend  
    • By Deshanur
      Am trying to automate injecting credential on the login form for all kind of Web application for IE. I know how to identify the form name by viewing the source code and using the method - _IEFormGetObjByName($ie, $form_Name).
      I would like to know how to identify or get the form object for the web app where there is no form name tag for example below, for the is I have used - _IEFormGetCollection($ie, 0) to get the form object.
      My Question is does it work for all kind of application "_IEFormGetCollection($ie, 0)" how to identify Index value? is it always 0? is there any better solution?
      The final solution am looking for is find out form object, get the username, password field and inject credential and submit the form.
      How to find out index value? for the forms which does not have form name field.
      $login_form = _IEFormGetCollection($ie, 0) $email_field = _IEFormElementGetObjByName($login_form, $form_UserName) $pass_field = _IEFormElementGetObjByName($login_form, $form_password) $login_button = _IEFormElementGetObjByName($login_form, $form_submitbutton) _IEFormElementSetValue($email_field, $CmdLine[2]) _IEFormElementSetValue($pass_field, $CmdLine[3]) ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]","{Enter}") OR This works fine if the form has form name. $login_form = _IEFormGetObjByName($ie, $form_Name) $email_field = _IEFormElementGetObjByName($login_form, $form_UserName) $pass_field = _IEFormElementGetObjByName($login_form, $form_password) $login_button = _IEFormElementGetObjByName($login_form, $form_submitbutton) _IEFormElementSetValue($email_field, $CmdLine[2]) _IEFormElementSetValue($pass_field, $CmdLine[3]) ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]","{Enter}")
×
×
  • Create New...