Jump to content

Odd _IECreateEmbedded Behavior


 Share

Recommended Posts

I'm super puzzled right now. When I Embed Internet Explorer in my GUI, open an ArcGIS Online map, the right cursor to pan doesn't work. But if I open an internet explorer browser to our AGOL maps using the right cursor to pan works perfectly. Any ideas why such behavior would happen if it's the same browser? 

Thanks!

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Windows_Phone_icon-icons.com_66782.ico
#AutoIt3Wrapper_Outfile=Example.exe
#AutoIt3Wrapper_Compression=4
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; *** Start added by AutoIt3Wrapper ***
#include <APISysConstants.au3>
#include <StaticConstants.au3>
#include <StructureConstants.au3>
#include <WinAPIConstants.au3>
; *** End added by AutoIt3Wrapper ***
#include-once
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <WinAPIEx.au3>
#include <IE.au3>
#include <Array.au3>
#include <Process.au3>
#include <GUIConstantsEx.au3>

; Calculate visible screen dimensions.
$one_percent_width = @DesktopWidth / 100
$one_percent_height = @DesktopHeight / 100
$width = $one_percent_width * 98
$height = $one_percent_height * 91

Global $bAero, $hidden = False, $tuck = False, $tucked = False, $untucked = False, $tucking = False, $untucking = False, $timer = 0, $tdiff = 0, _
$LAYERED_GUI = $WS_EX_LAYERED, $hGUI_child, $hGUI_height = 683, $find = False, $qsInfocus = False
Global Const $hDwmApiDll = DllOpen("dwmapi.dll"), $sChkAero = DllStructCreate("int;")
DllCall($hDwmApiDll, "int", "DwmIsCompositionEnabled", "ptr", DllStructGetPtr($sChkAero))
$bAero = DllStructGetData($sChkAero, 1)
If Not $bAero Then
    $LAYERED_GUI = 0
    $hGUI_height = $hGUI_height - 20
EndIf

$hGUI = GUICreate("", 715, $hGUI_height, -1, 0, $WS_POPUP, $LAYERED_GUI + $WS_EX_TOPMOST, WinGetHandle(AutoItWinGetTitle()))
$hIcon = _WinAPI_GetClassLongEx($hGUI, $GCL_HICON)
_WinAPI_DestroyIcon($hIcon)
_WinAPI_SetClassLongEx($hGUI, $GCL_HICON, 0)
_WinAPI_SetClassLongEx($hGUI, $GCL_HICONSM, 0)

If $bAero Then
    $hGUI_child = GUICreate("", 715-39, 683 - 26, 22,  3, $WS_POPUP, $WS_EX_MDICHILD + $WS_EX_TOPMOST, $hGUI)
    $hGUI_Font = $hGUI_child
Else
    $hGUI_Font = $hGUI
    $hGUI_child = $hGUI
EndIf
GUISetBkColor(0xFFFFFF)
GUISetFont(15, 100, Default, 'Segoe UI', $hGUI_Font, 5)

; Embed Internet Explorer
$address = "Company Website"
$oIE = _IECreateEmbedded()
$oIEobj = GUICtrlCreateObj($oIE, 7, 5, 660, $hGUI_height)
;$oNav = _IENavigate($oIE, @ScriptDir & '/contactlist.html', 0)
$oNav = _IENavigate($oIE, $address)

$oIE.document.body.scroll = "no"

$oIE.document.body.style.overflow = "hidden"
$hENTER = GUICtrlCreateDummy()
Dim $AccelKeys[1][2]=[["{ENTER}", $hENTER]]
GUISetAccelerators($AccelKeys)

$hGUI_child2 = GUICreate("", 112, 50, 280, 645, $WS_POPUP, $LAYERED_GUI + $WS_EX_MDICHILD + $WS_EX_TOPMOST, $hGUI_child)
If Not $bAero Then
    GUISetBkColor(0xE0F2F7)
    $hGUI_Font = $hGUI_child2
    GUISetFont(33, 100, Default, 'Segoe UI', $hGUI_Font, 5)
    GUICtrlCreateLabel(" = ", 0, 0, 112, 50, $SS_CENTER + $SS_CENTERIMAGE)
EndIf
GUISetCursor(0, 1, $hGUI_child2)

If $bAero Then
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\panel.png')
    SetBitmap($hGUI, $hImage)
    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\roundbn.png')
    SetBitmap($hGUI_child2, $hImage)
    _GDIPlus_Shutdown()
EndIf

GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

GUISetState(@SW_SHOW, $hGUI)
If $bAero Then GUISetState(@SW_SHOW, $hGUI_child)
GUISetState(@SW_SHOW, $hGUI_child2)

