rootx

[SOLVED] _IECreateEmbedded help

9 posts in this topic

#1 ·  Posted (edited)

1. The script in ie works without errors, why in Autoit does not work?

2. My goal: I would like to read the contents of the "

map.panTo(posizione);

" variable from the map and save it to a variable in autoit to use it.

THX.

PS: you need gmaps API key to execute it locally.

 

#include-once
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <IE.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 801, 601, 192, 124)
GUISetState(@SW_SHOW)
map()
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd

Func map()
$apikey = "Insert your api key"
$html = _
"<!DOCTYPE html>" & @CRLF & _
"<html>" & @CRLF & _
"  <head>" & @CRLF & _
"    <meta charset=""utf-8"">" & @CRLF & _
"    <title>Searchbox</title>" & @CRLF & _
"    <style>" & @CRLF & _
"      #map {" & @CRLF & _
"        height: 100%;" & @CRLF & _
"      }" & @CRLF & _
"      html, body {" & @CRLF & _
"        height: 100%;" & @CRLF & _
"        margin: 0;" & @CRLF & _
"        padding: 0;" & @CRLF & _
"      }" & @CRLF & _
"      #map {  " & @CRLF & _
"        height: 99%;  " & @CRLF & _
"        width: 99%;" & @CRLF & _
"      }  " & @CRLF & _
"     #pac-input{" & @CRLF & _
"       margin: 10 10 10 10;" & @CRLF & _
"       width: 200px;" & @CRLF & _
"       position: absolute; top: 10px; left: 400px; z-index: 99;" & @CRLF & _
"     }" & @CRLF & _
"    </style>" & @CRLF & _
"  </head>" & @CRLF & _
"  <body>" & @CRLF & _
"    <div id=""map""></div>" & @CRLF & _
"    <script>" & @CRLF & _
"" & @CRLF & _
"      function initAutocomplete() {" & @CRLF & _
"       var myLatLng = {lat: 41.8956142, lng: 12.5029109};                                             " & @CRLF & _
"        var map = new google.maps.Map(document.getElementById('map'), {" & @CRLF & _
"          center: myLatLng," & @CRLF & _
"         zoom:15," & @CRLF & _
"          mapTypeId: 'roadmap'" & @CRLF & _
"        });" & @CRLF & _
"       " & @CRLF & _
"       " & @CRLF & _
"       var markers = [];" & @CRLF & _
"       " & @CRLF & _
"       map.addListener('click', function(e) {" & @CRLF & _
"       placeMarker(e.latLng, map);     " & @CRLF & _
"       " & @CRLF & _
"       });" & @CRLF & _
"                       " & @CRLF & _
"       function placeMarker(position, map) {" & @CRLF & _
"       " & @CRLF & _
"           var marker = new google.maps.Marker({" & @CRLF & _
"               position: position," & @CRLF & _
"               map: map                " & @CRLF & _
"           }); " & @CRLF & _
"           var lastpos = position;" & @CRLF & _
"           markers.push(marker);" & @CRLF & _
"           for (var i = 0; i < markers.length; i++) {" & @CRLF & _
"               if (markers[i].getPosition() != lastpos) {                 " & @CRLF & _
"                   markers[i].setMap(null);" & @CRLF & _
"                   markers.splice(i, 1)" & @CRLF & _
"               }" & @CRLF & _
"            }" & @CRLF & _
"           mapMove(lastpos);" & @CRLF & _
"       }" & @CRLF & _
"" & @CRLF & _
"       function mapMove(posizione){" & @CRLF & _
"           map.panTo(posizione);" & @CRLF & _
"           alert(posizione);" & @CRLF & _
"       }" & @CRLF & _
"" & @CRLF & _
"       " & @CRLF & _
"     }" & @CRLF & _
"" & @CRLF & _
"    </script>" & @CRLF & _
"    <script src=""https://maps.googleapis.com/maps/api/js?key="&$apikey&"&libraries=places&callback=initAutocomplete""" & @CRLF & _
"         async defer></script>" & @CRLF & _
"  </body>" & @CRLF & _
"</html>"


    $gmap = _IECreateEmbedded()
    $gmap_ctrl = GUICtrlCreateObj($gmap, 5, 5, 750, 550)
    _IENavigate($gmap, "about:blank", 0)
    _IEDocWriteHTML($gmap, $html)

