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. Friesel

Beiträge von Friesel

  • programm beenden

    • Friesel
    • 27. Februar 2014 um 09:39

    Moin!

    Da ich mir das Programm aus Interesse ansehen wollte, hab ich mir mal die Demo installiert. Leider stürzt es beim Laden der Quelldatei immer ab, weshalb ich nicht viel zum Ablauf der Kodierung sagen kann.
    Mir ist allerdings aufgefallen, dass sich im Installationsverzeichnis eine kleine Datei namens "Converter.exe" befindet.
    Wenn du ganz viel Glück hast, startet das Hauptprogramm (MediaConverter.exe) dieses zweite Programm und beendet es auch wieder, wenn ein Film umgewandelt wurde.
    Überprüfe das einfach mal im Taskmanager. Falls dem so ist, kann dein Skript auf die Beendigung von "Converter.exe" reagieren...

    Des weiteren kannst du mal versuchen den vorher erwähnten Befehl "_WinAPI_FileInUse" auf die Zieldatei anzuwenden, also die Datei, die bei der Konvertierung erstellt wird. Wenn die Konvertierung beendet ist, sollte die Datei ja logischerweise nicht mehr "in use" sein...

    Sanfte Grüße :D

  • Strings aus Textdatei entfernen

    • Friesel
    • 27. Februar 2014 um 03:20

    Moin!
    Hier mal mein Vorschlag mit RegEx. Ist deutlich kürzer und weniger aufwendig (zumindest wenn man reguläre Ausdrücke mal verstanden hat) 8)

    Auch hier wird vorausgesetzt, dass sich die Beispieldaten in der Zwischenablage befinden:

    [autoit]

    #include <Array.au3>

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

    $sData = ClipGet()
    MsgBox(0, "Rohdaten", $sData)

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

    ;==> Filtern des ersten Beispieldatenblocks (löscht alles bis nach dem ERSTEN Leerzeichen, bzw kopiert alles nach dem ERSTEN Leerzeichen in ein Array)
    ;$aData = StringRegExp($sData, ".+? (.+)", 3); Dieser Pattern geht auch: ".*? (.*)"
    ;_ArrayDisplay($aData)

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

    ;==> Filtern des zweiten Beispieldatenblocks (löscht alles bis nach dem ZWEITEN Leerzeichen, bzw kopiert alles nach dem ZWEITEN Leerzeichen in ein Array)
    $aData = StringRegExp($sData, ".+? .+? (.+)", 3); Dieser Pattern geht auch: ".*? .*? (.*)"
    _ArrayDisplay($aData)

    [/autoit]


    Hier findest du ein RegEx Tutorial, falls du dich weiterbilden willst... :rolleyes:

  • Wie wurde Programm gestartet? In cmd.exe (DOS-Box) oder Verknüpfung / Doppelklick / Explorer

    • Friesel
    • 29. Oktober 2013 um 21:16
    Zitat von chesstiger

    Edit: Ja, per WMI-Objekt wäre effizienter. Habe aber gerade kein Code-Sample von der Benutzung des WMI-Objekts da gehabt, deswegen die CommandLine-Variante. ^^


    Sehr schicke Funktion. Die Objekt-Variante würde ich auch gerne sehen, wenns irgendwann mal möglich ist :thumbup:

    Übrigens muß bei mir (Win7 Pro) der Pfad angepasst werden, weil das Programm "WMIC.exe" nicht direkt im @SystemDir ist und auch nicht registriert ist:

    [autoit]

    $hCommand = Run(@ComSpec & " /c " & $sCommand, @SystemDir & "\wbem", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

    [/autoit]
  • Wie wurde Programm gestartet? In cmd.exe (DOS-Box) oder Verknüpfung / Doppelklick / Explorer

    • Friesel
    • 29. Oktober 2013 um 20:53
    Zitat von alpines

    Trotzdem ist das keine zuverlässige Methode. Man kann auch mit ShellExecute das Programm per Parameter starten.


    Man kann auch ne Verknüpfung mit Parameter anlegen, aber warum sollte das jemand tun? :sleeping:
    Klar ist eine solche Funktion nicht Narrensicher, aber ne Alternative, falls es keine Alternative gibt ;)

  • Wie wurde Programm gestartet? In cmd.exe (DOS-Box) oder Verknüpfung / Doppelklick / Explorer

    • Friesel
    • 29. Oktober 2013 um 20:45
    Zitat von alpines

    Und was passiert wenn ich eine zufällige Datei auf die Exe ziehe? CMDLine hat dann den Wert des Pfades der draufgezogenen Datei.


    Ich kann den Parameter doch auswerten und zur Not irgendwas kryptisches nehmen, was auf keinen Fall zufällig kommen kann.
    Kann deine Bedenken echt nicht nachvollziehen.

    [autoit]

    If $CmdLine[0] > 0 Then
    If $CmdLine[1] = "123" Then
    MsgBox(0, "", "Start von der Command Line!" & @CRLF & "Parameter: " & $CmdLine[1])
    Else
    MsgBox(0, "", "Start im Explorer!" & @CRLF & "Parameter: " & $CmdLine[1])
    EndIf
    Else
    MsgBox(0, "", "Doppelklick im Explorer!")
    EndIf

    [/autoit]
  • Wie wurde Programm gestartet? In cmd.exe (DOS-Box) oder Verknüpfung / Doppelklick / Explorer

    • Friesel
    • 29. Oktober 2013 um 20:24

    Moin!

    Mein Vorschlag wäre, das Programm aus der Command Line mit einem zusätzlichen Parameter zu starten.
    Da dieser bei einem Doppelklick im Explorer fehlt, kann man das entsprechend auswerten.

    Etwas in der Richtung:

    [autoit]

    If $CmdLine[0] > 0 Then
    MsgBox(0, "", "Start von der Command Line!" & @CRLF & "Parameter: " & $CmdLine[1])
    Else
    MsgBox(0, "", "Doppelklick im Explorer!")
    EndIf

    [/autoit]


    Das das nur mit dem kompilierten Programm funktioniert, sollte klar sein :rolleyes:

    Code
    C:>programm.exe 123


    Sanfte Grüße :D

  • Problem: Bildschirm-Lupe Script reagiert nach einiger Zeit nicht mehr und hängt sich auf

    • Friesel
    • 27. Oktober 2013 um 12:51
    Zitat von Krabat

    nein, Windows fenster gehen nicht schmaler, das selbe Verhalten kannst du auch bei anderen Programmen sehen wie z.b. Notepad ;)

    Das stimmt nicht ganz. Ein noch schmaleres Fenster kann man mit einem "echten" Popup ereichen.
    Man muss nur beim Resizen tricksen und die Windows eigene Funktion "von Hand" erstellen.

    So siehts aus:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <winapi.au3>
    Global $leave = 0, $freeze = 0, $schutz = 0, $go = 0, $zf = 1, $stand = 0;$SRCCOPY = 0x00CC0020,
    Global Const $SC_DRAGMOVE = 0xF012
    Global Const $iMargin = 20
    Global Const $iGUIMinX = 50, $iGUIMinY = 50, $iGUIMaxX = @DesktopWidth, $iGUIMaxY = @DesktopHeight

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

    GUIRegisterMsg($WM_MOUSEMOVE, "_SetCursor")
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
    GUIRegisterMsg($WM_GETMINMAXINFO, "_WM_GETMINMAXINFO")

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

    HotKeySet("!a", "freeze")
    HotKeySet("!1", "minus")
    HotKeySet("!2", "plus")
    HotKeySet("!3", "stand")
    Opt("GuiOnEventMode", 1)
    ;$mainlupe = GUICreate("Andygo's Bildschirmlupe", 516, 274, -1, -1, BitOR($WS_POPUP, $WS_BORDER, $WS_SIZEBOX + $WS_CLIPCHILDREN), $WS_EX_TOPMOST)
    $mainlupe = GUICreate("Andygo's Bildschirmlupe", 516, 274, -1, -1, BitOR($WS_DLGFRAME, $WS_POPUP), $WS_EX_TOPMOST);==> $WS_DLGFRAME entfernen für komplett rahmenloses Fenster
    GUISetOnEvent($GUI_EVENT_CLOSE, "leave")
    $MyhWnd = WinGetHandle("Andygo's Bildschirmlupe")
    $fastx = _WinAPI_GetSystemMetrics(78)
    $fasty = _WinAPI_GetSystemMetrics(79)
    $hGuiOpt = GUICreate("Lupe Setup", 292, 129, -1, -1, BitOR($WS_SYSMENU, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), -1, $MyhWnd)
    $btnQuit = GUICtrlCreateButton("Lupe beenden", 127, 82, 145, 25, 0)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $btnOK = GUICtrlCreateButton("OK", 20, 80, 87, 29, 0)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $cbInvert = GUICtrlCreateCheckbox("Negative Farben", 20, 35, 100, 18)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $cbschutz = GUICtrlCreateCheckbox("Selbstschutz", 20, 56, 100, 18)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $Label2 = GUICtrlCreateLabel("freeze: ALT + a" & @CRLF & "fixieren: ALT + 3" & @CRLF & "Zoom: ALT+2 / ALT+1", 150, 40, 120, 43)
    $SliderZoom = GUICtrlCreateSlider(80, 20, 161, 19);, $TBS_AUTOTICKS)
    GUICtrlSetLimit(-1, 10, 1)
    GUICtrlSetData(-1, $zf)
    GUICtrlSetCursor(-1, 13)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $Label1 = GUICtrlCreateLabel("Zoom: x1", 20, 20, 50, 17)
    GUISetState(@SW_DISABLE)
    GUISetState(@SW_HIDE)
    GUISwitch($MyhWnd)
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SystemEvents")
    ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "SystemEvents")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "SystemEvents")
    Func stand()
    If $stand = 0 Then
    $stand = 1
    Else
    $stand = 0
    EndIf
    EndFunc ;==>stand
    Func minus()
    If $zf > 1 Then $zf -= 1
    GUICtrlSetData($SliderZoom, $zf)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndFunc ;==>minus
    Func plus()
    If $zf < 10 Then $zf += 1
    GUICtrlSetData($SliderZoom, $zf)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndFunc ;==>plus

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

    Func WinToggle($hWin)
    If BitAND(WinGetState($hWin), 6) Then
    GUISetState(@SW_DISABLE, $hWin)
    GUISetState(@SW_HIDE, $hWin)
    Else
    GUISetState(@SW_ENABLE, $hWin)
    GUISetState(@SW_SHOW, $hWin)
    EndIf
    EndFunc ;==>WinToggle
    Func SystemEvents()
    Switch @GUI_CtrlId
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    Beep(2000, 100)
    DllCall("user32.dll", "int", "SendMessage", "hWnd", $MyhWnd, "int", $WM_NCLBUTTONDOWN, "int", $HTCAPTION, "int", 0)
    Case $GUI_EVENT_PRIMARYUP
    ;
    Case $GUI_EVENT_SECONDARYDOWN
    If Not BitAND(WinGetState($hGuiOpt), 2) Then
    $xys = MouseGetPos()
    WinMove($hGuiOpt, "", Min(Max($xys[0] - 50, 0), $fastx - 320), Min(Max($xys[1] - 50, 0), $fasty - 180))
    WinToggle($hGuiOpt)
    EndIf
    EndSwitch
    EndFunc ;==>SystemEvents
    Func OptionsEvents()
    Switch @GUI_CtrlId
    Case $btnOK
    WinToggle(@GUI_WinHandle)
    Case $btnQuit
    Exit
    Case $cbInvert
    $go = BitXOR($go, 1)
    Case $cbschutz
    $schutz = BitXOR($schutz, 1)
    Case $SliderZoom
    $zf = GUICtrlRead($SliderZoom)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndSwitch
    EndFunc ;==>OptionsEvents
    $xy = MouseGetPos()
    While Not $leave
    Sleep(10)
    If $freeze = 0 Then MAG()
    WEnd

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

    Func freeze()
    If $freeze = 0 Then
    $freeze = 1
    Else
    $freeze = 0
    EndIf
    EndFunc ;==>freeze
    Func Min($n1, $n2)
    If $n1 < $n2 Then Return $n1
    Return $n2
    EndFunc ;==>Min
    Func Max($n1, $n2)
    If $n1 > $n2 Then Return $n1
    Return $n2
    EndFunc ;==>Max

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

    Func MAG()
    $MyHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $MyhWnd)
    If @error Then Return
    $DeskHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", 0)
    If Not @error Then
    $test = WinGetClientSize($MyhWnd)
    $test2 = WinGetPos($MyhWnd)
    If $stand = 0 Then $xy = MouseGetPos()
    If Not @error Then
    $srcW = $test[0] / $zf
    $srcH = $test[1] / $zf
    $l = Min(Max($xy[0] - $test[0] / (2 * $zf), 0), $fastx - $srcW)
    $t = Min(Max($xy[1] - $test[1] / (2 * $zf), 0), $fasty - $srcH)
    If $schutz = 1 Then
    If $xy[0] < $test2[0] - ($srcW / 2) Or $xy[0] > $test2[0] + $test[0] + ($srcW / 2) Or $xy[1] < $test2[1] - ($srcH / 2) Or $xy[1] > $test2[1] + $test[1] + ($srcH / 2) Then;bedingung lupe verboten
    If $go = 0 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x00CC0020)
    If $go = 1 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x330008)
    EndIf
    Else
    If $go = 0 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x00CC0020)
    If $go = 1 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x330008)
    EndIf
    EndIf
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $DeskHDC[0])
    EndIf
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $MyhWnd, "handle", $MyHDC[0])
    EndFunc ;==>MAG

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

    Func leave()
    $leave = 1
    EndFunc ;==>leave

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

    Func _SetCursor()
    Local $iCursorID
    Switch _Check_Border()
    Case 0
    $iCursorID = 2
    Case 1, 2
    $iCursorID = 13
    Case 3, 6
    $iCursorID = 11
    Case 5, 7
    $iCursorID = 10
    Case 4, 8
    $iCursorID = 12
    EndSwitch
    GUISetCursor($iCursorID, 1)
    EndFunc ;==>_SetCursor

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

    ; Check cursor type and resize/drag window as required
    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    Local $aPos = WinGetPos($hWnd)
    Local $iCursorType = _Check_Border()
    If $iCursorType > 0 Then ; Cursor is set to resizing style so send appropriate resize message
    $iResizeType = 0xF000 + $iCursorType
    _SendMessage($mainlupe, $WM_SYSCOMMAND, $iResizeType, 0)
    Else
    Local $aCurInfo = GUIGetCursorInfo($mainlupe)
    If $aCurInfo[4] = 0 Then ; Mouse not over a control
    _SendMessage($mainlupe, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndIf
    EndIf

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

    EndFunc ;==>_WM_LBUTTONDOWN

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

    ; Determines if mouse cursor over a border
    Func _Check_Border()
    Local $aCurInfo = GUIGetCursorInfo($mainlupe)
    Local $aWinPos = WinGetPos($mainlupe)
    Local $iSide = 0
    Local $iTopBot = 0
    If $aCurInfo[0] < $iMargin Then $iSide = 1
    If $aCurInfo[0] > $aWinPos[2] - $iMargin Then $iSide = 2
    If $aCurInfo[1] < $iMargin Then $iTopBot = 3
    If $aCurInfo[1] > $aWinPos[3] - $iMargin Then $iTopBot = 6
    Return $iSide + $iTopBot
    EndFunc ;==>_Check_Border

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

    ; Set min and max GUI sizes
    Func _WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    $tMinMaxInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($tMinMaxInfo, 7, $iGUIMinX)
    DllStructSetData($tMinMaxInfo, 8, $iGUIMinY)
    DllStructSetData($tMinMaxInfo, 9, $iGUIMaxX)
    DllStructSetData($tMinMaxInfo, 10, $iGUIMaxY)
    Return 0
    EndFunc ;==>_WM_GETMINMAXINFO

    [/autoit]


    Sanfte Grüße :D

  • Werte ermitteln und Array automatisch befüllen

    • Friesel
    • 27. Oktober 2013 um 11:01

    Moin!

    Hier mal mein Vorschlag. Voraussetzung ist, dass die Daten immer im gleichen Format sind (dd.mm.yyyy;Wert mit 1 bis unendlich vielen Stellen).
    Das Skript ist ausführlich kommentiert...bei Fragen, frag :rolleyes:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <Array.au3>

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

    OnAutoItExitRegister("_Exit")

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

    $sCSVPath = FileOpenDialog("CSV-Datei öffnen (Abbrechen, um Datei zu generieren)", @ScriptDir, "CSV-Dateien (*.csv)", 3)

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

    If @error Then ;==> wird der Dialog agebrochen, wird eine CSV-Datei generiert und geladen
    _CreateCSV()
    $sCSVPath = @ScriptDir & "\CSVTest.csv"
    EndIf

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

    $hFile = FileOpen($sCSVPath, 0)
    $sCSVContent = FileRead($hFile)
    FileClose($hFile)

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

    ;==> Daten einlesen. Alternativ kann man auch FileReadLine benutzen
    $aCSVDateValue = StringRegExp($sCSVContent, '(\d{2}\.\d{2}\.\d{4};\d+)', 3);==> Datum und Wert in Array schreiben

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

    _ArrayDisplay($aCSVDateValue, "Ausgangswerte")

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

    $sStartDateFist = StringRegExpReplace($aCSVDateValue[0], '(\d{2})\.(\d{2})\.(\d{4});\d+', '$3/$2/$1')
    $sEndDateLast = StringRegExpReplace($aCSVDateValue[UBound($aCSVDateValue) - 1], '(\d{2})\.(\d{2})\.(\d{4});\d+', '$3/$2/$1')
    $iDiffDays = _DateDiff("D", $sStartDateFist, $sEndDateLast) ;==> Anzahl aller Tage ermitteln, um das Array zu dimensionieren

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

    Global $aFinalArray[$iDiffDays + 1]
    Global $iDays, $i

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

    For $i = 0 To UBound($aCSVDateValue) - 2
    ;==> Datumformat für _DateDiff anpassen und in Variable einlesen
    $sStartDate = StringRegExpReplace($aCSVDateValue[$i], '(\d{2})\.(\d{2})\.(\d{4});\d+', '$3/$2/$1')
    $sEndDate = StringRegExpReplace($aCSVDateValue[$i + 1], '(\d{2})\.(\d{2})\.(\d{4});\d+', '$3/$2/$1')
    ;==> Wert einlesen
    $iStartValue = Number(StringRegExpReplace($aCSVDateValue[$i], '\d{2}\.\d{2}\.\d{4};(\d+)', '$1'))
    $iEndValue = Number(StringRegExpReplace($aCSVDateValue[$i + 1], '\d{2}\.\d{2}\.\d{4};(\d+)', '$1'))

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

    $iDiffDays = _DateDiff("D", $sStartDate, $sEndDate) ;==> Anzahl Tage zwischen zwei Daten
    $iDiffValue = $iEndValue - $iStartValue ;==> Anzahl Tage zwischen zwei Werten
    $iValuePerDay = Round($iDiffValue / $iDiffDays) ; ==> Wert pro Tag
    For $ii = 0 To $iDiffDays - 1
    $sDaySingle = StringRegExpReplace(_DateAdd("D", $ii, $sStartDate), '(\d{4})/(\d{2})/(\d{2})', '$3.$2.$1');==> in deutsches Datumsformat umwandeln
    $aFinalArray[$iDays] = $sDaySingle & ";" & $iStartValue
    $iStartValue += $iValuePerDay
    $iDays += 1
    Next
    Next
    $aFinalArray[$iDays] = StringRegExpReplace($sEndDateLast, '(\d{4})/(\d{2})/(\d{2})', '$3.$2.$1') & ";" & $iEndValue ;==> letzte Zeile muß "manuell" angefügt werden
    _ArrayDisplay($aFinalArray, "Ergebnis")
    ;==> Speichern unter...
    $sFilenameNoSuffix = StringRegExpReplace($sCSVPath, '.+\\(.+)\.[^.]*$', '$1') ;==> Orginal Dateiname ohne Suffix für Namensvorschlag bei FileSaveDialog
    $sCSVPath = StringRegExpReplace($sCSVPath, '(.+\\).+', '$1') ;==> Orginal Pfad
    $sPathResult = FileSaveDialog("CSV-Ergebnis-Datei speichern...", $sCSVPath, "CSV-Dateien (*.csv)", 18, $sFilenameNoSuffix & "_Result" & ".csv")
    If @error Then
    MsgBox(0, "", "Speichern abgebrochen!")
    Else
    $hFile = FileOpen($sPathResult, 2)
    FileWrite($hFile, _ArrayToString($aFinalArray, @CRLF))
    FileClose($hFile)
    $idMsg = MsgBox(36, "", "Datei in Excel öffnen?")
    Switch $idMsg
    Case 6
    ShellExecute($sPathResult) ;==> Wenn Excel installiert ist, wird die Datei geöffnet (UDF "Excel.au3" zur Weiterverarbeitung nutzen!)
    EndSwitch
    EndIf

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

    Exit

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

    Func _CreateCSV() ;==> CSV-Datei erstellen, falls keine eigene geladen wird
    $sCSVContent = "25.06.2013;1000" & @CRLF & _
    "08.07.2013;2000" & @CRLF & _
    "20.07.2013;3000" & @CRLF & _
    "25.07.2013;4000" & @CRLF & _
    "04.08.2013;5000" & @CRLF & _
    "18.08.2013;6000" & @CRLF & _
    "25.08.2013;7000" & @CRLF & _
    "02.09.2013;8000" & @CRLF & _
    "27.09.2013;9000" & @CRLF & _
    "08.10.2013;10000" & @CRLF

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

    $hFile = FileOpen(@ScriptDir & "\CSVTest.csv", 2)
    FileWrite($hFile, $sCSVContent)
    FileClose($hFile)
    EndFunc ;==>_CreateCSV

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

    Func _Exit()
    FileDelete(@ScriptDir & "\CSVTest.csv") ;==> generierte CSV-Datei (falls vorhanden) bei Programmende löschen
    EndFunc ;==>_Exit

    [/autoit]


    Sicher nicht der Weisheit letzter Schluß, aber es funktioniert ;)


    Sanfte Grüße :D

  • Aktuellster Firefox Installer Download

    • Friesel
    • 17. Oktober 2013 um 22:08
    Zitat von PainTain

    (Bitte nicht für den RegEx schlagen, bin noch kein RegEx-Veteran :whistling: )


    Keine Angst, ich schlage nicht, aber der Pattern ist durchaus verbesserungswürdig...
    Es werden nur zweistellige Versionsnummern mit einer Nachkommastelle gefunden. Also nur "Firefox Setup XX.X.exe"
    D.h. bei v99,9 ist schluß ;(

    Deutlich flexibler wäre diese Variante:

    [autoit]

    $s = StringRegExp($sHTML, "Firefox Setup \d+\.\d+\.exe", 1)

    [/autoit]


    Der Pattern findet sowohl Dateinamen wie "Firefox Setup 1.0.exe" als auch "Firefox Setup 123456789.123456789.exe" bis unendlich. Da hast du was für die Zukunft :thumbup:
    Es würde zwar auch ein Name wie "Firefox Setup 0.0.exe" gefunden werden, was aber nicht vorkommen wird...
    Die Punkte muss man eigendlich nicht auskommentieren, weil ein Punkt für jedes Zeichen steht (also auch für den tatsächlichen Punkt), aber so ists "genauer".

  • E-Mail Adresse auslesen und in eine Datei schreiben

    • Friesel
    • 14. Oktober 2013 um 17:52
    Zitat von Tak

    Friesel, leider gibt er mir bei deinen Lösungsansätzen nen Fehler aus.


    Der Fehler passiert, weil die Funktion _IEBodyReadHTML nur den Code innerhalb des <body>-Tags ausliest.
    Die gewünschten Informationen befinden sich dort aber nicht.

    Aber keine Sorge, ich hatte Langeweile und habe ein (mehr oder weniger) voll funktionsfähiges Skript zum Auslesen aller Suchtreffer geschrieben.
    Du kannst am Anfang sogar Ort und Namen eingeben.
    Wenn du ne langsame Internetverbindung hast, kann die Suche ne Weile dauern, weil jede Seite aufgerufen und durchsucht wird. Aber immerhin gibts eine Progressbar, damit's nicht zu langweilig wird und am Schluss hast du dann ein zweidimensionales Array mit allen Treffern (Name und, falls vorhaben auch die Email). Weitere Infos auszulesen wäre kein Problem...
    Da nicht jeder Eintrag auch eine Email-Adresse hat, musste ich einen etwas umständlichen Weg nehmen, indem ich pro Seite je 20 Blöcke mit den einzelnen Einträgen auslese. Sonst ist es schwer möglich, die sehr viel geringere Anzahl an Emails den Namen zuzuordnen...

    Das Skript ist einigermassen ausführlich kommentiert, aber wenn noch Fragen bleiben, frag... (*edit* Problem mit Umlauten bei Ortsnamen korrigiert und Fehlerprüfung geringfügig erweitert)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <String.au3>

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

    While 1
    $idInputTown = _StringProper(InputBox("Ort...", "Bitte Ort eingeben:", Default, Default, Default, 130)) ;==> Ersten Buchstaben groß schreiben, Umlaute werden später umgewandelt
    If $idInputTown = "" Then Exit ;==> Programmende bei leerem Input
    $idInputName = _StringProper(InputBox("Name...", "Bitte Namen eingeben:", Default, Default, Default, 130)) ;==> Ersten Buchstaben groß schreiben, Umlaute werden später umgewandelt
    If $idInputName = "" Then Exit ;==> Programmende bei leerem Input
    $aResults = _GetAll($idInputTown, $idInputName)
    If $aResults = 0 Then
    If @extended = 0 Then
    MsgBox(0, "Fehler!", "Der Ort " & $idInputTown & " wurde nicht gefunden...")
    ElseIf @extended = 1 Then
    MsgBox(0, "Fehler!", "Der Teilnehmer " & $idInputName & " in " & $idInputTown & " wurde nicht gefunden...")
    Else
    MsgBox(0, "Fehler!", "Fehlernummer: " & @extended)
    EndIf
    EndIf
    _ArrayDisplay($aResults, $idInputName & " in " & $idInputTown)
    WEnd

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

    Exit

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

    Func _GetAll($sTown, $sName)
    Local $iSiteCount = 1, $aLastPage

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

    $sHtml = BinaryToString(InetRead("http://www.dasoertliche.de/?form_name=search_nat&ci=" & _Umlaute($sTown) & "&kw=" & _Umlaute($sName), 1))
    If StringInStr($sHtml, "Der eingegebene Ort ist uns leider nicht bekannt") Then Return SetError(1, 0, 0)
    If StringInStr($sHtml, "Ortsauswahl") Then ;==> Sonderfall bei mehreren gefundenen Orten
    $aPickSite = StringRegExp($sHtml, '<a href="(http://www\d*\.dasoertliche\.de/\?form_name=search_nat.*)">' & $sTown & '</a>', 1)
    If IsArray($aPickSite) Then ;==> NUR bei 100%iger Übereinstimmung mit dem Suchbegriff (Ort)
    $sHtml = BinaryToString(InetRead($aPickSite[0], 1))
    Else ;==> hier könnte ein Auswahlfenster angezeigt werden, wenn keine 100%ige Übereinstimmung vorliegt
    ShellExecute("http://www.dasoertliche.de/?form_name=search_nat&ci=" & _Umlaute($sTown) & "&kw=" & _Umlaute($sName)) ;==> zum Debuggen, wenn kein weiterführender Link gefunden wurde
    Return SetError(1, 2, 0)
    EndIf
    EndIf
    If StringInStr($sHtml, "Ihre Suche war leider nicht erfolgreich und wir konnten keinen Treffer finden") Then Return SetError(1, 1, 0)

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

    $aTrefferAnzahl = StringRegExp($sHtml, '<div class="">Treffer&nbsp;1-\d{1,2}&nbsp;von&nbsp;<span class="">(\d*)</span></div>', 1)
    If IsArray($aTrefferAnzahl) Then
    Local $iTreffer = $aTrefferAnzahl[0]
    Local $aHits[$iTreffer][2]
    Else ;==> doppelte Absicherung (redundant)
    $aLastPage = StringRegExp($sHtml, 'recFrom=(\d{1,}).*zur letzten Seite.*', 1)
    If IsArray($aLastPage) Then
    Local $iTreffer = $aLastPage[0]
    Local $aHits[$iTreffer + 20][2] ;==> Größe des Arrays wird am Ende der Fktn genau angepasst
    Else
    Local $aHits[20][2] ;==> falls nur eine Seite gefunden wird (weniger als 21 Treffer)
    EndIf
    EndIf

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

    ProgressOn("Bitte warten!", "Ergebnisse werden geladen...", "", Default, Default, 18)

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

    Do
    $aBlock = _StringBetween($sHtml, '<div class="counter">', '</script>') ;==> Jeder Block enthält einen Eintrag(mit oder ohne Email)
    If Not IsArray($aBlock) Then Return SetError(1, 3, 0) ;==> nichts gefunden
    For $i = 0 To UBound($aBlock) - 1
    $aName = StringRegExp($aBlock[$i], '><span class="">(.*)&nbsp;</span>', 1)
    If IsArray($aName) Then
    $aHits[$i + $iSiteCount - 1][0] = $aName[0]
    Else
    Beep(1000, 100) ;==> wenns piept, hat der Ort nicht den Standard HTML Code
    EndIf
    $aEmail = StringRegExp($aBlock[$i], '<a href="mailto:(.*)" onclick', 1)
    If IsArray($aEmail) Then $aHits[$i + $iSiteCount - 1][1] = $aEmail[0]
    ProgressSet(100 * ($i + $iSiteCount - 1) / $iTreffer, "Treffer: " & $i + $iSiteCount - 1 & " von " & $iTreffer)
    ConsoleWrite($i + $iSiteCount - 1 & @CRLF)
    Next
    $iSiteCount += 20
    $aNextSite = StringRegExp($sHtml, '<a href="(http://www\d\.dasoertliche\.de/?.*)" title="zur n&auml;chsten Seite">&rsaquo;</a>', 1)
    If IsArray($aNextSite) Then
    $sHtml = BinaryToString(InetRead($aNextSite[0], 1))
    EndIf
    Until $iSiteCount > $iTreffer

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

    ProgressSet(100)

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

    If IsArray($aLastPage) Then ;==> auch redundant
    ReDim $aHits[$aLastPage[0] + UBound($aBlock) - 1][2] ;==> genaue Anzahl der Treffer ist erst am Ende bekannt, daher jetzt Array anpassen
    EndIf

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

    ProgressOff()

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

    Return $aHits
    EndFunc ;==>_GetAll

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

    Func _Umlaute($sReplace) ;==> Deutsche Umlaute umwandeln
    $sReplace = StringReplace($sReplace, "ä", "%E4")
    $sReplace = StringReplace($sReplace, "ö", "%F6")
    $sReplace = StringReplace($sReplace, "ü", "%FC")
    Return $sReplace
    EndFunc ;==>_Umlaute

    [/autoit]


    Was noch verbessert werden muss, ist auf jeden Fall das Errorhandling, aber ansonsten funkts ganz ordentlich, soweit ich das testen konnte...


    Sanfte Grüße :D

  • E-Mail Adresse auslesen und in eine Datei schreiben

    • Friesel
    • 14. Oktober 2013 um 07:03

    Moin!

    Dein Email-Pattern ist falsch. Der schließenden Klammer muss eine Öffnende vorausgehen, also so:

    [autoit]

    $ergebnis = StringRegExp($sHtml,'<a href="mailto:(.*)"',3)

    [/autoit]


    Der Pattern innerhalb der Klammern taugt aber eh nicht, um valide Emails zu filtern, außerdem wird auch der Text hinter der Email "gefangen".
    Da man davon ausgehen kann, dass die Emails auf der Seite alle valide sind, kannst du einfach folgendes benutzen:

    [autoit]

    $ergebnis = StringRegExp($sHtml, '<a href="mailto:(.*)" onclick', 3)

    [/autoit]


    Den Rest habe ich mir jetzt nicht weiter angesehen, weil du ja schreibst, dass das funktioniert...

    *edit*
    So, jetzt hab ich mir den Rest doch noch angesehen und auch einen Fehler im Namens-Pattern gefunden.
    Die Klammer muss auskommentiert werden, da diese sonst als Steuerzeichen interpretiert wird (was wieder ein fehlerhaftes Pattern produziert, weil die öffnende Klammer fehlt).
    Außerdem werden auch hier wieder alle Zeichen hinter des Namens "mitgefangen".
    So sollte es funktionieren:

    [autoit]

    $ergebnis1 = StringRegExp($sHtml, ' this\)"><span class="">(.*)&nbsp;</span>', 3)

    [/autoit]


    Sanfte Grüße :D

  • Borderless Fullscreen Windowed mit jedem Fenster

    • Friesel
    • 7. Oktober 2013 um 03:43
    Zitat von Xorianator

    Eigentlich hätte ich auf das SetLong und GetLong schon selbst kommen müssen, wenn das eine setzt dann nimmt das andere :rolleyes: :D

    Ich habe das Skript mal verkürzt und erweitert 8o
    Da _WinAPI_SetWindowLong den ursprünglichen Stil zurückgibt, kann man sich _WinAPI_GetWindowLong sparen.
    Ausserdem kann man das Fensterhandle direkt ermitteln und muss nicht erst den Umweg über WinGetTitle machen, was eine weitere Zeile spart :thumbup:

    Zitat von Xorianator

    das ist bei Godus ein Problem, man sieht zwar das Fenster, das ist aber quasi ein Hologramm (besser kann ich es jetzt nciht beschreiben) - Man kann durchfassen. Das heißt, man klickt in das Fenster aber klickt auf das darunter liegende... verstanden? :D

    Ja, verstanden :rolleyes:
    Man kann diesen "Effekt" ebenfalls mit _WinAPI_SetWindowLong erreichen. Clickthrough nennt sich das...
    Ich hab das im Skript mal eingefügt.
    Mit <STRG+ALT+SPACE> kannst du das ein- bzw ausschalten. Bei "normalen" Fenstern funktionierts, ob das bei deinem Spiel auch funktioniert kannst du ja mal versuchen...
    ...oder natürlich einfach WinSetState($wintitle, "", @SW_SHOW) benutzen, wie du's eh schon gemacht hast :whistling:

    [autoit]

    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include <Constants.au3>
    #include <WinApi.au3>

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

    Global $iOrgStyle, $fPressed = False

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

    While Sleep(20)
    If _IsPressed("11") and _IsPressed("26") and _IsPressed("12") And $fPressed = False Then ;==> <STRG+ALT+UP>
    $hWinHandle = WinGetHandle("[active]")
    $aPos = WinGetPos($hWinHandle) ;ursprüngliche Position und Grösse ermitteln
    $iOrgStyle = _WinAPI_SetWindowLong($hWinHandle, $GWL_STYLE, $WS_POPUPWINDOW) ;Rückgabewert ist der ursprüngliche Stil
    WinSetState($hWinHandle, "", @SW_MAXIMIZE) ;Maximieren für Vollbild
    $fPressed = True
    ElseIf _IsPressed("11") and _IsPressed("28") and _IsPressed("12") And $fPressed = True Then ;==> <STRG+ALT+DOWN>
    _WinAPI_SetWindowLong($hWinHandle, $GWL_STYLE, $iOrgStyle) ;ursprünglichen Stil wiederherstellen
    WinMove($hWinHandle, "", $aPos[0], $aPos[1], $aPos[2], $aPos[3]) ;ursprünglichen Position und Grösse wiederherstellen
    $fPressed = False
    ElseIf _IsPressed("11") and _IsPressed("20") and _IsPressed("12") Then ;==> <STRG+ALT+SPACE>
    Sleep(100) ;==> ohne kleine "Pause" gehts leider nicht
    $hWinHandle = WinGetHandle("[active]")
    ;==> "Clickthrough" an/aus
    _WinAPI_SetWindowLong($hWinHandle,$GWL_EXSTYLE,BitOR(_WinAPI_GetWindowLong($hWinHandle,$GWL_EXSTYLE),$WS_EX_TRANSPARENT))
    WinSetTrans($hWinHandle,"",255)
    EndIf
    WEnd

    [/autoit]


    Sanfte Grüße :D

  • Borderless Fullscreen Windowed mit jedem Fenster

    • Friesel
    • 6. Oktober 2013 um 23:53
    Zitat von chesstiger

    Was?

    f ist das richtige Präfix für eine Boolean-Variable. ;)

    lg


    Wie was??? :wacko:
    Ich "versuche" mich an dein Tutorial zu halten, und dort nehme ich die "Neue Präfixliste", laut der $b für Boolean und $f für Floating point number steht...

    Neue Präfixliste
    Zitat
    • $a<letter> - Array (the following letter describes the data type taken from the rest of the data types below, if it varies then v should be used. A counter as the first element is ignored, so the array returned by StringSplit (with default options) would actually be marked as $as despite the integer in the zeroeth element).
    • $d - Binary data.
    • $h - Handle, usually to a file or window. NB: AutoIt handled controls return IDs, and so use $id instead.
    • $id - An AutoIt control Id.
    • $i - Integer.
    • $b - Boolean.
    • $f - Floating point number.
    • $n - general number with no preference for floating point or integral.
    • $s - String.
    • $v - Variant (unknown/variable type of data) .
    • $p - Pointer. It is assumed that it points to a struct so no further letters are needed. The type of struct being pointed to should be inferrable from the variable name e.g. $pWindowRect can be assumed to be a pointer to a $tagRECT structure.
    • $t - Structure returned from DllStructCreate.
    • $tag - Struct definition string.Structure definitions should conform to the structure guidelines.


    Quelle


    f sollte ja für Flag stehen, womit ich laut alter Präfixliste ja dann richtig lag, was aber eher Zufall war 8o

  • Borderless Fullscreen Windowed mit jedem Fenster

    • Friesel
    • 6. Oktober 2013 um 23:15
    Zitat von alpines

    Was mich aber an diesem Script (dem 2.) wundert ist, wenn man die Tastenkombination drückt, dann wechselt der doch die ganze Zeit dazwischen?
    Warum stellt man es nicht so ein, das $fPressed (wtf, warum f und nicht b xD) erst True ist, wenn in

    [autoit]

    If _IsPressed("11") and _IsPressed("26") and _IsPressed("12") And $fPressed = False Then

    [/autoit]


    noch das gilt:

    [autoit]

    While _IsPressed("11") and _IsPressed("26") and _IsPressed("12")
    $fPressed = True
    WEnd

    [/autoit]


    Ich hab das jetzt einfach so ausm Kopf hingeschrieben, bin mir nicht ganz sicher ob es funktioniert.
    Jedenfalls sollte man aus dem 1. If erst raus, wenn die Tasten losgelassen sind, da das Script durchrattert.
    Das gleiche sollte man beim 2. If auch machen!

    Alles anzeigen

    Also bei mir rattert nichts durch :rolleyes: Wenn man einmal Strg-Alt-Up drückt, dann kommt man kein zweites mal in die If-Abfrage, sondern muss zuerst Strg-Alt-Down drücken, um das Fenster wiederherzustellen.
    Möglicherweise hast du übersehen, dass ich in der zweiten If-Abfrage eine andere Taste abfrage, als in der ersten (einmal Curser hoch, einmal Curser runter).

    Zitat von alpines

    wtf, warum f und nicht b xD

    Du hast natürlich vollkommen Recht! Das 'f' sollte eigendlich für 'F'lag stehen, weil ich die Notation falsch in Erinnerung hatte und das Skript auch nur mal schnell hingeklatscht hab :whistling:

    Zitat von chesstiger

    Oder auch in meinem Tutorial - Siehe Signatur. :whistling: ]

    Du wirst lachen, genau an dein Tutorial "versuche" ich mich zu halten. Das 'f' war schlichtweg ein Irrtum ;(

  • Borderless Fullscreen Windowed mit jedem Fenster

    • Friesel
    • 6. Oktober 2013 um 22:22
    Zitat von Xorianator

    €: Ich habs irgendwie nicht hinbekommen den Style für ein normales Fenster zu finden, vielleicht lässt sich da ja jemand herab und verrät mir welcher Style das ist, dann gibts auch n Back mode :D

    Moin!

    Hier mal mein Vorschlag:

    [autoit]

    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include <Constants.au3>
    #include <WinApi.au3>

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

    Global $iStyle, $fPressed = False

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

    While Sleep(20)
    If _IsPressed("11") and _IsPressed("26") and _IsPressed("12") And $fPressed = False Then ;==> <STRG+ALT+UP>
    $wintitle = WinGetTitle("[active]")
    $aPos = WinGetPos($wintitle) ;ursprüngliche Position und Grösse ermitteln
    $iStyle = _WinAPI_GetWindowLong(WinGetHandle($wintitle), $GWL_STYLE) ;ursprünglichen Stil ermitteln
    _WinAPI_SetWindowLong(WinGetHandle($wintitle), $GWL_STYLE, $WS_POPUPWINDOW) ;Eigentliche Funktion
    WinSetState($wintitle, "", @SW_MAXIMIZE) ;Maximieren für Vollbild
    ;WinSetState($wintitle, "", @SW_SHOW) ;Fenster ist sonst sichtbar aber wird "durchdrungen"
    $fPressed = True
    ElseIf _IsPressed("11") and _IsPressed("28") and _IsPressed("12") And $fPressed = True Then ;==> <STRG+ALT+DOWN>
    $wintitle = WinGetTitle("[active]")
    _WinAPI_SetWindowLong(WinGetHandle($wintitle), $GWL_STYLE, $iStyle) ;ursprünglichen Stil wiederherstellen
    WinMove($wintitle, "", $aPos[0], $aPos[1], $aPos[2], $aPos[3]) ;ursprüngliche Position und Grösse wiederherstellen
    ;WinSetState($wintitle, "", @SW_RESTORE) ;ursprüngliche Grösse wird so nicht wiedrhergestellt
    ;WinSetState($wintitle, "", @SW_SHOW) ;Fenster ist sonst sichtbar aber wird "durchdrungen"
    $fPressed = False
    EndIf
    WEnd

    [/autoit]


    Ich finde es besser, den ursprünglichen Stil wiederherzustellen, als einen Standard Stil zu setzen, der unter Umständen nicht dem ursprünglichen Stil entspricht.
    Zeile 15 (WinSetState($wintitle, "", @SW_SHOW) ) habe ich auskommentiert, weil es bei mir keinen Unterschied macht. Was meinst du mit "durchdrungen"?
    Da der Status @SW_RESTORE anscheinend nicht die ursprüngliche Grösse wiederherstellt, habe ich das mit WinGetPos/WinMove erledigt...
    Achtung: Nicht auf mehrere Fenster anwenden, dazu bedarf es weiterer Überprüfungen, wozu ich zu faul war 8)


    Sanfte Grüße :D

  • RunWait Batch

    • Friesel
    • 1. Oktober 2013 um 19:11

    Moin!

    Ich habe zZt auch Probleme mit dem Befehl "Run". Die Ursache scheint das Arbeitsverzeichnis zu sein. Hab schon sämtliche Variationen versucht, aber alle ohne Erfolg.
    Wenn ich dagegen "_RunDos" nehme wird der CMD Befehl klaglos ausgeführt...

    In deinem Fall solltest du also mal folgendes versuchen:

    [autoit]

    #include <Process.au3>

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

    _RunDos("batch.bat")
    ;~ oder
    _RunDos(@ScriptDir & "\batch.bat")

    [/autoit]


    Die Command Line wird automatisch versteckt, es wird also kein Parameter wie @SW_MINIMIZE oder @SW_HIDE benötigt. Ausserdem wartet _RunDos ebenfalls auf Beendigung des Befehles...

    @Experten: Könnt ihr mir erklären, wie das (zumindest in meinem Fall) funktioniert?

    *edit*
    Ich hab mir jetzt mal die Process.au3 UDF angesehen (wieso erst jetzt. weiß ich auch nicht...) und die ruft lediglich folgenden Befehl auf:

    [autoit]

    RunWait(@ComSpec & " /C " & $sCommand, "", @SW_HIDE)
    ;~ also in deinem Fall:
    RunWait(@ComSpec & " /C " & @ScriptDir & "\batch.bat", "", @SW_HIDE)

    [/autoit]


    Bei mir funktionierts logischerweise genauso wie bei _RunDos...

    *edit²*
    Kommando zurück! Mit Batch Dateien funktioniert das ganze leider nicht. In meinem Fall hatte ich einen "echten DOS Befehl" ausgeführt. Entschuldige meine Verwirrung ;(

    Unter diesen Umständen muss ich Schnitzel recht geben, der empfiehlt, TextAloud direkt mit AutoIt anzusteuern, was kein Problem darstellen sollte.
    Mit der Command Line Version von TextAloud führt folgendes bei mir zum Erfolg:

    [autoit]

    ShellExecuteWait($PfadZumProgramm & '\TACommand.exe', '/text="Hello, this is Mike speaking. Have a great day." /tofile="AudioFile1.mp3" /voice="AT&T Mike16"', '', '', @SW_HIDE)

    [/autoit]


    Sanfte Grüße :D

  • Probleme mit der GUI Aktualisierung

    • Friesel
    • 27. September 2013 um 00:17

    Moin!

    Mir ist zwar nicht ganz klar, wie du die Gui lahmlegst, aber warum änderst du die Status nicht direkt in der Test-Funktion?

    Also so:

    [autoit]

    #Region ## CONNECTION TEST ###
    Func _ConTest()
    Local $_S1_Open = _FTP_Open('MyFTP Control')
    Local $_S1_Conn = _FTP_Connect($_S1_Open, $sOptFtpServer, $sOptFtpUser, $sOptFtpPasswd, 0, $INTERNET_DEFAULT_FTP_PORT, $INTERNET_SERVICE_FTP, 0)
    _FTP_ProgressDownload1($_S1_Conn, "temp" & $sOptFtpZugang, "../_func/" & $sOptFtpZugang, "_UpdateProgress")
    _FTP_Close($_S1_Open)
    Local $check = IniRead("temp\zugang.ini", "sektion1", "check", "Nicht gefunden")
    FileDelete("temp\zugang.ini")
    $sConnChange = True
    If $check = "Nicht gefunden" Then
    _logfile("### ERROR - Serverconn: " & $check)
    $defaultstatus = " VERBUNDEN"
    GUICtrlSetData ($statuslabel, " Verbindungsstatus zum FTP-Server:" & $defaultstatus)
    GUICtrlSetColor($statuslabel, 0x40FF00)
    GUICtrlSetFont($statuslabel, Default, 400, Default, "Arial Black")
    GUICtrlSetState($hGuiMainButton_1, $GUI_ENABLE)
    Else
    _logfile("Serverconn: " & $check)
    $defaultstatus = " KEINE VERBINDUNG !!!"
    GUICtrlSetData ($statuslabel, " Verbindungsstatus zum FTP-Server:" & $defaultstatus)
    GUICtrlSetColor($statuslabel, 0xFF0000)
    GUICtrlSetState($hGuiMainButton_1, $GUI_DISABLE)
    Endif
    EndFunc
    #EndRegion ## CONNECTION TEST ###

    [/autoit]


    Ich gehe davon aus, dass die Controls global erstellt wurden, ansonsten hättest du innerhalb der Funktion keinen Zugriff auf die entsprechenden Variablen...

    Hoffentlich hab ich das Problem richtig erkannt, wenn nicht, bitte ich darum, diesen Beitrag zu ignorieren :whistling:


    Sanfte Grüße :D

  • Was mach ich falsch?

    • Friesel
    • 18. September 2013 um 15:20

    Moin!

    Vieleicht habe ich ja was falsch verstanden, aber wieso nimmst du keine ComboBox?
    Hier wird automatisch eine History erstellt, durch die man mit Curser auf/ab browsen kann.
    Dann gibt es noch Befehle wie _GUICtrlComboBox_AutoComplete, die das Ganze noch komfortabler machen.
    Bei Programmende kann man dann die Liste mit Hilfe von _GUICtrlComboBoxEx_GetListArray in eine INI-Datei schreiben, um diese beim nächsten Programmstart wieder in die ComboBox zu laden.

    Aber wie gesagt: vieleicht hab ich dein Anliegen missverstanden und du bist auf etwas ganz Anderes aus...


    Sanfte Grüße :D

  • fileOpenDialog

    • Friesel
    • 5. September 2013 um 13:48
    Zitat von YaeroxXO

    Wenn ich ehrlich bin hätte ich ohne Friesels Glaskugel nun nicht verstanden was denn gerne das Ziel wäre :P


    Ehrlich gesagt, hab ichs auch nicht sofort verstanden, aber dann habe ich mir in stundenlanger Programmierarbeit eine Funktion zum Entschlüsseln geschrieben (Achtung: ist noch im Alpha-Status) :thumbup: :

    [autoit]

    $sVerWirrWarr = "Hi, Ich habe ein problem ich brauche file opendialog um eine datei aus zu wählen aber nun gibt er mir den ganzen pfad an und das will ich nicht gibt es eine andere möglichkeit ? oder etwas was man dazu schreiben kann"
    $sKlartext = StringReplace($sVerWirrWarr, $sVerWirrWarr, "FileOpenDialog...gibt mir den ganzen pfad an und das will ich nicht")
    MsgBox(0,"Klartext", $sKlartext)

    [/autoit]

    @Rusim: nur ein kleiner Scherz auf deine Kosten. Nichts für ungut ;)

  • fileOpenDialog

    • Friesel
    • 5. September 2013 um 12:13

    Moin!

    Mit folgenden Befehlen kannst du den Dateinamen entweder mit Suffix (Dateiendung) oder ohne ausgeben:

    [autoit]

    $sPfad = FileOpenDialog("Datei auswählen...", @ProgramFilesDir, "Alle (*.*)")

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

    ;voller Dateiname:
    $sDateinameSuffix = StringRegExpReplace($sPfad, '.+\\(.+)', '$1')
    ;Dateiendung entfernt:
    $sDateinameKeinSuffix = StringRegExpReplace($sPfad, '.+\\(.+)\.[^.]*$', '$1')

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

    MsgBox(0,"Suffix", "Voller Pfad: " & @CRLF & $sPfad & @CRLF & @CRLF & "Dateiname mit Suffix: " & @CRLF & $sDateinameSuffix & _
    @CRLF & @CRLF & "Dateiname ohne Suffix: " & @CRLF & $sDateinameKeinSuffix)

    [/autoit]


    Sanfte Grüße :D

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™