Option Explicit

  • Hallo! Ich habe ein Problem mit Autoit. Ich habe folgenden Code in meiner Datei:

    Beim Ausführen kommt allerdings

    Zitat

    >"D:\Programme\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Dokumente und Einstellungen\Nico\Eigene Dateien\netsend 0.1.au3"
    C:\Dokumente und Einstellungen\Nico\Eigene Dateien\netsend 0.1.au3 (2) : ==> Missing separator character after keyword.:
    Option Explicit
    Option Explicit^ ERROR
    >Exit code: 1 Time: 0.323

    was mache ich falsch?

    P.S. auch wenn ich "Option Explicit On" habe, kommt der selbe Text, nur hal mit "Option Explicit On".

    Einmal editiert, zuletzt von pihreut (1. Februar 2009 um 02:06)

    • Offizieller Beitrag

    Das ist kein Autoit Sourcecode .Sieht nach VB aus.

    • Offizieller Beitrag

    Jup

  • naja net ganz, es VB ist Visual Basic und soweit ich das überblicke ist dein code das auch... :/ da wirst du mit autoit nur sehr bedingt - gernicht weiterkommen :/

    du möchtest wohl ein script haben das mit netsend arbeitet? Das ist mit autoit auch möglich, sowohl per cmd steuerung als auch direkt über die dll

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • wollte da jetzt nicht extra nen neuen thread aufmachen aber irgendwie krieg ich das überhaupt nicht hin eine nachricht über die netapi32.dll zu verschicken :(
    hier mein test :/

    Spoiler anzeigen
    [autoit]

    $string = "das ist ein test"
    $len = StringLen($string)*2

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

    $return = DllCall("netapi32.dll", "int", "NetMessageBufferSend", _
    "wstr", 0, _ ;servername
    "wstr", 0, _ ;msgname
    "wstr", "TEST", _ ;fromname
    "wstr", $string, _ ;buf
    "int", $len) ;buflen

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

    MsgBox(0, "RETURN", $return[0])

    [/autoit]

    Hilfe geholt hab ich mir hier:
    http://www.vb-magazin.de/forums/forums/t/1645.aspx
    http://msdn.microsoft.com/en-us/library/aa370605.aspx
    und von dem code oben...

    stimmen die parameter???? und das mit dem strlen??

    ich komm net klar, ich hab mich jetzt mittlerweile en bissl mit dlls beschäftigt und normalerweise klappt es auch ganz gut nur hier mit leider garnicht :(

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    • Offizieller Beitrag

    stimmen die parameter???? und das mit dem strlen??


    Du mußt natürlich auch den betreffenden Wert des Rückgabe array auslesen. ;)

    [autoit]

    $string = "das ist ein test"
    $len = StringLen($string)*2

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

    $ret = DllCall("netapi32.dll", "int", "NetMessageBufferSend", _
    "wstr", 0, _ ;servername
    "wstr", 0, _ ;msgname
    "wstr", "TEST", _ ;fromname
    "wstr", $string, _ ;buf
    "int", $len) ;buflen
    ;~ $ret[0] = Erfolgswert (0 = Fehler)
    ;~ $ret[1] = Param1 = servername
    ;~ $ret[2] = Param2 = msgname
    ;~ $ret[3] = Param3 = fromname
    ;~ $ret[4] = Param4 = buf
    ;~ $ret[5] = Param5 = buflen
    MsgBox(0, "RETURN", 'from: ' & $ret[3] & @LF & $ret[4])

    [/autoit]


    Edit: Törö -- Das war mein Post Nr. 3333 ==> Ihr dürft ein Glas Milch auf mein Wohl trinken :rofl:

  • jo aber was bringen mir diese rückgabewerte, das sind doch einfach die parameter des dllcalls, interessant ist doch nur $ret[0]? Und so nebenbei, eine Net send msg bekomm ich auch net :(

    ich bekomme halt bei $ret[0] 53, 1113, 1137 und son zeug... was bringt mir das?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    • Offizieller Beitrag

    interessant ist doch nur $ret[0]


    $ret[0] gibt immer den Erfolg/Nichterfolg zurück. Die Dll führt den gewünschten Befehl aus, die Parameter sind im Returnarray enthalten. Ob die Ausführung des Befehls für dich sichtbar wird, hängt natürlich von der begleitenden Programmierung ab. Ich habe mit der netapi32.dll noch nicht gearbeitet, aber vermutlich ist eine Gegenstelle vonnöten, die die Nachricht aufnimmt. Dass sie gesendet wird beweist der $ret[0] <> 0.

  • naja aber wenn ich mir doch sone kagg nachricht nur selbst schicken wil...
    per cmd geht ja alles wunderbar, ich meinte eig. das die wstr parameter bei mir stimmen, weil es halt in der vbanleitung da hieß das die ganzen strings im UNICODE gesendet werden und man deshalb auch die stringlänge * 2 nehmen muss...

    Zudem gibt es auf MSDN eine so schöne errortabelle

    Spoiler anzeigen


    ERROR_ACCESS_DENIED: The caller does not have the appropriate access to complete the operation.

    ERROR_INVALID_PARAMETER: A parameter is incorrect.

    ERROR_NOT_SUPPORTED: This request is not supported. This error is returned on Windows Vista and later.

    NERR_NameNotFound: The user name could not be found.

    NERR_NetworkError: A general failure occurred in the network hardware.


    , wie komme ich denn an diese rückgabewerte dran? mit @error vermutlich ja nicht :(

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    • Offizieller Beitrag

    Hier die Fehlerwerte:

    Spoiler anzeigen
    [autoit]

    Const $NERR_SUCCESS = 0
    Const $ERROR_ACCESS_DENIED = 5
    Const $ERROR_NOT_SUPPORTED = 50
    Const $ERROR_INVALID_PARAMETER = 87
    Const $NERR_BASE = 2100
    Const $NERR_NETWORKERROR = ($NERR_BASE + 36)
    Const $NERR_NAMENOTFOUND = ($NERR_BASE + 173)

    [/autoit]


    Allerdings stört mich da, dass SUCCESS mit 0 angegeben ist. Na gut, vielleicht lag ich da falsch - aber bisher hatte ich bei 0 als Return eigentlich immer 'nen Fehler.
    Ich würde mich aber nicht so sehr auf diese Geschichte festlegen. Du brauchst dafür den Nachrichtendienst - und dieser wird von (verantwortungsbewußten Usern) doch als Erstes abgeschaltet... ;)

    Übrigens hier der Link zu MSDN: http://msdn.microsoft.com/de-de/library/bb979101.aspx

  • BugFix

    jo diese fehlerwerte usw hatte ich alles schon^^ nur ich bekomme als return 53 oder 123... was soll ich daraus schließen? Mir geht es jetzt auch garnet um den nachrichtendienst, sondern vielmehr das es in VB mit dieser dll geht und in autoit irgendwie nicht (also mache ich wohl was falsch) und was das ist möchte ich gerne wissen...

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Es geht auch in AutoIt:

    Spoiler anzeigen
    [autoit]

    #include<WinAPI.au3>

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

    $ret = _NetMessageBufferSend("",@ComputerName,"","a test")
    ;~ $ret[0] = Erfolgswert (0 = Fehler)
    ;~ $ret[1] = Param1 = servername
    ;~ $ret[2] = Param2 = msgname
    ;~ $ret[3] = Param3 = fromname
    ;~ $ret[4] = Param4 = buf
    ;~ $ret[5] = Param5 = buflen
    MsgBox(0, "RETURN: " & $ret[0], 'from: ' & $ret[3] & @LF & $ret[4])

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

    Func _NetMessageBufferSend($Servername, $msgname, $fromname, $buf)
    Local $svType = "wstr", $fnType = "wstr"
    If $Servername = "" Then $svType = "ptr"
    If $fromname = "" Then $fnType = "ptr"
    Local $ret = DllCall("netapi32.dll", "int", "NetMessageBufferSend", _
    $svType, $Servername, _ ;servername
    "wstr", $msgname, _ ;msgname
    $fnType, $fromname, _ ;fromname
    "wstr", $buf, _ ;buf
    "dword", StringLen($buf)*2) ;buflen
    Return $ret
    EndFunc

    [/autoit]