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

Beiträge von Oscar

  • Frage zu MouseCoordMode

    • Oscar
    • 30. September 2019 um 16:04

    Ein Tooltip ist auch nur ein Window, also kann man die Koordinaten problemlos zur Laufzeit auslesen:

    Code
    #include <Misc.au3>
    #include <WinAPIGdiInternals.au3>
    #include <WinAPIMisc.au3>
    #include <WinAPISysInternals.au3>
    
    Global $dll = DllOpen("user32.dll")
    
    ; Den ToolTip anzeigen.
    ToolTip(@CRLF & "Dies ist ein Test" & @CRLF & @CRLF & "Zum Ausblenden des ToolTips, auf den ToolTip klicken." & @CRLF & " ", _
            @DesktopWidth * 0.5, @DesktopHeight * 0.5, "ToolTip-Test", 2, 2)
    
    While 1
        ; Sleep, um die Systemlast zu reduzieren.
        Sleep(100)
        ; Testen, ob die linke Maustaste betätigt wurde.
        If _IsPressed("01", $dll) Then
            ; Testen, ob der Mausklick innerhalb des Tooltips erfolgt ist.
            If _MouseInWindow() Then
                DllClose($dll)
                ToolTip("")
                ExitLoop
            EndIf
        EndIf
    WEnd
    DllClose($dll)
    MsgBox(262144, "", "Ich habe fertig!")
    Exit
    
    Func _MouseInWindow()
        Local $hWnd = WinGetHandle('[CLASS:tooltips_class32]')
        Local $tRect = _WinAPI_GetWindowRect($hWnd)
        Local $tPoint = _WinAPI_GetMousePos()
        Return _WinAPI_PtInRect($tRect, $tPoint)
    EndFunc
    Alles anzeigen
  • Ini-Struktur mit Regex abbilden

    • Oscar
    • 26. September 2019 um 19:00

    Vielleicht so:

    Code
    #include <Array.au3>
    
    $sString = "[ID1]" & @CRLF & "Ab=2019/12/12" & @CRLF & "Nummer=" & @CRLF & "Text=Test" & _
    @CRLF & "An=User1" & @CRLF & "Von=User1" & @CRLF & "Erledigt am=" & @CRLF & "Erledigt von=" & @CRLF & _
    "Jeder=Nein" & @CRLF & "Zuletzt geprüft=2019/01/01" & @CRLF & "Serienregel=Nein" & @CRLF & _
    "Ablage=OrdnerX" & @CRLF & "Geöffnet von=User2" & @CRLF
    
    $aRet = StringRegExp($sString, "(?:\[.+?\]\v+)*(?:(.*?)=(.*?)\v+)", 3)
    _ArrayDisplay($aRet, "key and value")
    $aRet = StringRegExp($sString, "(?:\[.+?\]\v+)*(?:.*?=(.*?)\v+)", 3)
    _ArrayDisplay($aRet, "value only")
    Alles anzeigen
  • "FTP_FileGet" ein 2. mal nicht möglich?

    • Oscar
    • 26. September 2019 um 13:06

    Du musst bei " _FTP_FileOpen" das Flag "$INTERNET_FLAG_RELOAD" setzen, damit die Datei nicht aus dem Cache geholt wird.

  • ListView Header-Fokus für Init-Sortierung setzen

    • Oscar
    • 12. September 2019 um 12:13
    Zitat von Micha_he

    Ich benötige es aber ohne das der Benutzer geklickt hat.

    Naja, das lässt sich ja schnell ermitteln:

    Code
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    
    $hMainGUI = GUICreate("ListView Init-Sort-Test", 400, 200, 100, 100, -1, $WS_EX_ACCEPTFILES)
    $idListview = GUICtrlCreateListView("col1  |col2|col3  ", 10, 10, 380, 180)
    $idItem1 = GUICtrlCreateListViewItem("bbb|data11|data21", $idListview)
    $idItem2 = GUICtrlCreateListViewItem("ddd|data12|data22", $idListview)
    $idItem3 = GUICtrlCreateListViewItem("aaa|data13|data23", $idListview)
    _GUICtrlListView_RegisterSortCallBack($idListview, 2, True)
    GUICtrlSetState($idListview, $GUI_DROPACCEPTED)
    GUICtrlSetResizing($idListview, $GUI_DOCKAUTO)
    
    $h_LV_Header = _GUICtrlListView_GetHeader(GUICtrlGetHandle($idListview))
    $bSortSense = True ; True = absteigend, False = aufsteigend
    $iColumn = 0
    _GUICtrlListView_SimpleSort($idListview, $bSortSense, $iColumn)
    _GUICtrlHeader_SetItemFlags($h_LV_Header, $iColumn, $bSortSense ? 8 : 4)
    GUISetState(@SW_SHOW)
    $iState = 0
    $iSortIndex = _GUICtrlHeader_GetSortedItem($h_LV_Header)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iSortIndex = ' & $iSortIndex & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _GUICtrlListView_UnRegisterSortCallBack($idListview)
                ExitLoop
    
            Case $idListview
                $iState = GUICtrlGetState($idListview)
                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iState = ' & $iState & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
                _GUICtrlListView_SortItems($idListview, $iState)
    
        EndSwitch
    WEnd
    
    Func _GUICtrlHeader_GetSortedItem(ByRef $hHeader)
        For $iIndex = 0 To _GUICtrlHeader_GetItemCount($hHeader) - 1
            If BitAND(_GUICtrlHeader_GetItemFlags($hHeader, $iIndex), 12) Then Return $iIndex
        Next
        Return -1
    EndFunc   ;==>_GUICtrlHeader_GetSortedItem
    Alles anzeigen

    Edit: Funktionsname geändert in "_GUICtrlHeader_GetSortedItem". Passt besser.

  • ListView Header-Fokus für Init-Sortierung setzen

    • Oscar
    • 12. September 2019 um 10:21
    Zitat von Micha_he

    Nein, das ist leider auch nur die Optik (Pfeil im Header). Die Rückgabe von 'GUICtrlGetState($idListview)' bleibt trotzdem bei -1.

    Das ist bei mir nicht so:

    Code
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    
    $hMainGUI = GUICreate("ListView Init-Sort-Test", 400, 200, 100, 100, -1, $WS_EX_ACCEPTFILES)
    $idListview = GUICtrlCreateListView("col1  |col2|col3  ", 10, 10, 380, 180)
    $idItem1 = GUICtrlCreateListViewItem("bbb|data11|data21", $idListview)
    $idItem2 = GUICtrlCreateListViewItem("ddd|data12|data22", $idListview)
    $idItem3 = GUICtrlCreateListViewItem("aaa|data13|data23", $idListview)
    _GUICtrlListView_RegisterSortCallBack($idListview, 2, True)
    GUICtrlSetState($idListview, $GUI_DROPACCEPTED)
    GUICtrlSetResizing($idListview, $GUI_DOCKAUTO)
    
    $h_LV_Header = _GUICtrlListView_GetHeader(GUICtrlGetHandle($idListView))
    $bSortSense = True ; True = absteigend, False = aufsteigend
    _GUICtrlListView_SimpleSort($idListview, $bSortSense, 0)
    _GUICtrlHeader_SetItemFlags($h_LV_Header, 0, $bSortSense ? 8 : 4)
    GUISetState(@SW_SHOW)
    $iState = 0
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _GUICtrlListView_UnRegisterSortCallBack($idListview)
                ExitLoop
    
            Case $idListview
                $iState = GUICtrlGetState($idListview)
                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iState = ' & $iState & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
                _GUICtrlListView_SortItems($idListview, $iState)
    
        EndSwitch
    WEnd
    Alles anzeigen

    $iState bekommt den Indexwert von der Spalte, die man anklickt.

  • ListView Header-Fokus für Init-Sortierung setzen

    • Oscar
    • 12. September 2019 um 09:23

    Ah, Du willst nur den Sortierpfeil richtig setzen. Dazu musst Du nur das Flag vom Header-Eintrag entsprechend ändern:

    Code
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    
    $hMainGUI = GUICreate("ListView Init-Sort-Test", 400, 200, 100, 100, -1, $WS_EX_ACCEPTFILES)
    $idListview = GUICtrlCreateListView("col1  |col2|col3  ", 10, 10, 380, 180)
    $idItem1 = GUICtrlCreateListViewItem("bbb|data11|data21", $idListview)
    $idItem2 = GUICtrlCreateListViewItem("ddd|data12|data22", $idListview)
    $idItem3 = GUICtrlCreateListViewItem("aaa|data13|data23", $idListview)
    _GUICtrlListView_RegisterSortCallBack($idListview, 2, True)
    GUICtrlSetState($idListview, $GUI_DROPACCEPTED)
    GUICtrlSetResizing($idListview, $GUI_DOCKAUTO)
    
    $h_LV_Header = _GUICtrlListView_GetHeader(GUICtrlGetHandle($idListView))
    $bSortSense = True ; True = absteigend, False = aufsteigend
    _GUICtrlListView_SimpleSort($idListview, $bSortSense, 0)
    _GUICtrlHeader_SetItemFlags($h_LV_Header, 0, $bSortSense ? 8 : 4)
    GUISetState(@SW_SHOW)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _GUICtrlListView_UnRegisterSortCallBack($idListview)
                ExitLoop
    
            Case $idListview
                _GUICtrlListView_SortItems($idListview, GUICtrlGetState($idListview))
    
        EndSwitch
    WEnd
    Alles anzeigen
  • ListView Header-Fokus für Init-Sortierung setzen

    • Oscar
    • 12. September 2019 um 05:22
    Zitat von Micha_he

    ist der Rückgabewert von 'GUICtrlGetState($idListview)' weiterhin -1 ! Und das ist nicht korrekt.

    Hmm...und warum ist das nicht korrekt?

    Der Befehl gibt nur die angeklickte Listview-Spalte zurück.

    Was willst Du denn eigentlich erreichen (X/Y-Problem)?

  • ListView Header-Fokus für Init-Sortierung setzen

    • Oscar
    • 11. September 2019 um 10:12
    Zitat von Micha_he

    Meine letzte/einzige Lösung ist ControlClick(). Hat jemand eine bessere Idee, damit das Ergebnis von GUICtrlGetState($idListView) das gewünschte ist ?

    Entweder verstehe ich die Frage falsch oder Du suchst einfach nach: _GUICtrlListView_SortItems($idListview, 0).

  • Variable used without being declared

    • Oscar
    • 5. September 2019 um 19:36
    Zitat von TL1983

    Warum nur auf meinem Rechner ? Habt ihr eine Idee?

    Ja, Du fütterst Deinen Rechner mit Billig-Strom, sagt zumindest meine Kristallkugel.

    Im Ernst: Wie sollen wir das wissen, wenn Du nicht wenigstens ein lauffähiges Beispielscript postest (in dem der Fehler auftritt)?

    Wenn es denn das Originalscript nicht sein soll oder darf.

  • Grafikspezialisten - GDIplus - kreisrundes Menü

    • Oscar
    • 23. August 2019 um 10:47

    Ich hatte mal so ein Script geschrieben: Script zum beheben der "Script breaking changes"

  • Verständnisfrage WindowStyle/Ex

    • Oscar
    • 19. August 2019 um 17:41
    Zitat von BugFix

    Hat jemand eine Erklärung dafür?

    Die "Nuller" sind Standardwerte, die "immer" gelten.

    Bzw. die "Gegenwerte" gelten auch nur in Abhängigkeit:

    Beispiel WS_EX_RTLREADING: "If the shell language is Hebrew, Arabic, or another language that supports reading-order alignment, the window text is displayed using right-to-left reading-order properties. For other languages, the style is ignored."

    Beispiel WS_EX_RIGHT: "The window has generic "right-aligned" properties. This depends on the window class. This style has an effect only if the shell language is Hebrew, Arabic, or another language that supports reading-order alignment; otherwise, the style is ignored."

    Siehe: https://docs.microsoft.com/de-de/windows/…d-window-styles

  • Monitor ausgeschaltet lassen trotz MouseMove und Send

    • Oscar
    • 19. August 2019 um 17:29

    Eine Hardware-Lösung würde mir noch einfallen:

    Wenn ein zweiter Monitor angeschlossen ist, wird das LC-Display vom Laptop standardmäßig ausgeschaltet.

    Und wenn man jetzt statt eines echten zweiten Monitors einen Dummy-Adapter ansteckt, müsst das trotzdem funktionieren.

    So was:

    https://www.amazon.de/Headless-Displ…1/dp/B072PV6K8J

    oder so was:

    https://www.amazon.de/Virtueller-Dis…4YS0XHE1YF8D138

  • Monitor ausgeschaltet lassen trotz MouseMove und Send

    • Oscar
    • 18. August 2019 um 18:58

    Naja, AutoIt simuliert nun mal die Eingabe per Maus/Tastatur, wenn Du MouseMove und Send verwendest.

    Was sagt denn das AutoIt-Info-Tool ("Au3Info.exe")? Werden die Control-Elemente Deiner Musik-Software erkannt?

    Wenn ja, könntest Du die Control-Befehle (ControlClick, ControlSend, ControlCommand) von AutoIt verwenden, statt MouseMove und Send.

    Bei diesen Befehlen sollte der Monitor aus bleiben.

  • Bestimmte zeilen aus Textdatei

    • Oscar
    • 15. August 2019 um 08:32
    Zitat von shakoon

    ist das irgendwie möglich?

    Klar!

    Code
    Global $sSearch = '185.15.112.00'
    Global $sData = '10;135.01.052.00;2;504194;2.19.050' & @CRLF & '80;135.09.082.00;2;509644;2.19.080' & @CRLF & '110;185.15.112.00;2;503741;2.19.077' & @CRLF & '610;185.15.112.00;1;305489;2.18.100' & @CRLF & '650;185.15.112.00;1;305889;2.18.101' & @CRLF & '630;185.15.112.00;1;305989;2.18.102' & @CRLF
    Global $aRows = StringSplit($sData, @CRLF, 3), $aCols
    For $iRow = 0 To UBound($aRows) - 1
        $aCols = StringSplit($aRows[$iRow], ';', 2)
        For $iCol = 0 To UBound($aCols) - 1
            If $aCols[$iCol] == $sSearch Then
                ConsoleWrite($aCols[$iCol] & @CRLF)
            EndIf
        Next
    Next
    Alles anzeigen
  • Dateinamen anpassen

    • Oscar
    • 14. August 2019 um 18:14

    Dafür hatte ich mir mal eine kleine Funktion geschrieben:

    Code
    $sFilename = @ScriptDir & '\2019-08-14.txt'
    $sFilename = _GetUniqueFileName($sFilename)
    If @error Then
        ConsoleWrite('Fehler = ' & @error & @CR)
    Else
        ConsoleWrite('Dateiname = "' & $sFilename & '"' & @CR)
    EndIf
    FileWriteLine($sFilename, 'Test')
    
    ;===============================================================================
    ; Function Name:   _GetUniqueFileName($sPath)
    ; Description::    Wenn der Dateiname bereits existiert wird ein Zähler
    ;                  in Form von: " (1)" an den Dateinamen angehängt.
    ; Parameter(s):    $sPath = kompletter Pfad der Datei
    ; Requirement(s):  -
    ; Return Value(s): bei Erfolg = der (neue) Dateiname
    ;                  bei Fehler wird @error = 1 (Pfad falsch angegeben)
    ; Author(s):       Oscar (www.autoit.de)
    ;===============================================================================
    Func _GetUniqueFileName($sPath, $iLen = 1)
        Local $aPath, $sNumber = '', $iCount = 0
        $aPath = StringRegExp($sPath, '(.+\\)(.+)(?:_\(\d*\))*(\..+)', 3)
        If @error Then Return SetError(1, 0, 0)
        While FileExists($aPath[0] & $aPath[1] & $sNumber & $aPath[2])
            $iCount += 1
            $sNumber = StringFormat('_(%0' & $iLen & 'i)', $iCount)
        WEnd
        Return $aPath[0] & $aPath[1] & $sNumber & $aPath[2]
    EndFunc   ;==>_GetUniqueFileName
    Alles anzeigen
  • Checkbox schalten über das Internet - vergleichbar mit Schach online

    • Oscar
    • 13. August 2019 um 07:27
    Zitat von Banana_2_Day

    Kannst Du Dein Skript ein wenig dahingehend umschreiben, dass es geteilt ist in Client und Server?

    Ok! Findest Du als Anhang.

    Die "Server.au3" musst Du erst compilieren und dann starten. Anschließend kannst Du die "Client.au3" ausführen (geht auch als Script).

    Im Clientprogramm gibt es einen Button zum connecten mit dem Server. Dort musst Du noch Deine DynDns-Adresse eintragen (IP-Adresse wird vom Programm ermittelt).

    Die DynDns-Konfiguration und die Port-Weiterleitung im Router hast Du ja bereits vorgenommen.

    Dateien

    Client.au3 2,31 kB – 390 Downloads Server.au3 3,04 kB – 344 Downloads
  • Pfad - vor oder nach einem Backslash etwas einfügen

    • Oscar
    • 12. August 2019 um 17:57

    StringRegEx wäre auch noch eine Möglichkeit:

    Code
    $sText = "c:\1\2\3\4\5\test.txt"
    
    $sNew1 = StringRegExpReplace($sText, "(.+?\\)(.+)", "$1backup\\$2")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sNew1 = ' & $sNew1 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    
    $sNew2 = StringRegExpReplace($sText, "(.+?\\)((?:.+?\\){2})((?:.+?\\){2})((?:.+?\\){1})(.+)", "$1$2backup\\$4$5")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sNew2 = ' & $sNew2 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
  • Suche Erinnerungsprogramm für wiederkehrende Aufgaben

    • Oscar
    • 10. August 2019 um 09:49
    Zitat von Muecke

    Habt Ihr eine Idee?

    Hier ist das AutoIt-Forum, also selber schreiben! :)

    Wenn Du Dir das nicht selbst zutraust, gibt es auch noch "Programmieranfragen".

  • _WM_NOTIFY - _GUICtrlListView_SortItems zu langsam

    • Oscar
    • 8. August 2019 um 19:17
    Zitat von smaster123

    Sonst noch eine Idee?

    Das habe ich Dir bereits hier gezeigt: ListView Sortierungshäkchen entfernen

    Listview-Inhalt komplett löschen, das Daten-Array sortieren und das sortierte Array im Listview anzeigen. Das ist deutlich schneller, als das sortieren im Listview.

  • ListView Sortierungshäkchen entfernen

    • Oscar
    • 7. August 2019 um 13:23
    Zitat von smaster123

    das sortieren ist bei mir doch gar nicht notwendig, ich hole die Daten schon sortiert von der Datenbank:

    Zitat von smaster123

    ich habe mit

    _GUICtrlListView_RegisterSortCallBack($ListView1)

    die ListView sortierbar gemacht, was auch gut funktioniert

    Du widersprichst Dir selbst!

    Was willst Du denn nun erreichen?

    Soll das Listview sortiert werden können oder nicht?

    Außerdem habe ich Dir die Lösung für den Sortierpfeil bereits geschrieben (_GUICtrlHeader_SetItemFlags). Dafür brauchst Du das Handle vom Listview-Header.

    Ich könnte Dir das auch in Dein Script integrieren, wenn Du es mal posten würdest (u.U. mit Zufallsdaten, wie ich das gemacht habe).

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™