EndFunc
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Searchbox</title>
    <style>
      #map {
        height: 100%;
      }
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
      #map {  
        height: 99%;  
        width: 99%;
      }  
      #pac-input{
        margin: 10 10 10 10;
        width: 200px;
        position: absolute; top: 10px; left: 400px; z-index: 99;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>

      function initAutocomplete() {
        var myLatLng = {lat: 41.8956142, lng: 12.5029109};                                             
        var map = new google.maps.Map(document.getElementById('map'), {
          center: myLatLng,
          zoom:15,
          mapTypeId: 'roadmap'
        });
        
        
        var markers = [];
        
        map.addListener('click', function(e) {
        placeMarker(e.latLng, map);     
        
        });
                        
        function placeMarker(position, map) {
        
            var marker = new google.maps.Marker({
                position: position,
                map: map                
            }); 
            var lastpos = position;
            markers.push(marker);
            for (var i = 0; i < markers.length; i++) {
                if (markers[i].getPosition() != lastpos) {                 
                    markers[i].setMap(null);
                    markers.splice(i, 1)
                }
            }
            mapMove(lastpos);
        }

        function mapMove(posizione){
            map.panTo(posizione);
            alert(posizione);
        }

        
      }

    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=yourapikey&libraries=places&callback=initAutocomplete"
         async defer></script>
  </body>
</html>

 

Edited by rootx

Share this post


Link to post
Share on other sites



#2 ·  Posted

OK, I have fixed the click function... But why this setting does't work??? map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

Inside IE 11 it work fine, the input box looks in the center.

Please explain me why, thx.

#include-once
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <IE.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 801, 601, 192, 124)
GUISetState(@SW_SHOW)
map()
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd

