Komplettumbau und Pseudo-Objekte

  • Hallo,

    da ich grundsätzlich beim Programmieren nicht viel tippen möchte, möchte ich gern in den kommenden Versionen in allen Funktionsaufrufen die Übergabe des $Sockets rauswerfen. :D:whistling:

    Würde dann so aussehen:

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If _FFConnect2() Then
    _FFOpenURL2("http://www.google.de")

    [/autoit] [autoit][/autoit] [autoit]

    If _FFObjCreate("google", "window.content.document") Then
    MsgBox(64, "Cookie", _FFObj("google.cookie"))
    MsgBox(64, "Domain", _FFObj("google.domain"))
    _FFObjDelete("google")
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]

    und die Funktionen dazu (ein Teil nur Wrapper auf die aktuellen Funktionen):

    Spoiler anzeigen
    [autoit]


    Func _FFObj($sObject)
    $RetVal = _FFSetGet($_FF_GLOBAL_SOCKET, "try{FF_AutoItScript." & $sObject & ";}catch(e){'Err'};")
    If Not @error And $RetVal <> "Err" Then
    Return $RetVal
    Else
    SetError(1)
    Return 0
    EndIf
    EndFunc ;==>_FFObj
    ;===============================================================================
    Func _FFObjCreate($sNewObject, $sObject)
    If StringRegExp($sNewObject, "[\W]+") Then Return 0
    $RetVal = _FFSetGet($_FF_GLOBAL_SOCKET, "try{FF_AutoItScript." & $sNewObject & "=" & $sObject & "}catch(e){};FF_AutoItScript." & $sNewObject & " ? 1 : 0;")
    SetError(Number($RetVal))
    Return $RetVal
    EndFunc ;==>_FFObjCreate
    ;===============================================================================
    Func _FFObjDelete($sObject)
    Return _FFSetGet($_FF_GLOBAL_SOCKET, "delete FF_AutoItScript." & $sObject & ";!FF_AutoItScript." & $sObject & " ? 1 : 0;")
    EndFunc ;==>_FFObjDelete
    ;===============================================================================
    Func _FFConnect2()
    If Not IsDeclared("_FF_GLOBAL_SOCKET") Then
    Global $_FF_GLOBAL_SOCKET = -1
    EndIf
    $_FF_GLOBAL_SOCKET = _FFConnect()
    Return _FFIsConnected()
    EndFunc
    ;===============================================================================
    Func _FFOpenURL2($sURL)
    _FFOpenURL($_FF_GLOBAL_SOCKET, $sURL)
    EndFunc
    ;===============================================================================
    Func _FFIsConnected()
    If $_FF_GLOBAL_SOCKET > -1 Then Return 1
    Return 0
    EndFunc

    [/autoit]

    mal abgesehen von der "kleinen" Inkompatibilität zu bestehenden Programmen, die sich leicht mit Suchen und Ersetzen wieder herstellen läßt, entstehen dadurch keine großen Nachteile, außer man möchte über mehrere Sockets gleichzeitig arbeiten. was aber (für mich) nun weniger Aufwand darstellt, als ständig diese Socket Variable "mitzuschleppen".

    Die Objekt-Funktionen waren nur ein Nebenprodukt beim "Rumspielen", kann man die brauchen?

    Was haltet Ihr davon?

    Viele Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (25. März 2009 um 10:39)

  • Na gut, da ich hier keine Proteststürme sehe, hier schon mal die ersten Version davon:

    FF.au3 V0.5.0.0

    Um das obige Beispiel zu wiederholen:

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If _FFConnect() Then
    _FFTabAdd("google.com")

    [/autoit] [autoit][/autoit] [autoit]

    If _FFObjCreate("google", "window.content.document") Then
    MsgBox(64, "Cookie", _FFObj("google.cookie"))
    MsgBox(64, "Domain", _FFObj("google.domain"))
    _FFObjDelete("google")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _FFTabClose("Google","label")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit
    ;===============================================================================
    Func _FFObj($sObject)
    $RetVal = _FFSetGet("try{FF_AutoItScript." & $sObject & ";}catch(e){'Err'};")
    If Not @error And $RetVal <> "Err" Then
    Return $RetVal
    Else
    SetError(1)
    Return 0
    EndIf
    EndFunc ;==>_FFObj
    ;===============================================================================
    Func _FFObjCreate($sNewObject, $sObject)
    If StringRegExp($sNewObject, "[\W]+") Then Return 0
    $RetVal = _FFSetGet("try{FF_AutoItScript." & $sNewObject & "=" & $sObject & "}catch(e){};FF_AutoItScript." & $sNewObject & " ? 1 : 0;")
    SetError(Number($RetVal))
    Return $RetVal
    EndFunc ;==>_FFObjCreate
    ;===============================================================================
    Func _FFObjDelete($sObject)
    Return _FFSetGet("delete FF_AutoItScript." & $sObject & ";!FF_AutoItScript." & $sObject & " ? 1 : 0;")
    EndFunc ;==>_FFObjDelete

    [/autoit]

    Grüße
    Stilgar

  • Noch mehr "Objekte" :P :

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If _FFConnect() Then
    _FFTabAdd("google.com")

    [/autoit] [autoit][/autoit] [autoit]

    If _FFObjNew("google", "window.content.document") Then
    MsgBox(64, "Cookie", _FFObj("google.cookie"))
    MsgBox(64, "Domain", _FFObj("google.domain"))
    _FFObjDelete("google") ; :D

    [/autoit] [autoit][/autoit] [autoit]

    $sInput = _FFObjGet("q", "name") ; Objekt mit Namen "q" (es wird kein Objekt sondern ein String zurückgegeben)
    _FFObj($sInput, "value", "autoit") ; Das Attribut "value" von Objekt "q" auf "autoit" setzen
    MsgBox(64, "Suche: ", _FFObj($sInput, "value")) ; value wieder auslesen
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _FFTabClose("Google", "label")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]


    die Funktionen dazu:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    Func _FFObjGet($sObject, $sMode = "id", $iIndex = 0)
    Local $sRet
    Switch StringLower($sMode)
    Case "id"
    $sRet = "window.content.document.getElementById('" & $sObject & "')"
    Case "name"
    $sRet = "window.content.document.getElementsByName('" & $sObject & "')[" & $iIndex & "]"
    Case "class"
    $sRet = "window.content.document.getElementsByClassName('" & $sObject & "')[" & $iIndex & "]"
    Case "tag"
    $sRet = "window.content.document.getElementsByTagName('" & $sObject & "')[" & $iIndex & "]"
    Case Else
    SetError(1)
    Return ""
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Local $RetVal = _FFCmd($sRet & "?1:0;")
    If Not @error And $RetVal = 1 Then Return $sRet
    SetError(1)
    Return ""
    EndFunc ;==>_FFObjGet
    ;===============================================================================
    Func _FFObj($sObject, $sAttrib = "", $vValue = "")

    [/autoit] [autoit][/autoit] [autoit]

    If StringLeft($sObject, 1) = "." Then $sObject = "window.content.document" & $sObject
    If Not StringInStr($sObject, "window.content") Then $sObject = "FFau3." & $sObject
    If $sAttrib <> "" Then
    If Not StringInStr($sAttrib,"(") Then
    If Not _FFCmd($sObject & ".hasAttribute('" & $sAttrib & "')") Then
    SetError(1)
    Return ""
    EndIf
    EndIf
    $sObject &= "." & $sAttrib

    [/autoit] [autoit][/autoit] [autoit]

    If IsInt($vValue) Then
    $sObject &= "=" & $vValue
    ElseIf IsBool($vValue) Then
    $sObject &= "=" & __FFB2S($vValue)
    ElseIf $vValue <> "" Then
    $sObject &= "='" & $vValue & "'"
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $RetVal = _FFCmd($sObject)
    If Not @error And $RetVal <> -3 Then
    Return $RetVal
    Else
    SetError(1)
    Return 0
    EndIf
    EndFunc ;==>_FFObj
    ;===============================================================================
    Func _FFObjNew($sNewObject, $sObject)
    If StringRegExp($sNewObject, "[\W]+") Then Return 0
    $RetVal = _FFCmd("try{FFau3." & $sNewObject & "=" & $sObject & "}catch(e){};FFau3." & $sNewObject & " ? 1 : 0;")
    SetError(Number($RetVal))
    Return $RetVal
    EndFunc ;==>_FFObjNew
    ;===============================================================================
    Func _FFObjDelete($sObject)
    Return _FFCmd("delete FFau3." & $sObject & ";!FFau3." & $sObject & " ? 1 : 0;")
    EndFunc ;==>_FFObjDelete

    [/autoit]

    Grüße
    Stilgar