Page 1 sur 1

[Ex] AutoItObject

Posté : jeu. 09 déc. 2010 17:11
par matwachich
Je ne sais pas si vous connaissez cet Bibliothèque, elle sert à utiliser une syntaxe de POO (Programmation Orientée Objet) avec AutoIt.

En tous cas, je me dis qu'elle en vaut la peine, alors j'ai fait un petit exemple qui montre sont fonctionnement basique (Ceux qui ont lu le cours de M@teo21 du site du zero sur le C++ reconnaîtront cet exemple!)
personne.au3
(2.9 Kio) Téléchargé 341 fois
Et maintenant, avec 2 classes, enchevêtrées!

Re: [Ex] AutoItObject

Posté : jeu. 09 déc. 2010 19:16
par Yogui
Super exemple bien plus parlant que ceux fournit dans l'archive :) en tout cas plus ludique

Re: [Ex] AutoItObject

Posté : jeu. 09 déc. 2010 19:51
par matwachich
Bah heureux que ça vous plaise!
Je compte ajouter des trucs, genre (comme le tuto C++) une 2e classe (Arme) et de faire (si possible en AutoIt) une interaction entre les 2 classes!

Re: [Ex] AutoItObject

Posté : dim. 12 déc. 2010 00:00
par matwachich
Voila c'est fait! (voire 1er post)

Re: [Ex] AutoItObject

Posté : dim. 12 déc. 2010 11:30
par funkey
Grand exemple.
Je viens de commencer un peu avec AutoItObject.
Voici un échantillon pour un dialogue de download:

Code : Tout sélectionner

#include <AutoItObject.au3>
#include <WinAPI.au3>

;===============================================================================
#API "Windows Progress Dialog"
; IProgressDialog
;===============================================================================

Global Const $PROGDLG_NORMAL = 0x00000000 ;default normal progress dlg behavior
Global Const $PROGDLG_MODAL = 0x00000001 ; the dialog is modal to its hwndParent (default is modeless)
Global Const $PROGDLG_AUTOTIME = 0x00000002 ; automatically updates the "Line3" text with the "time remaining" (you cant call SetLine3 if you passs this!)
Global Const $PROGDLG_NOTIME = 0x00000004 ; we dont show the "time remaining" if this is set. We need this if dwTotal < dwCompleted for sparse files
Global Const $PROGDLG_NOMINIMIZE = 0x00000008 ; Do not have a minimize button in the caption bar.
Global Const $PROGDLG_NOPROGRESSBAR = 0x00000010 ; Don't display the progress bar
Global Const $PROGDLG_MARQUEEPROGRESS = 0x00000020 ; Vista and above only
Global Const $PROGDLG_NOCANCEL = 0x00000040 ; Vista and above only

Global Const $PDTIMER_RESET = 0x00000001
Global Const $PDTIMER_PAUSE = 0x00000002
Global Const $PDTIMER_RESUME = 0x00000003

Global Const $AVI_SEARCH = 150
Global Const $AVI_SEARCH_DOC = 151
Global Const $AVI_SEARCH_PC = 152
Global Const $AVI_MOVE = 160
Global Const $AVI_COPY = 161
Global Const $AVI_DELETE = 162
Global Const $AVI_EMPTY_RECYCLEBIN = 163
Global Const $AVI_DELETE_DIRECT = 164
Global Const $AVI_COPY_DOC = 165
Global Const $AVI_SEARCH_IE = 166
Global Const $AVI_MOVE_OLD = 167
Global Const $AVI_COPY_OLD = 168
Global Const $AVI_DELETE_DIRECT_OLD = 169
Global Const $AVI_DOWNLOAD = 170

;===============================================================================
#interface "IProgressDialog"
Global Const $sCLSID_IProgressDialog = "{F8383852-FCD3-11d1-A6B9-006097DF5BD4}"
Global Const $sIID_IProgressDialog = "{EBBC7C04-315E-11d2-B62F-006097DF5BD4}"

; Definition
Global Const $dtagIProgressDialog = $dtagIUnknown & _
        "StartProgressDialog hresult(hwnd;ptr;dword;ptr);" & _
        "StopProgressDialog hresult();" & _
        "SetTitle hresult(wstr);" & _
        "SetAnimation hresult(handle;uint);" & _
        "HasUserCancelled int();" & _
        "SetProgress hresult(dword;dword);" & _
        "SetProgress64 hresult(uint64;uint64);" & _
        "SetLine hresult(dword;wstr;int;ptr);" & _
        "SetCancelMsg hresult(wstr;ptr);" & _
        "Timer hresult();"
; List
Global Const $ltagIProgressDialog = $ltagIUnknown & _
        "StartProgressDialog;" & _
        "StopProgressDialog;" & _
        "SetTitle;" & _
        "SetAnimation;" & _
        "HasUserCancelled;" & _
        "SetProgress;" & _
        "SetProgress64;" & _
        "SetLine;" & _
        "SetCancelMsg;" & _
        "Timer;"
;===============================================================================

_AutoItObject_StartUp()

Global $FileToDownload = "http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe"
Global $FileDestination = @ScriptDir & "/autoit-v3-setup.exe"

Global $oDlg = _AutoItObject_ObjCreate($sCLSID_IProgressDialog, $sIID_IProgressDialog, $dtagIProgressDialog)

$oDlg.SetTitle("Downloading...")
$oDlg.SetAnimation(Number(_WinAPI_GetModuleHandle("shell32.dll")), $AVI_DOWNLOAD)
$oDlg.SetLine(1, "autoit-v3-setup.exe from http://www.autoitscript.com", 0, 0)
$oDlg.StartProgressDialog(0, 0, $PROGDLG_NOMINIMIZE, 0)

Global $FileSize = InetGetSize($FileToDownload)
Global $hDownload = InetGet($FileToDownload, $FileDestination, 1, 1)
Global $Loaded, $Loaded_old[6], $TimeConstant = 100000
Global $dwCompleted = 0
Global $Diff, $Start = TimerInit()

Do
    Sleep(500)
    $Diff = TimerDiff($Start)
    $dwCompleted = StringFormat("%.0f", $Diff / 100)
    $Canceled = $oDlg.HasUserCancelled()
    $Loaded = InetGetInfo($hDownload, -1)
    $TimeConstant = StringFormat("%.0f", 1 / (($Loaded[0] - $Loaded_old[0]) * 2) * ($FileSize - $Loaded[0]) * 10) + $dwCompleted
    $oDlg.SetProgress($dwCompleted, $TimeConstant)
    $oDlg.SetLine(2, StringFormat("%.0f %% from %.2f MB (%.0f kB/sec)", $Loaded[0] / $FileSize * 100, $FileSize / (1024 * 1024), ($Loaded[0] - $Loaded_old[0]) * 2 / 1024), 0, 0)
    $Loaded_old = $Loaded
Until $Canceled[0] = 1 Or $Loaded[2]

InetClose($hDownload)

$oDlg.StopProgressDialog()

If $Loaded[2] Then
    MsgBox(64, "Info", "File successfully downloaded")
Else
    FileDelete($FileDestination)
    MsgBox(16, "Error", "The download was aborted")
EndIf

_AutoItObject_Shutdown()