Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
    AutoIt Version : 3.3.0.0
    Auteur:         GaRy delaMer
    Fonction du Script : Exemple
    Un petit navigateur web intégrer dans une GUI
#ce ----------------------------------------------------------------------------
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=GaRy deleMer WebBrowser.Exe
#AutoIt3Wrapper_Compression=4
#Tidy_Parameters=/sf
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Region ;**** Options AutoIt                           ****
Opt('MustDeclareVars', 1)
Opt('GUICloseOnESC', 1)
#EndRegion ;===============================================
#Region ;**** Include AutoIt                           ****
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <INet.au3>
#include <Misc.au3>
#include <GuiStatusBar.au3>
#include <ScreenCapture.au3>
#EndRegion ;===============================================
Global $Titre_Appli = "GaRy delaMer FileUpload://"
If Not @Compiled Then
    _Singleton($Titre_Appli)
    HotKeySet("!x", "_GUIEvent_Quit")
EndIf
#include <WinHTTPConstants.au3>
#include <WinHTTP.au3>
#Region ;**** Gui, ActiveX _IE, Menu                ****
Global $hGUI = GUICreate($Titre_Appli, @DesktopWidth * 3 / 5, @DesktopHeight * 3 / 5, -1, -1, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
;; les menus
Global $filemenu = GUICtrlCreateMenu("&Page")
Global $urlitem = GUICtrlCreateMenuItem("&Aller à l'adresse", $filemenu)
Global $fileitem = GUICtrlCreateMenuItem("&Ouvre un fichier", $filemenu)
Global $htmlitem = GUICtrlCreateMenuItem("&Coller du code html", $filemenu)
GUICtrlCreateMenuItem("", $filemenu)
Global $exititem = GUICtrlCreateMenuItem("&Quitter", $filemenu)
;; Le contrôle ActivX IE
_IEErrorHandlerRegister()
Global $oIE = _IECreateEmbedded()
Global $hIE = GUICtrlCreateObj($oIE, 22, 0)
; Assign events to UDFs starting with IEEvent_
Global $LoadComplete = False
Global $oIEEvent = ObjEvent($oIE, "_IEEvent_", "DWebBrowserEvents2")
Global $URL = "about:blank"
_IENavigateComplete($URL)
GUIRegisterMsg($WM_SIZE, "_My_WM_SIZE")
GUISetState() ;Show GUI
_GUIEVENT_Resize()
#EndRegion ;===============================================
Global $testmenu = GUICtrlCreateMenu("&Test")
Global $post_files = GUICtrlCreateMenuItem("&Poster un fichier chez Free.fr", $testmenu)
While 1
    Local $msg = GUIGetMsg()
    Switch $msg
        Case $post_files
            _Post_Files()
        Case $urlitem
            Local $surl = InputBox("Entrer l'adresse", "Saisir l'adresse du site")
            If $surl <> "" Then _IENavigate($oIE, $surl) 
        Case $fileitem
            Local $hFile = FileOpenDialog("Ouvre une source HTML", @ScriptDir, _
                    "Source html (*.html; *.htm; *.txt)|Tous (*.*)", 11, "", WinGetHandle($hGUI))
            If Not @error Then
                Local $html = FileRead($hFile)
                If $html <> "" Then
                    _IEBodyWriteHTML($oIE, $html)
                EndIf
            EndIf
        Case $htmlitem
            Local $html = ClipGet()
            If IsString($html) And $html <> "" Then _IEBodyWriteHTML($oIE, $html)
        Case $GUI_EVENT_CLOSE, $exititem
            _GUIEvent_Quit()
    EndSwitch
WEnd
Func _Post_Files()
    Local $hOpen = _WinHttpOpen("AutoIt v3.3.0", $WINHTTP_ACCESS_TYPE_DEFAULT_PROXY)
    Local $URL = _WinHttpCrackUrl("http://dl.free.fr/index_nojs.pl")
    Local $Host = $URL[2]
    Local $Port = $URL[3]
    Local $Referrer = "http://" & $URL[2]
    Local $QueryString = $URL[6] & $URL[7]
    Local $hConnect = _WinHTTPConnect($hOpen, $Host, $Port)
    ;; Juste pour retrouver l'adresse pour faire le post peu être caché
    Local $hRequest = _WinHttpOpenRequest($hConnect, "GET", $QueryString, "HTTP/1.1", $Referrer)
    _WinHttpSendRequest($hRequest)
    _WinHttpReceiveResponse($hRequest)
    Local $html[3] = ["", _WinHttpQueryHeaders($hRequest), _WinHttpQueryOption($hRequest, $WINHTTP_OPTION_URL)]
    If _WinHttpQueryDataAvailable($hRequest) Then
        Local $temp
        While 1
            $temp = _WinHttpReadData($hRequest)
            If $temp = "" Then ExitLoop
            $html[0] &= $temp
        WEnd
        $temp = ""
    EndIf
    _WinHttpCloseHandle($hRequest)
    _Debug($html[1] & $html[2] & @LF)
    _IEDocWriteHTML($oIE, $html[0])
    _ScreenCapture_Capture(@TempDir & "\capture.jpg", 100, 100, 100, 100, False)
    Local $oForm = _IEFormGetCollection($oIE, 1)
    Local $URL = _WinHttpCrackUrl("http://dl.free.fr" & $oForm.action)
    Local $Host = $URL[2]
    Local $Port = $URL[3]
    Local $Referrer = "http://" & $URL[2]
    Local $QueryString = $URL[6] & $URL[7]
    Local $email = InputBox("Envoie de fichier sur Free", _
            "On y va !!!" & @LF & @LF & _
            "http://dl.free.fr" & $oForm.action & @LF & @LF & _
            "Entrez votre adresse email" & @LF & _
            "pour être notifié par free de l'adresse pour le télécharger.", "", "", 360, -1)
    If $email  = "" Then Return
    Local $hRequest = _WinHttpOpenRequest($hConnect, "POST", $QueryString, "HTTP/1.1", $Referrer)
    Local $form_files[1][2] = [["ufile", @TempDir & "\capture.jpg"]]
    Local $form_fields [7][2] = [ _
        ["mail1", $email], _
        ["mail2", ""], _
        ["mail3", ""], _
        ["mail4", ""], _
        ["message", "Test AutoIt"], _
        ["password", ""], _
        ["submit", "Envoyer"]]
    Local $FormDatas = Encode_MultiPart_FormData($form_fields, $form_files)
    Local $content_type = 'Content-Type: ' & $FormDatas[0] & @CRLF
    _WinHttpSendRequest($hRequest, $content_type, $WINHTTP_NO_REQUEST_DATA, StringLen($FormDatas[1]))
    _WinHTTPWriteData($hRequest, StringToBinary($FormDatas[1]), 1)
    _WinHttpReceiveResponse($hRequest)
    Local $post[3] = ["", _WinHttpQueryHeaders($hRequest), _WinHttpQueryOption($hRequest, $WINHTTP_OPTION_URL)]
    If _WinHttpQueryDataAvailable($hRequest) Then
    EndIf
    ; Pour la gestion du refresh en attente du retour serveur sur le traitement du fichier
    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hOpen)
    ; Comme la page de free fais un refresh toute les 2 secondes
    ; je lui Donne l'adresse de la page au lieu du HTML source
    _IENavigate($oIE, $post[2])
    _Debug($post[1] & $post[2] & @LF)