Func map()
$apikey = "AIzaSyBPQwec2vusz4JGzcBL__mJL2t1ZeIOYOA"
$html = _
"<!DOCTYPE html>" & @CRLF & _
"<html>" & @CRLF & _
"  <head> <!-- www.techstrikers.com -->" & @CRLF & _
"    <meta name=""viewport"" content=""initial-scale=1.0, user-scalable=no"">" & @CRLF & _
"    <meta charset=""utf-8"">" & @CRLF & _
"    <title>On Click Draw Markers</title>" & @CRLF & _
"<style>" & @CRLF & _
"      /* Always set the map height explicitly to define the size of the div" & @CRLF & _
"       * element that contains the map. */" & @CRLF & _
"      #map {" & @CRLF & _
"        height: 100%;" & @CRLF & _
"      }" & @CRLF & _
"      /* Optional: Makes the sample page fill the window. */" & @CRLF & _
"      html, body {" & @CRLF & _
"        height: 100%;" & @CRLF & _
"        margin: 0;" & @CRLF & _
"        padding: 0;" & @CRLF & _
"      }" & @CRLF & _
"      #description {" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"        font-size: 15px;" & @CRLF & _
"        font-weight: 300;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #infowindow-content .title {" & @CRLF & _
"        font-weight: bold;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #infowindow-content {" & @CRLF & _
"        display: none;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #map #infowindow-content {" & @CRLF & _
"        display: inline;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      .pac-card {" & @CRLF & _
"        margin: 10px 10px 0 0;" & @CRLF & _
"        border-radius: 2px 0 0 2px;" & @CRLF & _
"        box-sizing: border-box;" & @CRLF & _
"        -moz-box-sizing: border-box;" & @CRLF & _
"        outline: none;" & @CRLF & _
"        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);" & @CRLF & _
"        background-color: #fff;" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #pac-container {" & @CRLF & _
"        padding-bottom: 12px;" & @CRLF & _
"        margin-right: 12px;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      .pac-controls {" & @CRLF & _
"        display: inline-block;" & @CRLF & _
"        padding: 5px 11px;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      .pac-controls label {" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"        font-size: 13px;" & @CRLF & _
"        font-weight: 300;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #pac-input {" & @CRLF & _
"        background-color: #fff;" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"        font-size: 15px;" & @CRLF & _
"        font-weight: 300;" & @CRLF & _
"        margin-left: 12px;" & @CRLF & _
"        padding: 0 11px 0 13px;" & @CRLF & _
"        text-overflow: ellipsis;" & @CRLF & _
"        width: 400px;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #pac-input:focus {" & @CRLF & _
"        border-color: #4d90fe;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #title {" & @CRLF & _
"        color: #fff;" & @CRLF & _
"        background-color: #4d90fe;" & @CRLF & _
"        font-size: 25px;" & @CRLF & _
"        font-weight: 500;" & @CRLF & _
"        padding: 6px 12px;" & @CRLF & _
"      }" & @CRLF & _
"      #target {" & @CRLF & _
"        width: 345px;" & @CRLF & _
"      }" & @CRLF & _
"    </style>" & @CRLF & _
"" & @CRLF & _
"<script src=""https://maps.googleapis.com/maps/api/js?key="&$apikey&"&libraries=places&callback=initMap"" async defer></script>" & @CRLF & _
"<script>" & @CRLF & _
"var map;" & @CRLF & _
"function initMap() {" & @CRLF & _
"  var lat_lng = {lat: 17.08672, lng: 78.42444};" & @CRLF & _
"  map = new google.maps.Map(document.getElementById('map'), {" & @CRLF & _
"    zoom: 7," & @CRLF & _
"    center: lat_lng," & @CRLF & _
"    mapTypeId: google.maps.MapTypeId.TERRAIN" & @CRLF & _
"  });" & @CRLF & _
"  // This event listener will call addMarker() when the map is clicked." & @CRLF & _
"  map.addListener('click', function(event) {" & @CRLF & _
"    addMarker(event.latLng);" & @CRLF & _
"  });" & @CRLF & _
"         //search autocomplete" & @CRLF & _
"         var input = document.getElementById('pac-input');" & @CRLF & _
"         var autocomplete = new google.maps.places.Autocomplete(input);" & @CRLF & _
"         map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);" & @CRLF & _
"         autocomplete.addListener('place_changed', function() {" & @CRLF & _
"           var XlatLng = new google.maps.LatLng(autocomplete.getPlace().geometry.location.lat(), autocomplete.getPlace().geometry.location.lng());" & @CRLF & _
"           addMarker(XlatLng)" & @CRLF & _
"         });" & @CRLF & _
"}" & @CRLF & _
"var markers = [];" & @CRLF & _
"// Adds a marker to the map and push to the array." & @CRLF & _
"function addMarker(location) {" & @CRLF & _
"  var marker = new google.maps.Marker({" & @CRLF & _
"    position: location," & @CRLF & _
"    map: map" & @CRLF & _
"  });" & @CRLF & _
"  markers.push(marker);" & @CRLF & _
"   for (var i = 0; i < markers.length; i++) {" & @CRLF & _
"               if (markers[i].getPosition() != location) {" & @CRLF & _
"                   markers[i].setMap(null);" & @CRLF & _
"                   //Remove the marker from array." & @CRLF & _
"                   markers.splice(i, 1)" & @CRLF & _
"               }" & @CRLF & _
"            }" & @CRLF & _
"   map.panTo(location);" & @CRLF & _
"   alert(location);" & @CRLF & _
"}" & @CRLF & _
" </script>" & @CRLF & _
"  </head>" & @CRLF & _
"  <body>" & @CRLF & _
"  <input id=""pac-input"" class=""controls"" type=""text"" placeholder=""Search Box"">" & @CRLF & _
"    <div id=""map""></div>" & @CRLF & _
"  </body>" & @CRLF & _
"</html>"
    $gmap = _IECreateEmbedded()
    $gmap_ctrl = GUICtrlCreateObj($gmap, 5, 5, 750, 550)
    _IENavigate($gmap, "about:blank", 0)
    _IEDocWriteHTML($gmap, $html)
EndFunc

 