While 1
    $mPos = MouseGetPos()
    If BitAnd($hidden, $mPos[1] = 0, $timer = 0) Then
        $timer = TimerInit()
        Sleep(10)
    ElseIf $mPos[1] <> 0 Then
        $timer = 0
        $tdiff = 0
    EndIf
    If $timer <> 0 Then $tdiff = TimerDiff($timer)
    If BitAND($hidden, Not $tucked, $mPos[1] <> 0, Not $tucking) Then
        $tuck = True
        $untucking = False
        $tucking = True
        AdlibRegister("TuckAway", 2500)
    ElseIf BitAND($hidden, $tucked, $mPos[1] = 0, Not $untucking, $tdiff > 450) Then
        $tuck = False
        $tucking = False
        $untucking = True
        AdlibRegister("TuckAway")
    ElseIf BitAND($hidden, Not $tucked, $mPos[1] = 0, $tucking) Then
        AdlibUnRegister("TuckAway")
        $tuck = False
        $tucking = False
    EndIf
    $msg = GUIGetMsg(1)
    Switch $msg[1]
        Case $hGUI
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE, $GUI_EVENT_SECONDARYUP
                    Exit
            EndSwitch
        Case $hGUI_child
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE, $GUI_EVENT_SECONDARYUP
                    Exit
                Case $hENTER
 ;                   If $qsInfocus Then _IESearchText($oIE, GUICtrlRead($qsInput), 1)
            EndSwitch
        Case $hGUI_child2
            Switch $msg[0]
                Case $GUI_EVENT_PRIMARYDOWN
                    If Not $hidden Then
                        HidePanel()
                    Else
                        HidePanel(False)
                    EndIf
            EndSwitch
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $iCode = BitShift($wParam, 16)
    Local $nIDFrom = BitAND($wParam, 0xFFFF)

    Return $GUI_RUNDEFMSG
EndFunc

Func _IESearchText($oIE, $sFindText, $fNext = 0)
    $docRange = $oIE.document.body.createTextRange()
    $docRange.execCommand("backColor", false, "#ffffff");
    If $sFindText <> '' Then
        If $fNext = 0 Then
            Global $oRange = $oIE.document.body.createTextRange()
        Else
            $oRange.moveStart("character")
        EndIf
        If $oRange.FindText($sFindText) Then
            $oRange.execCommand("backColor", false, "fdee00");
            $oRange.scrollIntoView()
        Else
            $oRange = $oIE.document.body.createTextRange()
        EndIf
    Else
        $oIE.document.parentwindow.scroll(0)
    EndIf
EndFunc

Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
    Switch $wParam
        Case 0x00780000
            $oIE.document.parentwindow.scrollBy(0, -150)
        Case 0xFF880000
            $oIE.document.parentwindow.scrollBy(0, 150)
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Func HidePanel($hide = True)
    AdlibUnRegister("TuckAway")
    If $hide Then
        $tucked = False
        $untucked = True
        $hidden = True
        For $i = -1 to -663 Step - 1
            WinMove($hGUI, "", Default, $i)
        Next
    Else
        $tucked = False
        $untucked = False
        $hidden = False
        For $i = -664 to -4 Step 1
            WinMove($hGUI, "", Default, $i)
        Next
    EndIf
EndFunc

Func TuckAway()
    If $tuck Then
        $tucking = False
        $untucked = False
        $tucked = True
        For $i = 663 to 695 Step 1
            WinMove($hGUI, "", Default, -$i)
            Sleep(10)
        Next
    Else
        $untucking = False
        $tucked = False
        For $i = 695 to 663 Step - 1
            WinMove($hGUI, "", Default, -$i)
            Sleep(10)
        Next
    EndIf
    AdlibUnRegister("TuckAway")
EndFunc

Func SetBitmap($hGUI, $hImage, $iOpacity = 255)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow($hGUI, $hGUI, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc

 

Link to comment
Share on other sites

@Danp2 It didn't seem to do the trick but it loads very quick! I'm really puzzled on this one. I wish there were other options to test this against. My arrow keys let me move but it's that left mouse button to pan around that doesn't want to work for some reason.

Edited by aa2zz6
Link to comment
Share on other sites

Using IECreateEmbedded is a pain. Alternative solution is to launch Edge as minimized and insert directly into the GUI (Fast & Easy)

; Launch Edge outside of GUI and then insert it
ShellExecute("microsoft-edge:https://egas.maps.arcgis.com/apps/webappviewer/index.html?id=e749ca4f26ff4b69b090ff548f042baf", "", "","", @SW_MINIMIZE)
WinWaitActive("[REGEXPTITLE:(?i)(.*'Microsoft Edge')]", "", 3)
$Nhandle = WinGetHandle("Microsoft Edge")
_WinAPI_SetParent($Nhandle, $hGUI_child)
_WinAPI_SetWindowLong($Nhandle, $GWL_STYLE, $WS_POPUP + $WS_VISIBLE)
WinMove($Nhandle, "", -20, -105,@DesktopWidth + 25, $hGUI_height / 2 + 110)

 

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...