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

Beiträge von Bitnugger

  • _GetKalenderwoche.au3

    • Bitnugger
    • 28. November 2020 um 15:59
    Zitat von x0r

    sowas ähnliches hatte ich während meiner Azubi-Zeit mal gebaut.

    Ja, schön, das kann man sicher auch gut gebrauchen... hier eine etwas erweiterte Version, die nicht nur auf Mausklick, sondern auch auf Tastatur (Pfeiltasten/PageUp/PageDown) und Mausrad reagiert.

    AutoIt
    ;-- TIME_STAMP   2020-11-27 20:08:41   v 0.1
    
    #include <GUIConstantsEx.au3>
    #include <GuiMonthCal.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    
    Global $g_hMonthCal, $g_idKW, $g_iYear = @YEAR, $g_iMonth = @MON, $g_iDay = @MDAY, $g_iKW = _WeekNumberISO($g_iYear, $g_iMonth, $g_iDay)
    
    Example()
    
    Func Example()
        Local $hGUI
    
        ; Create GUI
        $hGUI = GUICreate("KW_Anzeiger 3.0", 400, 170)
        $g_hMonthCal = _GUICtrlMonthCal_Create($hGUI, 4, 4, $WS_BORDER)
        $g_idKW = GUICtrlCreateLabel(StringFormat('%02d', $g_iKW), 192, 4, 188, 162)
        GUICtrlSetFont(-1, 128)
        GUISetState(@SW_SHOW)
    
        GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    
        ; Loop until the user exits.
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
    EndFunc   ;==>Example
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo
    
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $g_hMonthCal
                Switch $iCode
                    Case $MCN_GETDAYSTATE ; Sent by a month calendar control to request information about how individual days should be displayed
                        $tInfo = DllStructCreate($tagNMDAYSTATE, $lParam)
                        _DebugPrint("$MCN_GETDAYSTATE" & @CRLF & _
                                "--> hWndFrom    : " & $hWndFrom & @CRLF & _
                                "--> IDFrom      : " & $iIDFrom & @CRLF & _
                                "--> Code        : " & $iCode & @CRLF & _
                                "--> Year        : " & DllStructGetData($tInfo, "Year") & @CRLF & _
                                "--> Month       : " & DllStructGetData($tInfo, "Month") & @CRLF & _
                                "--> DOW         : " & DllStructGetData($tInfo, "DOW") & @CRLF & _
                                "--> Day         : " & DllStructGetData($tInfo, "Day") & @CRLF & _
                                "--> Hour        : " & DllStructGetData($tInfo, "Hour") & @CRLF & _
                                "--> Minute      : " & DllStructGetData($tInfo, "Minute") & @CRLF & _
                                "--> Second      : " & DllStructGetData($tInfo, "Second") & @CRLF & _
                                "--> MSecond     : " & DllStructGetData($tInfo, "MSecond") & @CRLF & _
                                "--> DayState    : " & DllStructGetData($tInfo, "DayState") & @CRLF & _
                                "--> pDayState   : " & DllStructGetData($tInfo, "pDayState"))
                        ; Address of an array of MONTHDAYSTATE (DWORD bit field that holds the state of each day in a month)
                        ; Each bit (1 through 31) represents the state of a day in a month. If a bit is on, the corresponding day will
                        ; be displayed in bold; otherwise it will be displayed with no emphasis.
                        ; No return value
                    Case $MCN_SELCHANGE ; Sent by a month calendar control when the currently selected date or range of dates changes
                        $tInfo = DllStructCreate($tagNMSELCHANGE, $lParam)
                        $g_iYear  = DllStructGetData($tInfo, "BegYear")
                        $g_iMonth = DllStructGetData($tInfo, "BegMonth")
                        $g_iDay   = DllStructGetData($tInfo, "BegDay")
                        Local $iKW = _WeekNumberISO($g_iYear, $g_iMonth, $g_iDay)
                        If $iKW <> $g_iKW Then
                            $g_iKW = $iKW
                            GUICtrlSetData($g_idKW, StringFormat('%02d', $g_iKW))
                        EndIf
                        _DebugPrint("$MCN_SELCHANGE" & @CRLF & _
                                "--> hWndFrom    : " & $hWndFrom & @CRLF & _
                                "--> IDFrom      : " & $iIDFrom & @CRLF & _
                                "--> Code        : " & $iCode & @CRLF & _
                                "--> BegYear     : " & DllStructGetData($tInfo, "BegYear") & @CRLF & _
                                "--> BegMonth    : " & DllStructGetData($tInfo, "BegMonth") & @CRLF & _
                                "--> BegDOW      : " & DllStructGetData($tInfo, "BegDOW") & @CRLF & _
                                "--> BegDay      : " & DllStructGetData($tInfo, "BegDay") & @CRLF & _
                                "--> BegHour     : " & DllStructGetData($tInfo, "BegHour") & @CRLF & _
                                "--> BegMinute   : " & DllStructGetData($tInfo, "BegMinute") & @CRLF & _
                                "--> BegSecond   : " & DllStructGetData($tInfo, "BegSecond") & @CRLF & _
                                "--> BegMSeconds : " & DllStructGetData($tInfo, "BegMSeconds") & @CRLF & _
                                "--> EndYear     : " & DllStructGetData($tInfo, "EndYear") & @CRLF & _
                                "--> EndMonth    : " & DllStructGetData($tInfo, "EndMonth") & @CRLF & _
                                "--> EndDOW      : " & DllStructGetData($tInfo, "EndDOW") & @CRLF & _
                                "--> EndDay      : " & DllStructGetData($tInfo, "EndDay") & @CRLF & _
                                "--> EndHour     : " & DllStructGetData($tInfo, "EndHour") & @CRLF & _
                                "--> EndMinute   : " & DllStructGetData($tInfo, "EndMinute") & @CRLF & _
                                "--> EndSecond   : " & DllStructGetData($tInfo, "EndSecond") & @CRLF & _
                                "--> EndMSeconds : " & DllStructGetData($tInfo, "EndMSeconds") & @CRLF & _
                                ">-> $g_iYear    : " & $g_iYear  & @CRLF & _
                                ">-> $g_iMonth   : " & $g_iMonth & @CRLF & _
                                ">-> $g_iDay     : " & $g_iDay   & @CRLF & _
                                ">-> $g_iKW      : " & $g_iKW)
                        ; No return value
                    Case $MCN_SELECT ; Sent by a month calendar control when the user makes an explicit date selection within a month calendar control
                        $tInfo = DllStructCreate($tagNMSELCHANGE, $lParam)
                        _DebugPrint("$MCN_SELECT" & @CRLF & _
                                "--> hWndFrom    : " & $hWndFrom & @CRLF & _
                                "--> IDFrom      : " & $iIDFrom & @CRLF & _
                                "--> Code        : " & $iCode & @CRLF & _
                                "--> BegYear     : " & DllStructGetData($tInfo, "BegYear") & @CRLF & _
                                "--> BegMonth    : " & DllStructGetData($tInfo, "BegMonth") & @CRLF & _
                                "--> BegDOW      : " & DllStructGetData($tInfo, "BegDOW") & @CRLF & _
                                "--> BegDay      : " & DllStructGetData($tInfo, "BegDay") & @CRLF & _
                                "--> BegHour     : " & DllStructGetData($tInfo, "BegHour") & @CRLF & _
                                "--> BegMinute   : " & DllStructGetData($tInfo, "BegMinute") & @CRLF & _
                                "--> BegSecond   : " & DllStructGetData($tInfo, "BegSecond") & @CRLF & _
                                "--> BegMSeconds : " & DllStructGetData($tInfo, "BegMSeconds") & @CRLF & _
                                "--> EndYear     : " & DllStructGetData($tInfo, "EndYear") & @CRLF & _
                                "--> EndMonth    : " & DllStructGetData($tInfo, "EndMonth") & @CRLF & _
                                "--> EndDOW      : " & DllStructGetData($tInfo, "EndDOW") & @CRLF & _
                                "--> EndDay      : " & DllStructGetData($tInfo, "EndDay") & @CRLF & _
                                "--> EndHour     : " & DllStructGetData($tInfo, "EndHour") & @CRLF & _
                                "--> EndMinute   : " & DllStructGetData($tInfo, "EndMinute") & @CRLF & _
                                "--> EndSecond   : " & DllStructGetData($tInfo, "EndSecond") & @CRLF & _
                                "--> EndMSeconds : " & DllStructGetData($tInfo, "EndMSeconds"))
                        ; No return value
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    
    Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber)
        ConsoleWrite( _
                "!===========================================================" & @CRLF & _
                "+======================================================" & @CRLF & _
                "-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text & @CRLF & _
                "+======================================================" & @CRLF)
    EndFunc   ;==>_DebugPrint
    Alles anzeigen

    Hier noch eine überarbeitete Version aus #Post 1, die alle Wochentage anzeigt. Nicht benötigte Spalten/Wochentage können mit _ArrayExtract/_ArrayColDelete entfernen werden.

    AutoIt: _GetKalenderwochen_Example.au3
    ;-- TIME_STAMP   2020-11-28 15:49:47   v 0.1
    
    #include <Debug.au3>
    #include '_GetKalenderwochen.au3'
    
    Local $aKW = _GetKalenderwochen(@YEAR)
    _DebugArrayDisplay($aKW, '$aKW ' & @YEAR, '', 0, Default, 'KW|Mo.|Di.|Mi.|Do.|Fr.|Sa.|So.')
    ;~ Row|KW|Mo.|Di.|Mi.|Do.|Fr.|Sa.|So.
    ;~ Row 0|01|30.12.2019|31.12.2019|01.01.2020|02.01.2020|03.01.2020|04.01.2020|05.01.2020
    ;~ Row 1|02|06.01.2020|07.01.2020|08.01.2020|09.01.2020|10.01.2020|11.01.2020|12.01.2020
    ;~ Row 2|03|13.01.2020|14.01.2020|15.01.2020|16.01.2020|17.01.2020|18.01.2020|19.01.2020
    ;~ ...
    ;~ Row 50|51|14.12.2020|15.12.2020|16.12.2020|17.12.2020|18.12.2020|19.12.2020|20.12.2020
    ;~ Row 51|52|21.12.2020|22.12.2020|23.12.2020|24.12.2020|25.12.2020|26.12.2020|27.12.2020
    ;~ Row 52|53|28.12.2020|29.12.2020|30.12.2020|31.12.2020|01.01.2021|02.01.2021|03.01.2021
    
    $aKW = _ArrayExtract($aKW, -1, -1, -1, 5)
    _DebugArrayDisplay($aKW, '$aKW ' & @YEAR, '', 0, Default, 'KW|Mo.|Di.|Mi.|Do.|Fr.')
    ;~ Row|KW|Mo.|Di.|Mi.|Do.|Fr.
    ;~ Row 0|01|30.12.2019|31.12.2019|01.01.2020|02.01.2020|03.01.2020
    ;~ Row 1|02|06.01.2020|07.01.2020|08.01.2020|09.01.2020|10.01.2020
    ;~ Row 2|03|13.01.2020|14.01.2020|15.01.2020|16.01.2020|17.01.2020
    ;~ ...
    ;~ Row 50|51|14.12.2020|15.12.2020|16.12.2020|17.12.2020|18.12.2020
    ;~ Row 51|52|21.12.2020|22.12.2020|23.12.2020|24.12.2020|25.12.2020
    ;~ Row 52|53|28.12.2020|29.12.2020|30.12.2020|31.12.2020|01.01.2021
    
    _ArrayColDelete($aKW, 2)
    _ArrayColDelete($aKW, 2)
    _ArrayColDelete($aKW, 2)
    _DebugArrayDisplay($aKW, '$aKW ' & @YEAR, '', 0, Default, 'KW|Mo.|Fr.')
    ;~ Row|KW|Mo.|Fr.
    ;~ Row 0|01|30.12.2019|03.01.2020
    ;~ Row 1|02|06.01.2020|10.01.2020
    ;~ Row 2|03|13.01.2020|17.01.2020
    ;~ ...
    ;~ Row 50|51|14.12.2020|18.12.2020
    ;~ Row 51|52|21.12.2020|25.12.2020
    ;~ Row 52|53|28.12.2020|01.01.2021
    Alles anzeigen

    Dateien

    _GetKalenderwochen_Example.au3 1,8 kB – 490 Downloads _GetKalenderwochen.au3 1,56 kB – 412 Downloads
  • Programm öffnen

    • Bitnugger
    • 28. November 2020 um 14:41
    Zitat von Professor Bernd

    Somit würde Micha_he 's Tip mit WinSetState($hWnd, "", @SW_RESTORE) passen.

    Sehe ich auch so... Moombas aufgezeigte Lösungen funktionieren zwar auch, verändern dabei jedoch die Z-Order, was hier aber gar nicht gefragt ist.

    Zitat von https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
    SW_RESTORE 9 Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
  • Stringmanipulation in einer Funktion

    • Bitnugger
    • 27. November 2020 um 06:01
    Zitat von Musashi

    Eine Alternative wäre StringRegExp

    oder StringRegExpReplace...

    AutoIt
    Global $sMatch = StringRegExpReplace('{"version":"0.170.14.7","oldVersion":"0.170.13.804"}', '.*:"(.+)",.*', '\1')
    ConsoleWrite($sMatch & @CRLF)

    (?m) mach doch nur Sinn, wenn der Text Zeilenumbrüche enthält, oder? 8o

    AutoIt
    Global $aMatch = StringRegExp('{"version":"0.170.14.7","oldVersion":"0.170.13.804"}', '.*:"(.+)",.*', 3)
    If Not @error Then MsgBox(0, "", $aMatch[0] & @CRLF)
  • _GetKalenderwoche.au3

    • Bitnugger
    • 23. November 2020 um 18:30

    Ich hatte nach einem Script gesucht, dass mir die Kalenderwochen für ein Jahr mit Datum anzeigt, aber nichts Brauchbares gefunden... ergo habe ich es selbst geschrieben und wollte es nun mit euch teilen.

    Die Ausgabe für das Jahr 2020 sieht dann z.B. etwa so aus:

    Row|KW|Mo.|So.

    Row 0|1|30.12.2019|05.01.2020

    Row 1|2|06.01.2020|12.01.2020

    Row 2|3|13.01.2020|19.01.2020

    ...

    Row 50|51|14.12.2020|20.12.2020

    Row 51|52|21.12.2020|27.12.2020

    Row 52|53|28.12.2020|03.01.2021

    AutoIt: _GetKalenderwoche_Example.au3
    ;-- TIME_STAMP   2020-11-23 18:12:47   v 0.1
    
    #include <Array.au3>
    #include <Debug.au3>
    #include "_GetKalenderwoche.au3"
    
    Local $aKW = _GetKalenderwoche(@YEAR)
    _DebugArrayDisplay($aKW, '$aKW ' & @YEAR, '', 0, Default, 'KW|Mo.|So.')

    Dateien

    _GetKalenderwoche.au3 1,86 kB – 449 Downloads _GetKalenderwoche_Example.au3 240 Byte – 494 Downloads
  • Datum in AutoIt speichern fuer SysDateTimePick32

    • Bitnugger
    • 21. November 2020 um 13:51
    Zitat von BugFix

    Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASS:SysDateTimePick322; INSTANCE:1]")

    Bei CLASS:SysDateTimePick322 ist eine 2 zu viel...

    Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASS:SysDateTimePick32; INSTANCE:1]")

    Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASSNN:SysDateTimePick321]")

    Zitat von polarole

    ; ich dachte die Controlid setzt sich aus Class+Instanz zusammen quasi SysDateTimePick32+instance2=SysDateTimePick322 scheint aber so nicht zu funktionieren?

    Zu controlID liest du hier: https://www.autoitscript.com/autoit3/docs/intro/controls.htm

    Zitat

    ID - The internal control ID. The Control ID is the internal numeric identifier that windows gives to each control. It is generally the best method of identifying controls. In addition to the AutoIt Window Info Tool, other applications such as screen readers for the blind and Microsoft tools/APIs may allow you to get this Control ID

  • Verhindern, dass Fenster Größe ändert bei Ziehen an Bildschirmrand

    • Bitnugger
    • 12. November 2020 um 16:22

    Schiebst du dann bitte noch eine korrigierte, bzw. finale Version hoch - danke!

  • Bildschirm Auflösung auf Knopfdruck ändern

    • Bitnugger
    • 12. November 2020 um 16:19

    Windows 10, 64 Bit, NVIDIA GeForce GTX 285

    Gestern hatte ich die von dir kompilierte Version gestartet. Ergebnis heute ist gleich.

    Heute habe ich die *.au3 mal selbst kompiliert, dann die Exe gestartet. Die Auflösung geht, doch dann reagiert das Programm nicht mehr, wobei ich nun aber aus dem Menü eine andere Auflösung auswählen kann, die jedoch nicht gesetzt wird. Es passiert nichts mehr... ich schau morgen mal, ob ich austüfteln kann, wo es bei mir klemmt.

    Beim Umschalten von 1920x1280 auf 1680x1050 wird rechts und links ein Stück von der Taskleiste abgeschnitten.

  • Bildschirm Auflösung auf Knopfdruck ändern

    • Bitnugger
    • 11. November 2020 um 22:19
    Zitat von Oscar

    ChangeDisplayResolution

    Ich habe dein Tool heute bei mir gestartet und die Auflösung geändert... das funktioniert, aber danach öffnet dein Tool nicht mehr das Kontextmenü, bzw. nur ganz kurz und dann ist es wieder weg.

    Mit anderen Programmen geht es jedoch wie zuvor... nur dein Tool macht dann kein Kontextmenü mehr auf... bzw. nur ganz kurz.

  • Geheimnis "scripting.dictionary" AutoIt 3.3.14.5

    • Bitnugger
    • 7. November 2020 um 15:07
    Zitat von bazii

    $hProcess = RunWait

    RunWait liefert kein Handle, sondern den Exitcode des gestarteten Programms. Zudem wird $hProcess/$hProcess_1 an keiner Stelle ausgewertet und ist somit völlig überflüssig.

    Zitat von bazii

    FileClose($sFile)

    FileClose wird nur dann benötigt, wenn zuvor ein File mit FileOpen geöffnet wurde, was hier aber nicht der Fall ist - ist somit auch völlig überflüssig.

    Zitat von bazii

    _FileWriteToLine($sFile, 4, "", True)
    _FileWriteToLine($sFile_1, 6, "", True)

    Hier kann ich nicht ganz folgen... wenn ich nicht irre, überschreibt du damit eine leere Zeile mit einer leeren Zeile!?

    Hier mal eine deutlich kürzere Version:

    AutoIt
    #include <File.au3>
    
    _MakeIndexTxt()
    
    Func _MakeIndexTxt()
        Local $sSpacer = '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++' & @CRLF
        Local $sFileSelectFolder = FileSelectFolder("Verzeichnis auswählen", "c:\"), $sFile
        For $i = 0 To 1 Step 1
            $sFile = $sFileSelectFolder & '_index_' & $i + 1 & '.txt'
            If RunWait(@ComSpec & ' /c ' & 'dir ' & ($i = 0 ? '/b ' : '') & '/c /l /n /on /r /s /4 > ' & $sFile & '"', $sFileSelectFolder, @SW_HIDE) Then Exit $i + 1
            _FileWriteToLine($sFile, 1, _
                StringFormat('%sDiese Dateiauflistung wurde von %s@%s am %02d.%02d.%04d um %02d:%02d Uhr produziert.\r\n%s', _
                $sSpacer, @UserName, @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, $sSpacer), True)
    ;~      _FileWriteToLine($sFile, $i = 0 ? 4 : 6, "", True) ; Überschreibt eine leere Zeile mit einer leeren Zeile!?
            ShellExecute($sFile, @SW_MAXIMIZE)
        Next
    EndFunc   ;==>_MakeIndexTxt
    Alles anzeigen
  • Verhindern, dass Fenster Größe ändert bei Ziehen an Bildschirmrand

    • Bitnugger
    • 6. November 2020 um 17:21

    Schau mal hier: https://www.windows-faq.de/2019/02/05/aut…bei-windows-10/

    Multitasking.jpg

  • EMail - Benachrichtigung auch ohne EMail - Software

    • Bitnugger
    • 6. November 2020 um 17:05
    Zitat von Masel_tov

    Kannst Du mir da helfen?

    Weil meine Zeit mom. sehr knapp ist, werde ich dir ausnahmsweise ein fertiges Script servieren... du musst nur noch den/die zu überwachenden Pfad/e (Zeile 12) und womöglich noch die RegEx-Pattern (Zeile 87/88) anpassen.

    AutoIt: ShellChangeNotify_Mini_Demo.au3
    ;-- TIME_STAMP   2020-11-06 16:54:18   v 0.1
    
    #include <APIShellExConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <Array.au3>
    #include <WinAPIShellEx.au3>
    #include <WinAPISysWin.au3>
    
    Opt('TrayAutoPause', 0)
    
    ; Das bzw. die zu überwachenden Verzeichnisse
    Global Const $g_aPaths = [@ScriptDir]
    
    For $i = 0 To UBound($g_aPaths) -1 Step 1
        If Not FileExists($g_aPaths[$i]) Then
            ConsoleWrite('! FileExists(' & StringFormat('%-128s = %i\r', $g_aPaths[$i] & ')', FileExists($g_aPaths[$i])))
            Exit $i
        EndIf
    Next
    
    ; Hiermit stellen wir sicher, das _WinAPI_ShellChangeNotifyDeregister ausgeführt wird, wenn das Script beendet wird.
    OnAutoItExitRegister('OnAutoItExit')
    
    Local $hWnd = GUICreate('') ; Wird benötigt, um die WindowMessage empfangen zu können.
    Local $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $g_aPaths, 1)
    If @error Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Window does not registered.')
        Exit
    EndIf
    
    While 1
        Sleep(1000)
    WEnd
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
    
        #Tidy_Off
            Local Static $aSHCNE = _
                [[$SHCNE_ALLEVENTS        , '$SHCNE_ALLEVENTS'        , 'All events have occurred.'], _
                [$SHCNE_ASSOCCHANGED    , '$SHCNE_ASSOCCHANGED'        , 'A file type association has changed.'], _
                [$SHCNE_ATTRIBUTES        , '$SHCNE_ATTRIBUTES'        , 'The attributes of an item or folder have changed.'], _
                [$SHCNE_CREATE            , '$SHCNE_CREATE'            , 'A nonfolder item has been created.'], _
                [$SHCNE_DELETE            , '$SHCNE_DELETE'            , 'A nonfolder item has been deleted.'], _
                [$SHCNE_DRIVEADD        , '$SHCNE_DRIVEADD'            , 'A drive has been added.'], _
                [$SHCNE_DRIVEADDGUI        , '$SHCNE_DRIVEADDGUI'        , 'Windows XP and later: Not used.'], _
                [$SHCNE_DRIVEREMOVED    , '$SHCNE_DRIVEREMOVED'        , 'A drive has been removed.'], _
                [$SHCNE_EXTENDED_EVENT    , '$SHCNE_EXTENDED_EVENT'    , 'Not currently used.'], _
                [$SHCNE_FREESPACE        , '$SHCNE_FREESPACE'        , 'The amount of free space on a drive has changed.'], _
                [$SHCNE_MEDIAINSERTED    , '$SHCNE_MEDIAINSERTED'    , 'Storage media has been inserted into a drive.'], _
                [$SHCNE_MEDIAREMOVED    , '$SHCNE_MEDIAREMOVED'        , 'Storage media has been removed from a drive.'], _
                [$SHCNE_MKDIR            , '$SHCNE_MKDIR'            , 'A folder has been created.'], _
                [$SHCNE_NETSHARE        , '$SHCNE_NETSHARE'            , 'A folder on the local computer is being shared via the network.'], _
                [$SHCNE_NETUNSHARE        , '$SHCNE_NETUNSHARE'        , 'A folder on the local computer is no longer being shared via the network.'], _
                [$SHCNE_RENAMEFOLDER    , '$SHCNE_RENAMEFOLDER'        , 'The name of a folder has changed.'], _
                [$SHCNE_RENAMEITEM        , '$SHCNE_RENAMEITEM'        , 'The name of a nonfolder item has changed.'], _
                [$SHCNE_RMDIR            , '$SHCNE_RMDIR'            , 'A folder has been removed.'], _
                [$SHCNE_SERVERDISCONNECT, '$SHCNE_SERVERDISCONNECT'    , 'The computer has disconnected from a server.'], _
                [$SHCNE_UPDATEDIR        , '$SHCNE_UPDATEDIR'        , 'The contents of an existing folder have changed, but the folder still exists and has not been renamed.'], _
                [$SHCNE_UPDATEIMAGE        , '$SHCNE_UPDATEIMAGE'        , 'An image in the system image list has changed.'], _
                [$SHCNE_UPDATEITEM        , '$SHCNE_UPDATEITEM'        , 'An existing item (a folder or a nonfolder) has changed, but the item still exists and has not been renamed.'], _
                [$SHCNE_DISKEVENTS        , '$SHCNE_DISKEVENTS'        , 'Specifies a combination of all of the disk event identifiers.'], _
                [$SHCNE_GLOBALEVENTS    , '$SHCNE_GLOBALEVENTS'        , 'Specifies a combination of all of the global event identifiers.'], _
                [$SHCNE_INTERRUPT        , '$SHCNE_INTERRUPT'        , 'The specified event occurred as a result of a system interrupt. As this value modifies other event values it cannot be used alone.']]
        #Tidy_On
        Local Static $bUPDATE = False
    
    ;~ Interessant für dich sind nur folgende Events:
    ;~ > Event: 0x00000002 $SHCNE_CREATE           | Path: "M:\AutoIt\Test.Datei" | A nonfolder item has been created.
    ;~ > Event: 0x00002000 $SHCNE_UPDATEITEM       | Path: "M:\AutoIt\Test.Datei" | An existing item (a folder or a nonfolder) has changed, but the item still exists and has not been renamed.
    
        Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
        Local $sSHCNE_NAME = $aSHCNE[_ArraySearch($aSHCNE, $lParam)][1]
        If $sPath Then
            ConsoleWrite(StringFormat('> Event: 0x%s %-23s | Path: "%s"\n', Hex($lParam), $sSHCNE_NAME, $sPath))
            ; Hier kannst du nun prüfen, ob eine *.Datei erstellt wurde.
            ; Nach $SHCNE_CREATE folgt immer ein $SHCNE_UPDATEITEM... um den Zeitstempel und andere Dinge für diese Datei zu aktualisieren.
            If $lParam = $SHCNE_CREATE And StringRight($sPath, 6) = '.Datei' Then $bUPDATE = True
            If $bUPDATE And ($lParam = $SHCNE_UPDATEITEM And StringRight($sPath, 6) = '.Datei') Then
                $bUPDATE = False
                ; Datei einlesen, um sie mit RegEx auszuwerten.
                Local $sFile = FileRead($sPath)
                If @extended Then ; Anzahl der gelesenen Zeichen.
                    ; Das RegEx-Pattern ist für Thunderbird-Nachrichten ausgelegt, die im *.txt-Format gespeichert wurden.
                    Local $sSender  = StringRegExpReplace($sFile, '(?s).*Von:\R(.+?)\RDatum.*', '\1')
                    Local $sSubject = StringRegExpReplace($sFile, '(?s).*Betreff:\R(.+?)\RVon.*', '\1')
                    ConsoleWrite('! $sSender  : ' & $sSender & @CRLF)
                    ConsoleWrite('! $sSubject : ' & $sSubject & @CRLF)
                    
                    ; Now do something with it...
                    
                EndIf
            EndIf
        Else
            ConsoleWrite(StringFormat('- Event: 0x%s %-23s | Path: "%s"\n', Hex($lParam), $sSHCNE_NAME, $sPath))
        EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    Func OnAutoItExit()
        If $g_iID Then
            _WinAPI_ShellChangeNotifyDeregister($g_iID)
        EndIf
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen
  • EMail - Benachrichtigung auch ohne EMail - Software

    • Bitnugger
    • 6. November 2020 um 06:28
    Zitat von Masel_tov

    Würde das gehen?

    Ja, würde es. Du kannst das Verzeichnis mit _WinAPI_ShellChangeNotifyRegister überwachen und so prüfen, ob eine neue *.Datei erstellt wurde. Aus der *.Datei kann man dann z.B. mit RegEx Subject und Sender extrahieren.

  • Im Internet jumpen

    • Bitnugger
    • 2. November 2020 um 21:44

    Schau mal hier... evtl. bringt dich das ja weiter: https://www.mediaevent.de/javascript/win…serfenster.html

  • Im Internet jumpen

    • Bitnugger
    • 1. November 2020 um 05:12

    Zu _IE* ( IE gibt es eh nicht mehr lange und dann funktionieren höchstwahrscheinlich auch alle AutoIt-Funktionen mit _IE* nicht mehr) kann ich dir nicht sagen, aber mit Firefox ginge das z.B. so:

    AutoIt
    ShellExecute('https://autoit.de/thread/87173-im-internet-jumpen/?postID=702158#post702158') ; diesen Post in Firefox öffnen
    Sleep(3000) ; Wert evtl. anpassen
    ; WinActivate('Im Internet jumpen - Hilfe & Unterstützung - AutoIt.de - Das deutschsprachige Forum. - Mozilla Firefox') ; wenn der Tab bereits existiert
    WinActivate('[CLASS:MozillaWindowClass]')
    Local $sSearch = 'Suchbegriff'
    Sleep(2000) ; Wert evtl. anpassen
    Send('/' & $sSearch) ; / aktiviert die Schnellsuchleiste in Firefox

    https://support.mozilla.org/de/kb/Suchen-innerhalb-einer-Seite

    Zitat

    Suchen mit der Schnellsuchleiste

    Die Schnellsuchleiste ist zur schnellen Suche vorgesehen und wird nach wenigen Augenblicken wieder ausgeblendet. Um sie zu öffnen, drücken Sie die Taste / (Schrägstrich) und geben Sie sofort den Suchausdruck ein.

    Oder du machst es mit der WebDriver UDF - damit kannst du dann auch auf bereits geöffnete Tabs zugreifen und auch den Namen des Tabs zur Navigation verwenden.

  • Dateinamen ab einem bestimmten Zeichen nach rechts entfernen funktioniert nicht immer => Umstieg zu Autoit

    • Bitnugger
    • 1. November 2020 um 03:11

    Hier noch eine etwas andere Version für dich...

    Wenn du das Script kompilierst und von der Exe eine Verknüpfung auf den Desktop legst, kannst du Verzeichnisse und/oder Dateien aus dem Explorer auf der Verknüpfung ablegen, um die Dateien umzubenennen. Mit Doppelklick auf die Verknüpfung wird nach einem Verzeichnis gefragt, in dem die Dateien umbenannt werden sollen.

    - Wird ein Verzeichnis (oder mehrere) auf der Verknüpfung abgelegt, werden die darin befindlichen Dateien umbenannt.

    - Wird eine Datei (oder mehrere) auf der Verknüpfung abgelegt, werden diese Dateien umbenannt.

    ...oder du startest es aus der CMD mit Parametern... wobei du die Namen in "" setzen musst, wenn sie Leerzeichen enthalten.

    RenameFiles.exe [Dirname|Filename]

    PS: FileMove habe ich auskommentiert...

    Professor Bernd

    PUSHD ist ähnlich wie CD... mit dem Unterschied, dass du mit POPD wieder zurück in das vorherige Verzeichnis wechseln kannst, wobei dann auch das Laufwerk gewechselt wird, was bei CD nicht der Fall ist.

    Code
    C:\Users\bitnugger>cd m:
    M:\
    
    C:\Users\bitnugger>pushd m:
    
    M:\>popd
    
    C:\Users\bitnugger>

    Masel_tov

    goto :eof macht am Ende eines Batches keinen Sinn... denn da bist du dann ja bereits.

    AutoIt
    ;-- TIME_STAMP   2020-11-01 02:57:22   v 0.1
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    Opt('MustDeclareVars', 1)
    
    #include <File.au3>
    
    ; Leere Testdatei erzeugen, da wir ja nur den Namen brauchen.
    ;~ FileWrite('Film mit Sean Connery (640 x 320 Auflösung irgendwas...usw).mp4', '')
    
    _Main()
    
    Func _Main()
        Local $aFiles[0], $sFolder, $sNewName
    
        If $CMDLINE[0] Then
    ;~         _ArrayDisplay($CMDLINE, '$CMDLINE')
            For $i = 1 To $CMDLINE[0] Step 1
                ReDim $aFiles[0]
    
                If FileExists($CMDLINE[$i]) Then
                    If StringInStr(FileGetAttrib($CMDLINE[$i]), 'D') Then ; Verzeichnis
                        $aFiles = _FileListToArray($CMDLINE[$i], '*', $FLTA_FILES, True)
                        _RenameFiles($aFiles)
                    Else ; Datei
                        ReDim $aFiles[2]
                        $aFiles[0] = 1
                        $aFiles[1] = $CMDLINE[$i]
                        _RenameFiles($aFiles)
                    EndIf
                EndIf
            Next
        Else
            $sFolder = FileSelectFolder('RenameFiles', '')
            If $sFolder Then
                $aFiles = _FileListToArray($sFolder)
                _RenameFiles($aFiles)
            EndIf
        EndIf
    EndFunc   ;==>_Main
    
    Func _RenameFiles($aFiles)
        Local $sNewName
    ;~     _ArrayDisplay($aFiles, '$aFiles')
        If UBound($aFiles) > 1 Then
            For $i = 1 To $aFiles[0] Step 1
                $sNewName = _GetNewName($aFiles[$i])
    ;~             FileMove($aFiles[$i], $sNewName) ; Datei umbenennen
            Next
        EndIf
    EndFunc   ;==>_RenameFiles
    
    Func _GetNewName($sOldName)
        Local $sNewName = StringRegExpReplace($sOldName, '(.+) \(.*\)(.+)', '\1\2')
        ConsoleWrite('> $sOldName = ' & $sOldName & @CRLF)
        ConsoleWrite('- $sNewName = ' & $sNewName & @CRLF)
        Return $sNewName
    EndFunc   ;==>_GetNewName
    Alles anzeigen
  • Float Validieren mit StringRegExp

    • Bitnugger
    • 30. Oktober 2020 um 22:07
    Zitat von Musashi

    Mit Local $sPattern = "(?i)^(\-?)([0]|[1..9]\d*)[\.,](\d{2})$" kann man auch diesen Fall prüfen.

    (?i) ? ...ich frage dich jetzt nicht, wofür das in dem Pattern gut sein soll... aber du solltest es tun... 8o

    Das Pattern ist soweit gut... nur denke ich, dass variable Eingaben mit nur einem Pattern zu prüfen, sehr schwer bis unmöglich ist.

    So wie es in dem Thread aus dem EN-Forum gezeigt wird, kann man es natürlich machen, aber das sind alles sehr schlechte Lösungen.

    Fast schon sträflich finde ich, wenn WM_COMMAND & Co. in einer UDF verwendet werden, da diese Nachrichten somit nicht mehr ohne weiteres für eigene Fälle genutzt werden können - besser geht es z.B. mit _WinAPI_SetWindowsHookEx... siehe Bsp. in der AutoIt-Hilfe... und dort dann mit If $wParam = $WM_COMMAND prüfen.

    Anstatt $EN_CHANGE würde ich $EN_UPDATE verwenden... denn so kann die Eingabe abfangen werden, bevor sie angezeigt wird.

    $EN_CHANGE wird gesendet, wenn der Benutzer eine Aktion ausgeführt hat, durch die möglicherweise Text in einem Bearbeitungssteuerelement geändert wurde. Im Gegensatz zum $EN_UPDATE-Benachrichtigungscode wird dieser Benachrichtigungscode gesendet, nachdem das System den Bildschirm aktualisiert hat. Das übergeordnete Fenster des Bearbeitungssteuerelements empfängt diesen Benachrichtigungscode über eine WM_COMMAND-Nachricht.

    $EN_UPDATE wird gesendet, wenn sich ein Bearbeitungssteuerelement neu zeichnet. Dieser Benachrichtigungscode wird gesendet, nachdem das Steuerelement den Text formatiert hat, aber bevor der Text angezeigt wird. Auf diese Weise kann die Größe des Bearbeitungssteuerungsfensters bei Bedarf geändert werden. Das übergeordnete Fenster des Bearbeitungssteuerelements empfängt diesen Benachrichtigungscode über eine WM_COMMAND-Nachricht.

    In einem meiner Scripte habe ich so eine selbst geschriebene Funktion für spezielle Inputs eingebaut... aber heute habe ich keine Energie mehr, um danach zu suchen...

  • Control relativ positionieren

    • Bitnugger
    • 29. Oktober 2020 um 20:48

    Dafür hatte ich mir auch mal eine Funktion geschrieben... und habe dabei festgestellt, dass ControlMove und GUICtrlSetPos unterschiedliche Auswirkungen haben.

    Bei ControlMove wird die Position der Controls wieder zurückgesetzt, wenn sich die Größe des Fensters verändert, bei GUICtrlSetPos bleibt sie erhalten.

    ControlMove verwende ich deshalb nur bei fremden Controls... wenn ein Handle übergeben wurde, und GUICtrlSetPos bei eigenen Controls... wenn eine Ctrl-ID übergeben wurde.

    Hier eine kleine Demo, die dies zeigt...

    AutoIt
    ;-- TIME_STAMP   2020-10-29 18:53:45   v 0.1
    
    #include <WinAPIDlg.au3>
    
    _Test1()
    
    Func _Test1()
        Local $hGUI = GUICreate('Test')
        Local $bt1 = GUICtrlCreateButton('Test Button 1', 0, 0, 150, 25)
        GUISetState()
        _ToolTip($hGUI, 'Position des Buttons nach Start...')
        Sleep(3000)
    
        Local $hParent = WinGetHandle('Test')
        Local $hCtrl = ControlGetHandle($hParent, 'Test Button 1', '')
        ControlMove($hCtrl, '', '', 50, 50)
        _ToolTip($hGUI, 'Position des Buttons nach ControlMove...')
        Sleep(3000)
    
        WinMove($hParent, '', Default, Default, 456, 429)
        _ToolTip($hGUI, 'Position des Buttons nach WinMove... Fenster schließen, um _Test2() zu starten.')
    
        Do
        Until GUIGetMsg() = -3
        GUIDelete($hGUI)
        _Test2()
    EndFunc
    
    Func _Test2()
        Local $hGUI = GUICreate('Test')
        Local $bt1 = GUICtrlCreateButton('Test Button 1', 0, 0, 150, 25)
        GUISetState()
        _ToolTip($hGUI, 'Position des Buttons nach Start...')
        Sleep(3000)
    
        Local $hParent = WinGetHandle('Test')
        Local $hCtrl = ControlGetHandle($hParent, 'Test Button 1', '')
        Local $iID = _WinAPI_GetDlgCtrlID($hCtrl)
        GUICtrlSetPos($iID, 50, 50)
        _ToolTip($hGUI, 'Position des Buttons nach GUICtrlSetPos...')
        Sleep(3000)
    
        WinMove($hParent, '', Default, Default, 456, 429)
        _ToolTip($hGUI, 'Position des Buttons nach WinMove... Position wird nicht zurückgesetzt! (Ende)')
    
        Do
        Until GUIGetMsg() = -3
    EndFunc
    
    Func _ToolTip($hWnd, $sTip)
        Local $aPos = WinGetPos($hWnd)
        ToolTip($sTip, $aPos[0], $aPos[1] - 30)
    EndFunc
    Alles anzeigen

    Und hier deine angepasste Funktion...

    AutoIt
    ;-- TIME_STAMP   2020-10-29 20:45:27
    
    ;~ #include <WinAPISysWin.au3> ; _WinAPI_GetParent
    
    Opt('MustDeclareVars', 1)
    
    
    GUICreate('Test')
    Local $bt1 = GUICtrlCreateButton('Test Button 1', 0, 0, 150, 25)
    _CtrlPosRelative(-1, -10, -10)   ; 10px Rand rechts und unten
    Local $bt2 = GUICtrlCreateButton('Test Button 2', 0, 0, 150, 25)
    _CtrlPosRelative(-1, 10, -10)    ; x ist fix, y relativ mit 10px Rand unten
    
    GUISetState()
    
    ; Größe der Gui ändern und Ctrl verschieben an relative Position
    Sleep(5000)
    WinMove('Test', '', 100, 50, 800, 600)
    _CtrlPosRelative($bt1, -10, -10)
    _CtrlPosRelative($bt2, 10, -10)
    
    
    Do
    Until GUIGetMsg() = -3
    
    
    Func _CtrlPosRelative($_iID, $_x, $_y, $_w = -1, $_h = -1)
        Local $hCtrl = IsHWnd($_iID) ? $_iID : GUICtrlGetHandle($_iID)
        Local $aSize = ControlGetPos($hCtrl, '', '')
        If $_w = -1 Or $_w = Default Then $_w = $aSize[2]
        If $_h = -1 Or $_h = Default Then $_h = $aSize[3]
        Local $aResult = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hCtrl)
        If @error Then Return SetError(@error, @extended, 0)
        Local $aClientSize = WinGetClientSize($aResult[0])
        If $_x < 0 Then $_x = $aClientSize[0] - $_w - Abs($_x)
        If $_y < 0 Then $_y = $aClientSize[1] - $_h - Abs($_y)
        Return IsHWnd($_iID) ? ControlMove($hCtrl, '', '', $_x, $_y, $_w, $_h) : GUICtrlSetPos($_iID, $_x, $_y, $_w, $_h)
    EndFunc   ;==>_CtrlPosRelative
    Alles anzeigen
  • einfaches Hilfefenster(GUICtrlEdit) - Einfügen von "formatiertem" Text

    • Bitnugger
    • 28. Oktober 2020 um 00:05
    Zitat von Musashi

    Das habe ich, dreist wie ich bin, einfach mal so aus der Hilfe übernommen

    Also ehrlich, wie kannst du nur... :P

    Schau mal hier...

    https://www.autoitscript.com/autoit3/docs/l…dit_Destroy.htm

    AutoIt
       ...
            Select
                Case $iMsg = $GUI_EVENT_CLOSE
                    GUIDelete() ; needed unless script crashes if DoIt as not been pushed
                    Exit
                Case $iMsg = $idBtnDoIt
                    _GUICtrlRichEdit_Destroy($hRichEdit)
            EndSelect
    ...

    Und in der EN-Hilfe zu v3.3.14.5 sieht es bei _GUICtrlRichEdit_Create bei mir so aus...

    AutoIt
    ...
            Select
                Case $iMsg = $GUI_EVENT_CLOSE
                    _GUICtrlRichEdit_Destroy($hRichEdit) ; needed unless script crashes
                    ; GUIDelete()   ; is OK too
                    Exit
            EndSelect
    
    ...
  • einfaches Hilfefenster(GUICtrlEdit) - Einfügen von "formatiertem" Text

    • Bitnugger
    • 27. Oktober 2020 um 19:45
    Zitat von Musashi

    _GUICtrlRichEdit_Destroy($hRichEdit) ; wird benötigt, da sonst das Skript abstürzt

    Hm... also bei mir stürzt nichts ab, wenn ich diese Zeile auskommentiere... :/

    -> Exit code: 0

    AutoIt: 3.3.14.5, OS: WIN_10/X64

  • einfaches Hilfefenster(GUICtrlEdit) - Einfügen von "formatiertem" Text

    • Bitnugger
    • 22. Oktober 2020 um 16:52
    Zitat von BugFix

    Oder verwende Html

    Da der Internet Explorer in absehbarer Zukunft komplett eingestampft wird, werden die _IE-Funktionen dann sicher auch nicht mehr funktionieren...

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™