Share this post


Link to post
Share on other sites

#3 ·  Posted

Hi @rootx, from a quick test it seems that the HTML listing here works in the same way if is opened in the IE browser as in the embedded browser control in the GUI as well.
What exactly doesn't works for you?
Here the inputbox is located on the "TOP_LEFT" of the browser both in the IE browser and in the GUI on the embedded browser control as well.


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

#4 ·  Posted

Thx Chimp, yes I see the input box but the Autocomplete script doesn't work on Autoit, why?

map.jpg

I have installed win10 home and IE 11.

THx

Share this post


Link to post
Share on other sites

#5 ·  Posted

try to remove this line of your listing:

"  <head> <!-- www.techstrikers.com -->" & @CRLF & _

and change it with this 2 lines:

"  <head>" & @CRLF & _
"  <meta http-equiv=""X-UA-Compatible"" content=""IE=edge"" />" & @CRLF & _

... Let us know the results ...

1 person likes this

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

#6 ·  Posted (edited)

THX THX THX Chimp! The fix works well

I implemented this example found on techstrikers, with my script, to get a single function that will return latitude and longitude in both cases (click event or the imput box with autocomplete suggestion). Now I need a way to store in Autoit variable the result from my script (var location) , how can I do it?? THX

 

Edited by rootx

Share this post


Link to post
Share on other sites

#7 ·  Posted

3 hours ago, rootx said:

.... Now I need a way to store in Autoit variable the result from my script (var location) , how can I do it?? THX

To exchange data between autoit and javascript you need to set some settings in both environments. Take a look at the code lines marked with ; <--- to get an idea of the changes I've made. (p.s. Also have a look here for some further infos)

#include-once
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <IE.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 801, 601, 192, 124)
GUISetState(@SW_SHOW)
Global $gmap, $oLat_Long ; <--- global variables (reference to the browser control and the location)

map()

Global $ohJS = $gmap.document.parentwindow.JSglobal ; <--- create a reference to javascript (JSglobal must be previously created in the html page)

#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
    If $ohJS.lat_long <> $oLat_Long Then ; <--- check if location has changed
        $oLat_Long =  $ohJS.lat_long ; <--- get reference to the coordinates object
        MsgBox(0,"AutoIt", "Following variables comes from javascript" & @CRLF & "and are read from within AutoIt" & @CRLF &  @CRLF & "Location is:" & @CRLF & "Latitude: " & $ohJS.lat_long.lat() & @CRLF & "Longitude: " & $ohJS.lat_long.lng() ) ; <-- get coordinates
    EndIf

WEnd

Func map()
$apikey = "AIzaSyBPQwec2vusz4JGzcBL__mJL2t1ZeIOYOA"
$html = _
"<!DOCTYPE html>" & @CRLF & _
"<html>" & @CRLF & _
"  <head>" & @CRLF & _
"  <meta http-equiv=""X-UA-Compatible"" content=""IE=edge"" />" & @CRLF & _ ; <--- set up the browser control mode
            "   <script type=""text/javascript"">" & @CRLF & _ ; <--- create some global variables
            "       var JSglobal = (1,eval)(""this"");" & @CRLF & _ ; <--- this will be referenced from AutoIt
            "       var lat_long;" & @CRLF & _ ; <--- temporary storage for coordinates
            "   </script>" & @CRLF & _
