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 ;===============================================