1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. veronesi

Beiträge von veronesi

  • Aufruf eines zweiten Skripts mit Parameterübergabe und -rückgabe

    • veronesi
    • 27. November 2011 um 14:11

    Wenn Du auf dem Server mit RunWait arbeitest, dann kannst Du den Rückgabewert mit Exit zurückgeben.

    Also im Unterprogramm am Schluss einfach ein Exit($ReturnValue) und schon kommt dieser Wert bei RunWait im Hauptprogramm wieder raus :)

  • Remotestart

    • veronesi
    • 22. November 2011 um 11:53

    Hmm, schade.
    Wie kriegt man denn die GUI auch zu sehen?

  • Remotestart

    • veronesi
    • 22. November 2011 um 11:18

    Welche Rechte meinst Du?
    Das Script wird bei mir unter einem speziellen Benutzeraccount ausgeführt. Dieser Account ist per GPP bei allen Computern als lokaler Administrator eingetragen.
    Brauche ich sonst noch spezielle Rechte?

    Gruss Veronesi

  • Remotestart

    • veronesi
    • 22. November 2011 um 08:51

    Hallo zusammen

    Für ein Projekt wäre es gut, wenn ich auf einem Remotecomputer ein Programm starten könnte.
    Der Benutzer, welcher das Script ausführt, hat lokale Adminrechte auf dem Remotecomputer. (Alles Win7 x64)

    Natürlich könnte ich psexec verwenden. Doch es reizt mich schon, das alles in AutoIt zu lösen.
    Nach einiger Zeit suchen, konnte ich folgendes Script zusammenstellen:

    Spoiler anzeigen
    [autoit]

    ;http://msdn2.microsoft.com/en-us/library/aa389388(VS.85).aspx

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

    MsgBox(0, "", _RemoteStart('C:\Windows\System32\Notepad.exe', "localhost", 1))

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

    Func _RemoteStart($Program, $RemoteComputer, $ShowWindow = 1)
    ;ShowWindow = 1 => Show / 0 => Hide
    Local $oWMIService, $oStartup, $oConfig, $oProcess
    Local $iProcessID, $iReturn
    $oWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy, (Debug)}!\\" & $RemoteComputer & "\root\cimv2")

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

    $oStartup = $oWMIService.Get("Win32_ProcessStartup")
    $oConfig = $oStartup.SpawnInstance_
    $oConfig.ShowWindow = $ShowWindow

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

    $oProcess = $oWMIService.Get("Win32_Process")
    $iReturn = $oProcess.Create($Program, Default, $oConfig, $iProcessID)

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

    $oWMIService = 0
    $oStartup = 0
    $oConfig = 0
    $oProcess = 0

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

    If $iReturn <> 0 Then
    Return False
    Else
    Return True
    EndIf
    EndFunc ;==>_RemoteStart

    [/autoit]

    Auf dem lokalen Computer läuft es :D
    Doch wenn ich den String localhost auf den Remote-PC umstelle, bekomme ich zwar ein True zurück, doch es wird nichts ausgeführt.

    Kann mir jemand helfen?
    Gruss, Veronesi

  • StringRegExp Problem

    • veronesi
    • 25. Oktober 2011 um 12:58

    Hallo chip!

    Vielen Dank! :thumbup:
    Auf diese Lösung hätte ich selber kommen müssen!

    Besten Dank!
    Veronesi

  • StringRegExp Problem

    • veronesi
    • 25. Oktober 2011 um 12:41

    Hallo Zusammen

    Irgendwie komme ich mit dem StringRegExp überhaupt nicht klar. Für Euch ist das sicher eine 10 Sekunden Übung!

    [autoit]

    #include <Array.au3>
    $String = 'Local $pLFile = xyz' & @CRLF & _
    'Local $pSrc = xyz' & @CRLF & _
    'Local $SHA1 = xyz'

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

    $Pattern = '(?i)(?s)(.*)Local $pSrc =(?-s)(.*)'
    $aTest = StringRegExp($String, $Pattern, 1)
    MsgBox(0,"",$aTest & " / " & @error)
    _ArrayDisplay($aTest)

    [/autoit]

    Ich möchte mit dem Pattern vom $String folgenden Teil zurückbekommen: Local $pSrc = xyz
    Wobei diese Zeile nicht zwingend auf der ersten oder zweiten Zeile stehen muss. Zudem ist alles nach dem Gleichheitszeichen variabel!
    Mit anderen Worten: Ich möchte den String haben, welcher mit Local $pSrc = beginnt und zwar soweit, bis das nächste @CRLF kommt.

    Vielen Dank für Eure Hilfe!
    Veronesi

  • Ansteuern von LPT bzw. COM Schnittstelle?

    • veronesi
    • 23. Oktober 2011 um 08:35

    So etwas?

    Spoiler anzeigen
    [autoit]

    #cs
    UDF cfx.au3
    serial functions using kernel32.dll
    V1.0
    Uwe Lahni 2008
    V2.0
    Andrew Calcutt 05/16/2009 - Started converting to UDF
    V2.1
    Mikko Keski-Heroja 02/23/2011 - UDF is now compatible with Opt("MustDeclareVars",1) and Date.au3. Global variable $dll is renamed to $commDll.
    V2.2
    Veronesi 04/26/2011 - Changed some cosmetics and documentation / Add Function to set RTS and to get DCD Status
    #ce
    #include-once
    Global $commDll
    Global $hSerialPort
    Global $dcb_Struct
    Global $commtimeout
    Global $commtimeout_Struct
    Global $commState

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

    ;====================================================================================
    ; Function Name: _OpenCOMPort($CommPort, $CommBaud, $CommBits, $CommParity, $CommStop, $SetRTS)
    ; Description: Opens serial port
    ; Parameters: $CommPort
    ; $CommBits - 4-8
    ; $CommParity - 0=none, 1=odd, 2=even, 3=mark, 4=space
    ; $CommStop - 0 => 1 Stop bit / 1 => 1.5 Stop bits / 2 => 2 Stop bits
    ; $SetRTS - 0 = RTS => 0 / 1 = RTS => 1 / 2 = RTS handshake / 3 = RTS toggle
    ; Returns: on success, returns serial port id?
    ; on failure returns -1 and sets @error to 1
    ; Note:
    ;====================================================================================
    Func _OpenCOMPort($CommPort, $CommBaud = '9600', $CommBits = '8', $CommParity = '0', $CommStop = '0', $SetRTS = 0)
    #cs
    CommCtrl => fBitfields => http://msdn.microsoft.com/en-us/library/…4(v=vs.85).aspx
    http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt
    ' The fourteen actual DCB bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.
    ' FieldName Bit # Description
    ' ----------------- ----- ------------------------------
    ' fBinary 1 binary mode, no EOF check
    ' fParity 2 enable parity checking
    ' fOutxCtsFlow 3 CTS output flow control
    ' fOutxDsrFlow 4 DSR output flow control
    ' fDtrControl 5 DTR flow control type (2 bits)
    ' fDsrSensitivity 7 DSR sensitivity
    ' fTXContinueOnXoff 8 XOFF continues Tx
    ' fOutX 9 XON/XOFF out flow control
    ' fInX 10 XON/XOFF in flow control
    ' fErrorChar 11 enable error replacement
    ' fNull 12 enable null stripping
    ' fRtsControl 13 RTS flow control (2 bits)
    ' fAbortOnError 15 abort reads/writes on error
    ' fDummy2 16 reserved
    #ce

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

    Local Const $RTS_CONTROL_DISABLE = 0x0000
    Local Const $RTS_CONTROL_ENABLE = 0x1000
    Local Const $RTS_CONTROL_HANDSHAKE = 0x2000
    Local Const $RTS_CONTROL_TOGGLE = 0x3000
    Local $CommCtrl
    $commDll = DllOpen("kernel32.dll")
    Local $dcbs = "long DCBlength;long BaudRate; long fBitFields;short wReserved;" & _
    "short XonLim;short XoffLim;byte Bytesize;byte parity;byte StopBits;byte XonChar; byte XoffChar;" & _
    "Byte ErrorChar;Byte EofChar;Byte EvtChar;short wReserved1"

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

    Local $commtimeouts = "long ReadIntervalTimeout;long ReadTotalTimeoutMultiplier;" & _
    "long ReadTotalTimeoutConstant;long WriteTotalTimeoutMultiplier;long WriteTotalTimeoutConstant"

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

    Local Const $GENERIC_READ_WRITE = 0xC0000000
    Local Const $OPEN_EXISTING = 3
    Local Const $FILE_ATTRIBUTE_NORMAL = 0x80

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

    $dcb_Struct = DllStructCreate($dcbs)
    If @error Then Return SetError(1, 1, -1)

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

    $commtimeout_Struct = DllStructCreate($commtimeouts)
    If @error Then Return SetError(1, 1, -1)

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

    $hSerialPort = DllCall($commDll, "hwnd", "CreateFile", "str", "COM" & $CommPort, _
    "int", $GENERIC_READ_WRITE, _
    "int", 0, _
    "ptr", 0, _
    "int", $OPEN_EXISTING, _
    "int", $FILE_ATTRIBUTE_NORMAL, _
    "int", 0)
    If @error Then Return SetError(1, 1, -1)
    If Number($hSerialPort[0]) < 1 Then Return SetError(1, 1, -1)
    $commState = DllCall($commDll, "long", "GetCommState", "hwnd", $hSerialPort[0], "ptr", DllStructGetPtr($dcb_Struct))

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

    $CommCtrl = BitAND($CommCtrl, 0xFFFCFFF) ; RTS-Bits löschen
    Switch $SetRTS
    Case 0
    Case 1
    $CommCtrl = BitOR($CommCtrl, $RTS_CONTROL_ENABLE)
    Case 2
    $CommCtrl = BitOR($CommCtrl, $RTS_CONTROL_HANDSHAKE)
    Case 3
    $CommCtrl = BitOR($CommCtrl, $RTS_CONTROL_TOGGLE)
    Case Else
    Return SetError(1, 1, -1)
    EndSwitch

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

    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "DCBLength", DllStructGetSize($dcb_Struct))
    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "BaudRate", $CommBaud)
    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "Bytesize", $CommBits)
    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "fBitfields", Number($CommCtrl))
    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "Parity", $CommParity)
    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "StopBits", '0x' & $CommStop)
    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "XonLim", 2048)
    If @error Then Return SetError(1, 1, -1)
    DllStructSetData($dcb_Struct, "XoffLim", 512)
    If @error Then Return SetError(1, 1, -1)
    $commState = DllCall($commDll, "short", "SetCommState", "hwnd", $hSerialPort[0], "ptr", DllStructGetPtr($dcb_Struct))
    If @error Then Return SetError(1, 1, -1)

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

    If $commState[0] = 0 Then Return SetError(1, 1, -1)
    DllStructSetData($commtimeout_Struct, "ReadIntervalTimeout", -1)
    $commtimeout = DllCall($commDll, "long", "SetCommTimeouts", "hwnd", $hSerialPort[0], "ptr", DllStructGetPtr($commtimeout_Struct))
    If @error Then Return SetError(1, 1, -1)
    Return Number($hSerialPort[0])
    EndFunc ;==>_OpenCOMPort

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

    ;====================================================================================
    ; Function Name: _CloseCOMPort($CommSerialPort)
    ; Description: Closes serial port
    ; Parameters: $CommSerialPort - value returned by _OpenComm
    ; Returns: on success, returns 1
    ; on failure returns -1 and sets @error to 1
    ; Note:
    ;====================================================================================
    Func _CloseCOMPort($CommSerialPort)
    Local $closeerr = DllCall($commDll, "int", "CloseHandle", "hwnd", $CommSerialPort)
    DllClose($commDll)
    If @error Then Return SetError(1, 1, -1)
    Return ($closeerr[0])
    EndFunc ;==>_CloseCOMPort

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

    ;====================================================================================
    ; Function Name: _SendSerialString($CommSerialPort, $sSensString)
    ; Description: Send a String
    ; Parameters: $CommSerialPort - value returned by _OpenComm
    ; $sSendString - String to send
    ; Returns: on success, returns 1
    ; on failure returns -1 and sets @error to 1
    ; Note:
    ;====================================================================================
    Func _SendSerialString($CommSerialPort, $sSendString)
    Local $lptr0 = DllStructCreate("long_ptr")
    DllCall($commDll, "int", "WriteFile", "hwnd", $CommSerialPort, _
    "str", $sSendString, _
    "int", StringLen($sSendString), _
    "long_ptr", DllStructGetPtr($lptr0), _
    "ptr", 0)
    If @error Then Return SetError(1, 1, -1)
    EndFunc ;==>_SendSerialString

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

    ;====================================================================================
    ; Function Name: _ReceiveStringWait($CommSerialPort, $MinBufferSize, $MaxWaitTime)
    ; Description: Recieves data
    ; Parameters: $CommSerialPort - value returned by _OpenComm
    ; $MinBufferSize - Buffer size to wait for
    ; $MaxWaitTime - Maximum time to wait before failing
    ; Returns: on success, returns String
    ; on failure returns -1 and sets @error to 1
    ; Note:
    ;====================================================================================
    Func _ReceiveStringWait($CommSerialPort, $MinBufferSize, $MaxWaitTime)
    Local $rxbuf
    Local $jetza = TimerInit()
    Local $lptr0 = DllStructCreate("long_ptr")

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

    Local $rxr, $rxl, $to
    Do
    $rxr = DllCall($commDll, "int", "ReadFile", "hwnd", $CommSerialPort, _
    "str", " ", _
    "int", 1, _
    "long_ptr", DllStructGetPtr($lptr0), _
    "ptr", 0)
    If @error Then Return SetError(1, 1, -1)
    $rxl = DllStructGetData($lptr0, 1)
    If $rxl >= 1 Then
    $rxbuf &= $rxr[2]
    EndIf
    $to = TimerDiff($jetza)
    Until StringLen($rxbuf) >= $MinBufferSize Or $to > $MaxWaitTime
    Return ($rxbuf)
    EndFunc ;==>_ReceiveStringWait

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

    ;====================================================================================
    ; Function Name: _SetCOMRTS($commPort, $RTS)
    ; Description: Sets RTS flow control
    ; Parameters: $CommPort - value returned by _OpenComm
    ; $RTS : 0 = disable, 1 = enable
    ; Returns: on success, returns 1
    ; on failure returns -1 and sets @error to 1
    ; Note:
    ;====================================================================================
    Func _SetCOMRTS($CommPort, $SetRTS)
    ;http://msdn.microsoft.com/en-us/library/…4(v=vs.85).aspx
    Local $EscapeComm, $RTS
    If Number($CommPort) < 1 Then Return SetError(1, 1, -1)
    Switch $SetRTS
    Case 0
    $RTS = 4
    Case 1
    $RTS = 3
    Case Else
    Return SetError(1, 1, -1)
    EndSwitch
    $EscapeComm = DllCall($CommDll, "BOOL", "EscapeCommFunction", "HWND", $CommPort, "DWORD", $RTS)
    If @error Or ($EscapeComm[0] = 0) Then Return SetError(1, 1, -1)
    Return True
    EndFunc ;==>_SetCOMRTS

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

    ;====================================================================================
    ; Function Name: _GetCOMDCD($commPort)
    ; Description: Gets DCD status (Set from RTS in 0-Modem Cable)
    ; Parameters: $CommPort - value returned by _OpenComm
    ; Returns: on success, returns value
    ; on failure returns -1 and sets @error to 1
    ; Note:
    ;====================================================================================
    Func _GetCOMDCD($CommPort)
    ; http://msdn.microsoft.com/en-us/library/…8(v=vs.85).aspx
    Local $CommCtrl, $lpModemStat
    If Number($CommPort) < 1 Then Return SetError(1, 1, -1)
    $lpModemStat = DllStructCreate("DWORD")
    $CommState = DllCall($CommDll, "BOOL", "GetCommModemStatus", "HWND", $CommPort, "Ptr", DllStructGetPtr($lpModemStat))
    If @error Or ($CommState[0] = 0) Then Return SetError(1, 1, -1)
    $CommCtrl = DllStructGetData($lpModemStat, 1)
    If BitAND($CommCtrl, 0x80) Then Return 1 ; Isolate DCD (RLSD)
    Return 0
    EndFunc ;==>_GetCOMDCD

    [/autoit]
  • COM Objekt für RS232 Kommunikation

    • veronesi
    • 5. Oktober 2011 um 11:01

    Schön, dass wir den Fehler eingrenzen und finden konnten.
    Gerne geschehen!

  • COM Objekt für RS232 Kommunikation

    • veronesi
    • 5. Oktober 2011 um 10:51

    Ach ja, noch einen Fehler gefunden:
    Bei _ReceiveStringWait muss als $ComSerialPort der Rückgabewert von _OpenCOMPort eingetragen werden. Nicht der COM-Port selber!

  • COM Objekt für RS232 Kommunikation

    • veronesi
    • 5. Oktober 2011 um 10:48

    Woher hast Du denn die _GetComPorts?
    Funktioniert die?

    Was für einen @Error - Wert gibt die Funktion _ReceiveStringWait zurück?
    Stimmt die $MinBufferSize?

  • COM Objekt für RS232 Kommunikation

    • veronesi
    • 5. Oktober 2011 um 10:45

    Nach dem _SendSerialString hast Du ein Sleep.
    Was passiert, wenn Du das entfernst?

    Denn mit dem _ReceiveStringWait wartest Du ja sowieso, bis die Antwort kommt. (Das Timeout muss natürlich genug lange inkl. Reserve sein!)

  • COM Objekt für RS232 Kommunikation

    • veronesi
    • 5. Oktober 2011 um 10:32

    Hallo nochmals!

    Aber Du weisst schon, dass Du mit Deiner MsgBox

    [autoit]


    MsgBox(0, string(_ReceiveStringWait($ComPort, $MinBufferSize, $MaxWaitTime)), 100, 100)

    [/autoit]


    Den Empfangenen String in die Titelzeile der Messagebox schreibst?
    In den eigentlichen Textkörper schreibst Du 100 rein!
    Und das Timeout ist ebenfalls 100.

    Ist das wirklich so gewollt?

  • COM Objekt für RS232 Kommunikation

    • veronesi
    • 5. Oktober 2011 um 10:12

    Vor _ReceiveStringWait wartest Du jeweils 500ms.
    Bist Du sicher, dass Du den Buffer auf der seriellen Schnittstelle aktiviert hast? (Standardmässig ist er aktiviert)

    Sonst wird die Antwort nicht zwischengespeichert, die über die serielle Schnittstelle reinkommt.
    Reicht die Wartezeit von 800ms?

  • Befehl in cmd

    • veronesi
    • 3. Oktober 2011 um 08:02

    Hast Du schon mal das folgende probiert?
    Das sollte funktionieren, wenn die Dos-Box schon offen ist! Also genau das, was Du im ersten Post gewünscht hast.

    Wenn es mehrere DOS-Fenster gibt, dann müsste man sich etwas zur Identifizierung überlegen.

    [autoit]

    ;[user='204854']veronesi[/user]
    Global $OldOption = Opt("WinTitleMatchMode", 2)
    Global $TimerWinActivate = TimerInit()
    While 1
    If WinActivate("[TITLE:\cmd.exe; CLASS:ConsoleWindowClass]", "") <> 0 Then ExitLoop
    If TimerDiff($TimerWinActivate) > 20000 Then ExitLoop ;Emergency Exit
    Sleep(250)
    WEnd

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

    ControlSend("[TITLE:\cmd.exe; CLASS:ConsoleWindowClass]", "", "", "stop" & @CRLF)
    Opt("WinTitleMatchMode", $OldOption)

    [/autoit]

    Gruss Veronesi

  • Grafik / Fenster anzeigen als Dienst

    • veronesi
    • 8. September 2011 um 15:01

    Der Link, den ich gepostet habe, stellt - gemäss Beschreibung - auch ein Fenster VOR der Anmeldung dar!
    Einfach kann man nur den Text wählen und keine grafischen Veränderungen durchführen.....

  • Grafik / Fenster anzeigen als Dienst

    • veronesi
    • 8. September 2011 um 08:59

    Vielleicht bringt Dir auch das etwas Link

  • Grafik / Fenster anzeigen als Dienst

    • veronesi
    • 8. September 2011 um 08:45

    Leider ist mir keine Möglichkeit bekannt, vor einer Anmeldung ein Fenster oder irgendwas darzustellen.
    Ich denke, dass dies nicht gehen wird!

    Weshalb möchtest Du VOR dem Login etwas anzeigen?
    Wichtig ist doch, dass das Script läuft und ggfs nach dem Login etwas angezeigt werden kann!

  • Powerpoint 2007 - Officemenü ansteuern

    • veronesi
    • 29. August 2011 um 14:16

    Vielleicht hilft das etwas weiter:
    Hier kannst Du den aktiven Standard Drucker auslesen.
    Und hier kannst Du den Standard Drucker umstellen.

    Habs nicht probiert, aber tönt schon mal verheissungsvoll!

    Gruss Veronesi

  • AutoIt 3.3.7.xx Beta verfügbar

    • veronesi
    • 20. August 2011 um 11:38

    Ok Den Geschwindigkeitsunterschied muss man aber auch etwas differenzierter anschauen.

    Im Beispiel wird einfach in einer Schleife das Objekt befüllt.
    In Wirklichkeit muss vor jedem Eintrag jedesmal vorher einige Daten vom Netzlaufwerk abgefragt werden. D.h. unter Umständen macht der Geschwindigkeits Nachteil von AutoIt nicht mehr so viel aus... Mal testen!

  • AutoIt 3.3.7.xx Beta verfügbar

    • veronesi
    • 20. August 2011 um 11:23

    Gut beherrschen ist so eine Sache :)

    Aber die Syntax von Phyton scheint mir kompliziert.
    Soll ich da nicht gleich auf Delphi gehen?

    Wie wäre echt die Geschwindigkeit in Delphi und gibt es hier gratis Compiler?

    Danke!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™