"    <meta name=""viewport"" content=""initial-scale=1.0, user-scalable=no"">" & @CRLF & _
"    <meta charset=""utf-8"">" & @CRLF & _
"    <title>On Click Draw Markers</title>" & @CRLF & _
"<style>" & @CRLF & _
"      /* Always set the map height explicitly to define the size of the div" & @CRLF & _
"       * element that contains the map. */" & @CRLF & _
"      #map {" & @CRLF & _
"        height: 100%;" & @CRLF & _
"      }" & @CRLF & _
"      /* Optional: Makes the sample page fill the window. */" & @CRLF & _
"      html, body {" & @CRLF & _
"        height: 100%;" & @CRLF & _
"        margin: 0;" & @CRLF & _
"        padding: 0;" & @CRLF & _
"      }" & @CRLF & _
"      #description {" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"        font-size: 15px;" & @CRLF & _
"        font-weight: 300;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #infowindow-content .title {" & @CRLF & _
"        font-weight: bold;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #infowindow-content {" & @CRLF & _
"        display: none;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #map #infowindow-content {" & @CRLF & _
"        display: inline;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      .pac-card {" & @CRLF & _
"        margin: 10px 10px 0 0;" & @CRLF & _
"        border-radius: 2px 0 0 2px;" & @CRLF & _
"        box-sizing: border-box;" & @CRLF & _
"        -moz-box-sizing: border-box;" & @CRLF & _
"        outline: none;" & @CRLF & _
"        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);" & @CRLF & _
"        background-color: #fff;" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #pac-container {" & @CRLF & _
"        padding-bottom: 12px;" & @CRLF & _
"        margin-right: 12px;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      .pac-controls {" & @CRLF & _
"        display: inline-block;" & @CRLF & _
"        padding: 5px 11px;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      .pac-controls label {" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"        font-size: 13px;" & @CRLF & _
"        font-weight: 300;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #pac-input {" & @CRLF & _
"        background-color: #fff;" & @CRLF & _
"        font-family: Roboto;" & @CRLF & _
"        font-size: 15px;" & @CRLF & _
"        font-weight: 300;" & @CRLF & _
"        margin-left: 12px;" & @CRLF & _
"        padding: 0 11px 0 13px;" & @CRLF & _
"        text-overflow: ellipsis;" & @CRLF & _
"        width: 400px;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #pac-input:focus {" & @CRLF & _
"        border-color: #4d90fe;" & @CRLF & _
"      }" & @CRLF & _
"" & @CRLF & _
"      #title {" & @CRLF & _
"        color: #fff;" & @CRLF & _
"        background-color: #4d90fe;" & @CRLF & _
"        font-size: 25px;" & @CRLF & _
"        font-weight: 500;" & @CRLF & _
"        padding: 6px 12px;" & @CRLF & _
"      }" & @CRLF & _
"      #target {" & @CRLF & _
"        width: 345px;" & @CRLF & _
"      }" & @CRLF & _
"    </style>" & @CRLF & _
"" & @CRLF & _
"<script src=""https://maps.googleapis.com/maps/api/js?key="&$apikey&"&libraries=places&callback=initMap"" async defer></script>" & @CRLF & _
"<script>" & @CRLF & _
"var map;" & @CRLF & _
"function initMap() {" & @CRLF & _
"  var lat_lng = {lat: 43.88967769200741, lng: 8.039529919624328};" & @CRLF & _
"  map = new google.maps.Map(document.getElementById('map'), {" & @CRLF & _
"    zoom: 15," & @CRLF & _
"    center: lat_lng," & @CRLF & _
"    mapTypeId: google.maps.MapTypeId.TERRAIN" & @CRLF & _
"  });" & @CRLF & _
"  // This event listener will call addMarker() when the map is clicked." & @CRLF & _
"  map.addListener('click', function(event) {" & @CRLF & _
"    addMarker(event.latLng);" & @CRLF & _
"  });" & @CRLF & _
"         //search autocomplete" & @CRLF & _
"         var input = document.getElementById('pac-input');" & @CRLF & _
"         var autocomplete = new google.maps.places.Autocomplete(input);" & @CRLF & _
"         map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);" & @CRLF & _
"         autocomplete.addListener('place_changed', function() {" & @CRLF & _
"           var XlatLng = new google.maps.LatLng(autocomplete.getPlace().geometry.location.lat(), autocomplete.getPlace().geometry.location.lng());" & @CRLF & _
"           addMarker(XlatLng)" & @CRLF & _
"         });" & @CRLF & _
"}" & @CRLF & _
"var markers = [];" & @CRLF & _
"// Adds a marker to the map and push to the array." & @CRLF & _
"function addMarker(location) {" & @CRLF & _
"  var marker = new google.maps.Marker({" & @CRLF & _
"    position: location," & @CRLF & _
"    map: map" & @CRLF & _
"  });" & @CRLF & _
"  markers.push(marker);" & @CRLF & _
"   for (var i = 0; i < markers.length; i++) {" & @CRLF & _
"               if (markers[i].getPosition() != location) {" & @CRLF & _
"                   markers[i].setMap(null);" & @CRLF & _
"                   //Remove the marker from array." & @CRLF & _
"                   markers.splice(i, 1)" & @CRLF & _
"               }" & @CRLF & _
"            }" & @CRLF & _
"   map.panTo(location);" & @CRLF & _
"   lat_long = location;" & @CRLF & _ ; <--- store 'location' to a temp variable (it will be read from AutoIt)
"   alert('Hello from Javascript' + String.fromCharCode(13) + String.fromCharCode(13) + lat_long);" & @CRLF & _
"}" & @CRLF & _
" </script>" & @CRLF & _
"  </head>" & @CRLF & _
"  <body>" & @CRLF & _
"  <input id=""pac-input"" class=""controls"" type=""text"" placeholder=""Search Box"">" & @CRLF & _
"    <div id=""map""></div>" & @CRLF & _
"  </body>" & @CRLF & _
"</html>"
    $gmap = _IECreateEmbedded()
    $gmap_ctrl = GUICtrlCreateObj($gmap, 5, 5, 750, 550)
    _IENavigate($gmap, "about:blank", 0)
    _IEDocWriteHTML($gmap, $html)
