I'm trying to intercept the Ctrl+F function in IE so that I can achieve a similar effect of words being highlighted via the input on my gui. To explain better here is my code.
What I want is to basically be able to type stuff into the input box that follows the label "Quick find:" and for any data that partially matches input on the displayed html page to be highlighted as if I was using Ctrl+F search in IE. You can see the behaviour of Ctrl+F highlight by clicking into the IE object and then pressing Ctrl+F. I would also like for it to auto-scroll to the *best* match data. Essentially same as Ctrl+F in IE.
Place all attachments - the tow PNG files and the HTML file in script folder to get the full effect.
Chipm, Chimp, Chimp, <---- just trying to summon user Chimp who seems to have very good knowledge of IE
#include-once #NoTrayIcon #AutoIt3Wrapper_Outfile=Example.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_UseUpx=n #AutoIt3Wrapper_UseX64=n #include <GDIPlus.au3> #include <WindowsConstants.au3> #include <GUIConstants.au3> #include <WinAPIEx.au3> #include <IE.au3> 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 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(18, 100, Default, 'Segoe UI', $hGUI_Font, 5) GUICtrlCreateLabel('Quick find:', 10, 25) GUICtrlCreateInput('', 150, 20, 100, 35) $oIE = _IECreateEmbedded() $oIEobj = GUICtrlCreateObj($oIE, 10, 85, 650, 550) $oNav = _IENavigate($oIE, @ScriptDir & '/example.html', 0) $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") 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 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_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