EndFunc   ;==>_Post_Files
#Region ;============= Fonctions ==========================
#Region ;; GUIEvent
Func _GUIEvent_Quit()
    Exit
EndFunc   ;==>_GUIEvent_Quit
Func _GUIEvent_Resize()
    Local $Size = WinGetClientSize($hGUI, "")
    GUICtrlSetPos($hIE, 5, 5, $Size[0] - 10, $Size[1] - 10)
EndFunc   ;==>_GUIEvent_Resize
Func _IENavigateComplete($URL)
    _IENavigate($oIE, $URL)
    While Not $LoadComplete
        Sleep(10)
    WEnd
EndFunc   ;==>_IENavigateComplete
Func _My_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
    _GUIEvent_Resize()
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_My_WM_SIZE
#EndRegion
#Region ;; IEEvent
Func _IEEvent_BeforeNavigate2($pDisp, $vUrl, $vFlags, $vTargetFrameName, $vPostData, $vHeaders, $bCancel)
;~  _DebugPrint("_IEEvent_BeforeNavigate2(""" & $vUrl & """)")
    $LoadComplete = False
EndFunc   ;==>_IEEvent_BeforeNavigate2
Func _IEEvent_DocumentComplete($pDisp, $sURL)
    $LoadComplete = True
;~  _Debug("_IEEvent_DocumentComplete()")
EndFunc   ;==>_IEEvent_DocumentComplete
Func _IEEvent_DownloadComplete()
;~  _DebugPrint("_IEEvent_DownloadComplete()")
EndFunc   ;==>_IEEvent_DownloadComplete
Func _IEEvent_NavigateComplete2($pDisp, $sURL)
;~  _DebugPrint("_IEEvent_NavigateComplete2(""" & $sURL & """)")
    If StringInStr($sURL, "javascript:") Then Return
    $URL = $sURL
EndFunc   ;==>_IEEvent_NavigateComplete2
Func _IEEvent_ProgressChange($Progress, $ProgressMax)
;~  _DebugPrint("_IEEvent_ProgressChange(""" & $Progress & ", " & $ProgressMax & """)")
    ConsoleWrite($Progress & ", " & $ProgressMax & " ")
    If $Progress = -1 Then
        ConsoleWrite("Chargement de la page terminé" & @LF)
    EndIf
    If $ProgressMax = 0 Then
        ConsoleWrite("Chargement de la page... " & @LF)
    EndIf
    Local $percent = Int(($Progress * 100) / $ProgressMax)
    If $Progress > 0 Then
        ConsoleWrite($percent & "%" & @LF)
    EndIf
EndFunc   ;==>_IEEvent_ProgressChange
Func _IEEvent_StatusTextChange($sText)
;~  _DebugPrint("_IEEvent_StatusTextChange(""" & $sText & """)")
    If $sText = "" Then $sText = "Prêt"
EndFunc   ;==>_IEEvent_StatusTextChange
Func _IEEvent_TitleChange($sText = "")
;~  _DebugPrint("_IEEvent_TitleChange(""" & $sText & """)")
    If $sText = "" Then $sText = _IEPropertyGet($oIE, "title")
    WinSetTitle($hGUI, "", $Titre_Appli & $sText)
EndFunc   ;==>_IEEvent_TitleChange
#EndRegion
#Region ;; Debug
Func _Debug($title, $line = @ScriptLineNumber, $scriptfile = @ScriptName)
    Local $debug
    $debug &= $title & @LF
    $debug &= _IEPropertyGet($oIE, "title") & "(" & _IEPropertyGet($oIE, "locationurl") & ")" & @LF
    _IEFrameGetCollection($oIE)
    $debug &= "Nb de frame: " & @extended & @LF
    _IEImgGetCollection($oIE)
    $debug &= "Nb d'image: " & @extended & @LF
    _IELinkGetCollection($oIE)
    $debug &= "Nb de lien: " & @extended & @LF
    Local $oForms = _IEFormGetCollection($oIE)
    $debug &= "Nb de formulaire: " & @extended & @LF
    For $oForm In $oForms
        Local $Items = _IEFormElementGetCollection($oForm)
        $debug &= @LF & "++Form: " & $oForm.name & " Action: " & $oForm.action & @LF
        For $Item In $Items
            $debug &= @TAB & "<" & $Item.type & "> Name: " & $Item.name
            If $Item.type = "file" Then
                $debug &= " file: désactivé non affiché " & $Item.value & @LF
            ElseIf $Item.type = "textarea" Then
                $debug &= " Value: textarea non affiché" & @LF
            Else
                $debug &= " Value=" & $Item.value & @LF
            EndIf
        Next
    Next
    _DebugPrint($debug, $line, $scriptfile)
EndFunc   ;==>_Debug
Func _DebugPrint($s_text, $line = @ScriptLineNumber, $scriptfile = @ScriptName)
    ConsoleWrite( _
            "!===========================================================" & @LF & _
            $scriptfile & "(" & $line & ",1) AutoIt " & @AutoItVersion & @LF & _
            "+======================================================" & @LF & _
            "" & $s_text & @LF & _
            "+======================================================" & @LF)
EndFunc   ;==>_DebugPrint
#EndRegion
#EndRegion ;===============================================