EndFunc

 

1 person likes this

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)

Grazie tante per la lezione e per il tempo dedicatomi!

Edited by rootx

Share this post


Link to post
Share on other sites

#9 ·  Posted

... you are welcome :)


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

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

    • 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
    • crzymnmchl
      By crzymnmchl
      I cannot get any of my localhost pages that use Angular, jQuery, ExtJS etc to load into the embedded. All work perfectly with _IECreate of course. I started with
      $oNav = _IENavigate($oIE, @ScriptDir & '/angularjs-hello-world.html', 0) but that gave me nothing but _IE error messages with long integers - so went simpler(?) to my local server with
      $oNav = _IENavigate($oIE, 'http://localhost:8080/Angular/angularjs-hello-world.html') which opens the embedded page
      <!-- saved from url=(0016)http://127.0.0.1 --> <!DOCTYPE html> <html> <head> <script src="js/libs/angular.min.js"></script> </head> <body ng-app> <input type="text" ng-model="name" placeholder="Enter your name"> <h1>Hello <span ng-bind="name"></span></h1> </body> </html> but with no Angular ... the html objects are there e.g the input field but the Angular "Enter your name" is not there .... I do not think the js library is loading.
      #include <GUIConstantsEx.au3> #include <IE.au3> #include <WindowsConstants.au3> Local $oIE = _IECreateEmbedded() GUICreate("Embedded Web control Test", 640, 580, _ (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _ $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN) GUICtrlCreateObj($oIE, 10, 40, 600, 360) Global $g_idError_Message = GUICtrlCreateLabel("", 100, 500, 500, 30) GUICtrlSetColor(-1, 0xff0000) GUISetState(@SW_SHOW) ;Show GUI _IENavigate($oIE, 'http://localhost:8080/Angular/angularjs-hello-world.html') CheckError("Init", @error, @extended) ; Waiting for user to close the window While 1 Local $iMsg = GUIGetMsg() Select Case $iMsg = $GUI_EVENT_CLOSE ExitLoop EndSelect WEnd GUIDelete() Exit Func CheckError($sMsg, $iError, $iExtended) If $iError Then $sMsg = "Error using " & $sMsg & " button (" & $iExtended & ")" Else $sMsg = "" EndIf GUICtrlSetData($g_idError_Message, $sMsg) EndFunc ;==>CheckError Works perfectly when run from localhost: and also when the html file is run from file system. The example for _IECreateEmbedded (which I shortened above) goes to www.autoit which loads jQuery so I know doable. First comment in html is meant to tweek IE security and I have been giving IE as much activeX settings as possible as I wonder if this is Win7/IE11 security?