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

Beiträge von BugFix

  • Systemordner - Inhalte

    • BugFix
    • 12. Dezember 2009 um 21:59

    Mit der Funktion werden zu einzelnen/allen Systemordnern der Pfad und die Inhalte ausgegeben.

    _ListSystemFolder( )
    [autoit]

    #cs
    -1 alles ausgeben
    0 ADMINISTRATIVE_TOOLS = 0x2f
    1 ALL_USERS_APPLICATION_DATA = 0x23
    2 ALL_USERS_DESKTOP = 0x19
    3 ALL_USERS_PROGRAMS = 0x17
    4 ALL_USERS_START_MENU = 0x16
    5 ALL_USERS_STARTUP = 0x18
    6 APPLICATION_DATA = 0x1a
    7 COMMON_FILES = 0x2b
    8 CONTROL_PANEL = 0x3
    9 COOKIES = 0x21
    10 DESKTOP = 0x10
    11 FONTS = 0x14
    12 FAVORITES = 0x6
    13 LOCAL_APPLICATION_DATA = 0x1c
    14 MY_COMPUTER = 0x11
    15 MY_DOCUMENTS = 0x5
    16 MY_MUSIC = 0xd
    17 MY_NETWORK_PLACES = 0x12
    18 MY_PICTURES = 0x27
    19 MY_RECENT_DOCUMENTS = 0x8
    20 MY_VIDEOS = 0xe
    21 NETHOOD = 0x13
    22 NETWORK_CONNECTIONS = 0x31
    23 PRINTERS_AND_FAXES = 0x4
    24 PRINTHOOD = 0x1b
    25 PROGRAM_FILES = 0x26
    26 PROGRAMS = 0x2
    27 RECYCLE_BIN = 0xa
    28 SENDTO = 0x9
    29 START_MENU = 0xb
    30 STARTUP = 0x7
    31 SYSTEM32 = 0x25
    32 TEMPLATES = 0x15
    33 USER_PROFILE = 0x28
    34 WINDOWS = 0x24
    #ce

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

    $ret = _ListSystemFolder() ; Abfrage aller Systemordner
    For $i = 0 To UBound($ret) -1
    $aInfo = StringSplit($ret[$i], @LF, 2)
    For $j = 0 To UBound($aInfo) -1
    ConsoleWrite($aInfo[$j] & @CRLF)
    Next
    Next

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

    ;===============================================================================
    ; Function Name: _ListSystemFolder($iSelection=-1)
    ; Description:: Gibt den Pfad eines/aller Systemordner(s) und dessen/deren Inhalt zurück
    ; Parameter(s): $iSelection - Index für den Systemordner (Liste oben), Standard (-1) für alle
    ; Return Value(s): Array mit einem Eintrag je Ordner, einzelne Elemente werden durch @LF getrennt
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _ListSystemFolder($iSelection=-1)
    Local $aConst[35] = [0x2f,0x23,0x19,0x17,0x16,0x18,0x1a,0x2b,0x3,0x21,0x10,0x14,0x6,0x1c,0x11,0x5,0xd, _
    0x12,0x27,0x8,0xe,0x13,0x31,0x4,0x1b,0x26,0x2,0xa,0x9,0xb,0x7,0x25,0x15,0x28,0x24]
    Local $objShell = ObjCreate("Shell.Application"), $objFolder, $objFolderItem, $colItems, $aSelect[1], $aOut[1], $tmp
    If $iSelection < 0 Then
    $aSelect = $aConst
    ReDim $aOut[35]
    Else
    $aSelect[0] = $aConst[$iSelection]
    EndIf
    For $i = 0 To UBound($aSelect) -1
    If $iSelection = -1 Then
    $tmp = $i & ' - '
    Else
    $tmp = ''
    EndIf
    $objFolder = $objShell.Namespace($aSelect[$i])
    $objFolderItem = $objFolder.Self
    $tmp &= $objFolderItem.Path & @LF
    $colItems = $objFolder.Items
    For $objItem In $colItems
    $tmp &= $objItem.Name & @LF
    Next
    $aOut[$i] = $tmp
    Next
    Return $aOut
    EndFunc ;==>_ListSystemFolder

    [/autoit]

    Dateien

    _ListSystemFolder.au3 2,58 kB – 400 Downloads
  • Ordner umbenennen

    • BugFix
    • 12. Dezember 2009 um 11:35

    Ich hab mal eine Funktion zum Umbenennen geschrieben.
    Der Unterschied zu DirMove: Als Zielname braucht nur der neue Ordnername angegeben werden, da der Pfad ja identisch ist. Pfadangabe stört aber nicht, da dieser dann abgeschnitten wird.

    Spoiler anzeigen
    [autoit]

    ; Aufruf:
    _DirRename('C:\test', 'C:\Neu')
    ; oder auch
    _DirRename('C:\test', 'Neu')

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

    ;===============================================================================
    ; Function Name: _DirRename($sSourcePath, $sNewFolderName, $sComputer='.')
    ; Description:: Ordner auf lokalem oder Remote-PC umbenennen
    ; Parameter(s): $sSourcePath der volle Pfad des umzubenennenden Ordners
    ; $sNewFolderName der neue Ordnername (Name oder Pfad möglich)
    ; wenn Pfad mit angegeben, wird dieser autom. entfernt
    ; [optional] $sComputer Computername, Standard: der lokale PC
    ; Return Value(s): Erfolg 1
    ; Fehler 0 @error 1 Ordner existiert nicht
    ; 2 Zielordner existiert bereits
    ; 3 Umbenennen fehlgeschlagen
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _DirRename($sSourcePath, $sNewFolderName, $sComputer='.')
    If Not FileExists($sSourcePath) Then Return SetError(1,0,0)
    $sSourcePath = StringRegExpReplace($sSourcePath, '\\+\z', '')
    Local $sParent = StringLeft($sSourcePath, StringInStr($sSourcePath, '\', 1, -1))
    $sSourcePath = StringRegExpReplace($sSourcePath, '\\', '\\\\')
    $sNewFolderName = StringRegExpReplace($sNewFolderName, '\\+\z', '')
    Local $ret = StringRegExp($sNewFolderName, '(?:\\)(\w+\z)|\w+', 3)
    $sNewFolderName = $ret[UBound($ret)-1]
    Local $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\cimv2")
    Local $colFolders = $objWMIService.ExecQuery ("Select * from Win32_Directory where name = '" & $sSourcePath & "'")
    Local $err
    For $objFolder In $colFolders
    $err = $objFolder.Rename($sParent & $sNewFolderName)
    If $err = 0 Then
    Return 1
    ElseIf $err = 10 Then
    Return SetError(2,0,0)
    Else
    Return SetError(3,0,0)
    EndIf
    Next
    EndFunc ;==>_DirRename

    [/autoit]
  • Logitech G19 + AutoIt?

    • BugFix
    • 11. Dezember 2009 um 20:06

    GTASpider hatte das mal für die G15 gemacht, vielleicht nützt dir das was: Zugriff auf LCD der G15 mit der LgLCD SDK

  • Neu geöffnete Prozesse erkennen

    • BugFix
    • 11. Dezember 2009 um 19:46

    Schau mal hier: Prozeßvergleich

  • Umwandlung

    • BugFix
    • 10. Dezember 2009 um 10:50

    Du schreibst nichts über die Parameter bei der Umwandlung.
    Wenn es qualitativ hochwertig werden soll ist VBR zu empfehlen, CBR geht zwar schneller, führt aber je nach Bildsequenz zu Verlusten (oder du schraubst die Bitrate so hoch, dass alles in maximaler Dichte aufgezeichnet wird - wird dann aber riesig groß ;)).

  • Vierter Geburtstag

    • BugFix
    • 9. Dezember 2009 um 20:14

    Natürlich möchte ich auch dem Forum zum Vierten gratulieren. :thumbup:
    Meine ersten AutoIt-Schritte machte ich im Oktober 2005 und hatte mich damals auch im englischen Forum angemeldet. Dann sind mir peethebees Versuche aufgefallen ein deutsches Unterforum einzurichten, was dann ja (zum Glück für uns :D) nichts wurde. Irgendwie bin ich dann mit pee in Kontakt gekommen und habe vom gestarteten deutschen Forum erfahren. Und schwupps - nun bin ich seit Feb. '06 dabei.
    Als ich hier anfing, lagen meine Programmierkenntnisse im Bereich dBase, TurboPascal, Cobol und etwas VB. Und ich war angenehm überrascht, mit wie wenig Aufwand man Probleme in AutoIt lösen konnte. Es war defacto Liebe mit dem ersten Skript! :D
    Und auch, wenn ihr es euch vielleicht nicht vorstellen könnt: Damals kannte ich Arrays nur dem Namen nach, ein Buch mit 7 Siegeln. :rofl:
    Nunja, mit Hilfe des Forums konnte ich da einiges an Wissen erweitern :rolleyes:
    Auch ich war von Anbeginn begeistert vom 'Geist des Forums', wenn ich das mal so nennen darf. 8o Höfliches Miteinander und unermüdlicher Wille zu Helfen sind die absoluten Stärken dieses Forums, das wirklich seinesgleichen sucht.
    Zum Einen sind hier unsere unermüdlichen Admins GunFood und peethebee ausdrücklich zu loben, ohne die dieses Forum gar nicht existieren könnte, zum Anderen ist die Mitarbeit aller Mods, Poweruser und aller weiteren aktiven Forumsmitglieder ein Garant für qualitativ hochwertige Arbeit.

    Ich freue mich Mitglied dieses Forums zu sein und meinen Beitrag zum Gelingen beitragen zu können.
    Auf viele weitere erfolgreiche Jahre. :thumbup:

  • Ist Datum ein Feiertag ?

    • BugFix
    • 9. Dezember 2009 um 16:36

    Hi Oscar,
    habe deine Anregungen übernommen - aber ohne meine erste Variante wegzulassen. :D
    Beide Eingabemethoden haben Vor- und Nachteile, somit wird die jetzt vorhandene Wahlmöglichkeit allen Wünschen gerecht. 8)

    Änderungen 1. Post

  • autostart verwalten

    • BugFix
    • 9. Dezember 2009 um 13:23

    Was er meint:
    Im Schlüssel ...Run steht nicht die Bezeichnung des Programms antivir desktop sondern nur: avgnt.
    Da muß man halt ein bissel klappern gehen und auf die Querverweise in den Schlüsseln zur Ebene Software hangeln. Dort läßt sich i.A. der volle Titel auslesen.

  • Ist Datum ein Feiertag ?

    • BugFix
    • 9. Dezember 2009 um 13:03

    Als Nebenprodukt zu _GetWokDays() entstand _IsHoliday($iYear, $iMon, $iDay).
    Standardmäßig wird auf bundeseinheitliche Feiertage geprüft.
    Rückgabe:
    ist Feiertag - Name des Feiertages
    kein Feiertag - Leerstring
    Datum nicht valid - 0 und Error

    In der Funktion sind auch alle weiteren Tage aus der Feiertags-UDF verfügbar und können bei Bedarf in die Überprüfung einbezogen werden. Ebenso können eigene Daten hinzugefügt werden.

    Edit:
    Änderung: Bei der Eingabe kann jetzt auch das Datum in der Form "JJJJ/MM/TT" übergeben werden im Parameter $iYear, die anderen Parameter werden dann nicht besetzt.

    Edit2:
    Ich habe den Code noch etwas optimiert und die Fehlerabfrage verändert (Falscheingabe soll auch zu Fehler führen - sonst merkt man's ja nicht).

    _IsHoliday( )
    [autoit]

    #include-once
    #include <Date.au3>
    ;===============================================================================
    ; Function Name: _IsHoliday($iYear, $iMon=-1, $iDay=-1)
    ; Description:: Prüft ob übergebenes Datum ein (bundeseinheitlicher) Feiertag ist
    ; Parameter(s): $iYear das Jahr des Datums (ab 1900) ODER
    ; das gesamte Datum als String "JJJJ/MM/TT"
    ; $iMon der Monat des Datums (wenn $iYear kein GesamtDatumString)
    ; $iDay der Tag des Datums (wenn $iYear kein GesamtDatumString)
    ; Requirement(s): #include <Date.au3>
    ; Return Value(s): Erfolg
    ; ist Feiertag - der Name des Feiertags
    ; kein Feiertag - ein Leerstring
    ; Fehler
    ; 0 @error=1 - Datum nicht existent
    ; Note: der Funktion können regionale und eigene Feiertage zugefügt werden
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IsHoliday($iYear, $iMon=-1, $iDay=-1)
    Local $aDate = StringRegExp($iYear, '(\d{4})/(\d{1,2})/(\d{1,2})', 3)
    If Not @error Then
    $iYear = $aDate[0]
    $iMon = $aDate[1]
    $iDay = $aDate[2]
    EndIf
    If $iYear < 1900 Or $iMon < 1 Or $iMon > 12 Or $iDay < 1 Or $iDay > 31 Then Return SetError(1,0,0)
    $iMon = StringRight('0' & $iMon, 2)
    $iDay = StringRight('0' & $iDay, 2)
    If Not _DateIsValid($iYear & '/' & $iMon & '/' & $iDay) Then Return SetError(1,0,0)
    Local $oHoliday = ObjCreate('Scripting.Dictionary')
    Local $HDays[32][2], $a, $b, $c, $d, $e, $H1, $H2, $N, $M
    Local $Easter, $EasterDate, $EasterDay, $EasterMonth, $PfSoDat
    ; fixe Feiertage bundesweit
    $oHoliday.Add($iYear & "/01/01", "Neujahr")
    $oHoliday.Add($iYear & "/05/01", "Maifeiertag")
    $oHoliday.Add($iYear & "/10/03", "Tag der Deutschen Einheit")
    $oHoliday.Add($iYear & "/12/25", "1. Weihnachtsfeiertag")
    $oHoliday.Add($iYear & "/12/26", "2. Weihnachtsfeiertag")
    ; variable Feiertage bundesweit
    $a = Mod($iYear, 19)
    $b = Mod($iYear, 4)
    $c = Mod($iYear, 7)
    $H1 = Int($iYear / 100)
    $H2 = Int($iYear / 400)
    $N = 4 + $H1 - $H2
    $M = 15 + $H1 - $H2 - Floor (Int((8 * $H1 + 13) / 25))
    $d = Mod((19 * $a + $M), 30)
    $e = Mod((2 * $b + 4 * $c + 6 * $d + $N), 7)
    If $d + $e = 35 Then
    $Easter = 50
    Else
    If $d = 28 And $e = 6 And $a > 10 Then
    $Easter = 49
    Else
    $Easter = 22 + $d + $e
    EndIf
    EndIf
    If $Easter < 32 Then
    $EasterDay = $Easter
    $EasterMonth = "03"
    Else
    $EasterDay = $Easter - 31
    $EasterMonth = "04"
    EndIf
    If $EasterDay < 10 Then
    $EasterDay = "0" & $EasterDay
    EndIf
    $EasterDate = $iYear & "/" & $EasterMonth & "/" & $EasterDay
    $oHoliday.Add(_DateAdd( 'd', -2, $EasterDate) , "Karfreitag")
    $oHoliday.Add($EasterDate , "Ostersonntag")
    $oHoliday.Add(_DateAdd( 'd', 1, $EasterDate) , "Ostermontag")
    $oHoliday.Add(_DateAdd( 'd', 39, $EasterDate) , "Christi Himmelfahrt")
    $oHoliday.Add(_DateAdd( 'd', 49, $EasterDate) , "Pfingstsonntag")
    $PfSoDat = _DateAdd( 'd', 50, $EasterDate)
    $oHoliday.Add($PfSoDat, "Pfingstmontag")
    #region - fixe und variable Feiertage regional <== Bei Bedarf aktivieren
    #cs
    Local $MutterDat, $4AdvDat
    ; Muttertag = 2. Sonntag im Mai ABER wenn Pfingsten = 2.Sonntag im Mai dann ist Muttertag am 1. Sonntag
    ; Der 2. Sonntag kann nur zw. dem 8. u. 14.5. liegen
    For $maitag = 8 To 14
    If _DateToDayOfWeek($iYear, 5, $maitag) = 1 Then
    If $maitag < 10 Then
    $maitag = "0" & $maitag
    EndIf
    $MutterDat = $iYear & "/05/" & $maitag
    If $MutterDat = $PfSoDat Then
    $MutterDat = _DateAdd( 'd', -7, $iYear & "/05/" & $maitag)
    EndIf
    ExitLoop
    EndIf
    Next
    $oHoliday.Add($MutterDat, "Muttertag")
    ; Erntedankfest 1. Sonntag im Oktober (zw. 1. u. 7.10.)
    For $oktobertag = 1 To 7
    If _DateToDayOfWeek($iYear, 10, $oktobertag) = 1 Then
    $oktobertag = "0" & $oktobertag
    $oHoliday.Add($iYear & "/10/" & $oktobertag, "Erntedankfest")
    ExitLoop
    EndIf
    Next
    ; 4.Advent = Sonntag vor 25.12. (zw. 18. u. 24.12.)
    For $deztag = 18 To 24
    If _DateToDayOfWeek($iYear, 12, $deztag) = 1 Then
    $4AdvDat = $iYear & "/12/" & $deztag
    $oHoliday.Add(_DateAdd( 'd', -7, $4AdvDat), "3. Advent")
    $oHoliday.Add(_DateAdd( 'd', -14, $4AdvDat), "2. Advent")
    $oHoliday.Add(_DateAdd( 'd', -21, $4AdvDat), "1. Advent")
    $oHoliday.Add(_DateAdd( 'd', -28, $4AdvDat), "Totensonntag")
    $oHoliday.Add(_DateAdd( 'd', -32, $4AdvDat), "Buß- und Bettag")
    ExitLoop
    EndIf
    Next
    $oHoliday.Add(_DateAdd( 'd', -52, $EasterDate), "Weiberfastnacht")
    $oHoliday.Add(_DateAdd( 'd', -48, $EasterDate), "Rosenmontag")
    $oHoliday.Add(_DateAdd( 'd', -47, $EasterDate), "Fastnacht")
    $oHoliday.Add(_DateAdd( 'd', -46, $EasterDate), "Aschermittwoch")
    $oHoliday.Add(_DateAdd( 'd', -3, $EasterDate), "Gründonnerstag")
    $oHoliday.Add(_DateAdd( 'd', -1, $EasterDate), "Ostersamstag")
    $oHoliday.Add(_DateAdd( 'd', 60, $EasterDate), "Fronleichnam")
    $oHoliday.Add($iYear & "/01/06", "Heilige Drei Könige")
    $oHoliday.Add($iYear & "/02/14", "Valentinstag")
    $oHoliday.Add($iYear & "/10/31", "Reformationstag")
    $oHoliday.Add($iYear & "/11/01", "Allerheiligen")
    $oHoliday.Add($iYear & "/12/24", "Heiligabend")
    $oHoliday.Add($iYear & "/12/31", "Silvester")
    $oHoliday.Add($4AdvDat, "4. Advent")
    ; ######### Hier können weitere eigene Feiertage eingetragen werden #############
    ; $oHoliday.Add('JJJJ/MM/TT', 'Name des Feiertags') <== MUSTER

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

    ; ###############################################################################
    #ce
    #endregion
    If $oHoliday.Exists($iYear & '/' & $iMon & '/' & $iDay) Then
    Return $oHoliday.Item($iYear & '/' & $iMon & '/' & $iDay)
    Else
    Return ''
    EndIf
    EndFunc ;==>_IsHoliday

    [/autoit]

    Dateien

    _IsHoliday.au3 5,82 kB – 284 Downloads
  • Werktage / Arbeitstage eines Monats ermitteln

    • BugFix
    • 9. Dezember 2009 um 11:49

    Änderung s. 1.Post: Bundeseinheitliche Feiertage können berücksichtigt werden.

  • Werktage / Arbeitstage eines Monats ermitteln

    • BugFix
    • 9. Dezember 2009 um 11:00

    Ja, dazu gibt es eine UDF.
    Aber die Kombination traue ich den Usern schon zu ;).
    Weiterhin sind für viele Berufsgruppen (wie mich :() Feiertage nicht maßgebend, sodass eine Selektion doch besser anwendungsbezogen durchgeführt werden sollte.

  • ersten und letzten werktag eines monats ermittel

    • BugFix
    • 9. Dezember 2009 um 10:14

    Deine Frage hat mich zu folgender Funktion angeregt: Werktage / Arbeitstage eines Monats ermitteln

  • Werktage / Arbeitstage eines Monats ermitteln

    • BugFix
    • 9. Dezember 2009 um 10:12

    Hi,
    angeregt durch eine Fragestellung im H&U-Forum habe ich mal die folgende Funktion erstellt:
    _GetWorkDays($iMon=-1, $iYear=-1, $iRetType=6, $bHoliday=True)

    Für den übergebenen Monat des angegebenen Jahres (-1 jeweils aktueller(s) Monat/Jahr) wird in Abhängigkeit des RetTypes (5=Mo-Fr / 6=Mo-Sa / 7=Mo-So) folgendes ermittelt und in einem 2D-Array zurückgegeben:

    [0][0]= Anzahl Werktage im Monat
    [0][1]= "WeekNr erster Werktag / WeekNr letzter Werktag"

    [1][0]= Datum (Tag) des ersten Werktags
    [1][1]= Wochentag des ersten Werktags (0=Mo bis 6=So)
    [2..UBound-1][0]=weitere Werktage Datum (Tag)
    [2..UBound-1][0]=weitere Werktage Wochentag (0=Mo bis 6=So)

    Edit:
    Habe es nun doch erweitert, sodass die bundeseinheitlichen Feiertage berücksichtigt werden. Der Parameter kann bei Bedarf auf FALSE gesetzt werden.
    Die dazu erstellte Funktion: _IsHoliday($iMon, $iYear, $iDay) läßt sich natürlich auch gut für andere Anwendungen nutzen. Falls Feiertag, wird dessen Name zurückgegeben, anderenfalls ein Leerstring.

    _GetWorkDays( )
    [autoit]

    #include-once
    #include <Date.au3>
    ;===============================================================================
    ; Function Name: _GetWorkDays([$iMon=-1 [, $iYear=-1 [, $iRetType=6 [, $bHoliday=True]]]])
    ; Description:: Ermittelt alle Werktage eines Monats
    ; Parameter(s): $iMon Monat (Standard: -1, aktueller Monat)
    ; $iYear Jahr (Standard: -1, aktuelles Jahr), kleinster Wert: 1900
    ; $iRetType (5,6,7) Anzahl Werktage ab Mo (Standard: 6)
    ; $bHoliday True (Standard) berücksichtigt bundeseinheitliche Feiertage
    ; Requirement(s): #include <Date.au3>
    ; Return Value(s): 2D-Array
    ; [0][0]= Anzahl Werktage im Monat, [0][1]= "WeekNr erster Werktag / WeekNr letzter Werktag"
    ; [1][0]= Datum (Tag) des ersten Werktags,
    ; [1][1]= Wochentag des ersten Werktags (0=Mo bis 6=So)
    ; [n..UBound-1][0/1]=weitere Werktage Datum/Wochentag
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GetWorkDays($iMon=-1, $iYear=-1, $iRetType=6, $bHoliday=True)
    If $iMon < 1 Or $iMon > 12 Then $iMon = @MON
    If $iYear < 1900 Then $iYear = @YEAR
    If $iRetType < 5 Or $iRetType > 7 Then $iRetType = 6
    Local $iDaysInMonth = _DateDaysInMonth($iYear, $iMon)
    Local $iWeekday, $aOut[1][2] = [[0,'']], $sWNr = ''
    Local $sFreeDay = 'N' ; 7 Werktage, ./. frei
    If $iRetType = 5 Then ; 5 Wertage, Sa/So frei
    $sFreeDay = '5 6'
    ElseIf $iRetType = 6 Then ; 6 Werktage, So frei
    $sFreeDay = '6'
    EndIf
    For $i = 1 To $iDaysInMonth
    $iWeekday = _DateToDayOfWeekISO($iYear, $iMon, $i)
    If StringInStr($sFreeDay, $iWeekday) Then ContinueLoop
    If $bHoliday And _IsHoliday($iYear, $iMon, $i) <> '' Then ContinueLoop
    $aOut[0][0] += 1
    If $aOut[0][0] = 1 Then $sWNr &= _WeekNumberISO($iYear, $iMon, $i)
    ReDim $aOut[UBound($aOut)+1][2]
    $aOut[UBound($aOut)-1][0] = $i
    $aOut[UBound($aOut)-1][1] = $iWeekday
    Next
    $aOut[0][1] = $sWNr & '/' & _WeekNumberISO($iYear, $iMon, $aOut[UBound($aOut)-1][0])
    Return $aOut
    EndFunc ;==>_GetWorkDays

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

    Func _IsHoliday($iYear, $iMon, $iDay)
    Local $oHoliday = ObjCreate('Scripting.Dictionary')
    Local $HDays[32][2], $a, $b, $c, $d, $e, $H1, $H2, $N, $M
    Local $Easter, $EasterDate, $EasterDay, $EasterMonth, $RestJahr, $Tempyear
    ; fixe Feiertage bundesweit
    $oHoliday.Add($iYear & "/01/01", "Neujahr")
    $oHoliday.Add($iYear & "/05/01", "Maifeiertag")
    $oHoliday.Add($iYear & "/10/03", "Tag der Deutschen Einheit")
    $oHoliday.Add($iYear & "/12/25", "1. Weihnachtsfeiertag")
    $oHoliday.Add($iYear & "/12/26", "2. Weihnachtsfeiertag")
    ; variable Feiertage bundesweit
    $a = Mod($iYear, 19)
    $b = Mod($iYear, 4)
    $c = Mod($iYear, 7)
    $H1 = Int($iYear / 100)
    $H2 = Int($iYear / 400)
    $N = 4 + $H1 - $H2
    $M = 15 + $H1 - $H2 - Floor (Int((8 * $H1 + 13) / 25))
    $d = Mod((19 * $a + $M), 30)
    $e = Mod((2 * $b + 4 * $c + 6 * $d + $N), 7)
    If $d + $e = 35 Then
    $Easter = 50
    Else
    If $d = 28 And $e = 6 And $a > 10 Then
    $Easter = 49
    Else
    $Easter = 22 + $d + $e
    EndIf
    EndIf
    If $Easter < 32 Then
    $EasterDay = $Easter
    $EasterMonth = "03"
    Else
    $EasterDay = $Easter - 31
    $EasterMonth = "04"
    EndIf
    If $EasterDay < 10 Then
    $EasterDay = "0" & $EasterDay
    EndIf
    If $iYear < 1900 Then ; Datumsoperationen nur mgl. wenn > 1900 , Jahr wird konvertiert
    $RestJahr = Mod($iYear, 100)
    If _DateIsLeapYear($iYear) Then
    If $RestJahr < 10 Then
    $RestJahr = "0" & $RestJahr
    EndIf
    $Tempyear = 20 & $RestJahr
    Else
    If $RestJahr < 10 Then
    $RestJahr = "0" & $RestJahr
    EndIf
    $Tempyear = 19 & $RestJahr
    EndIf
    $EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
    Else
    $EasterDate = $iYear & "/" & $EasterMonth & "/" & $EasterDay
    EndIf
    $oHoliday.Add(_DateAdd( 'd', -2, $EasterDate) , "Karfreitag")
    $oHoliday.Add($EasterDate , "Ostersonntag")
    $oHoliday.Add(_DateAdd( 'd', 1, $EasterDate) , "Ostermontag")
    $oHoliday.Add(_DateAdd( 'd', 39, $EasterDate) , "Christi Himmelfahrt")
    $oHoliday.Add(_DateAdd( 'd', 49, $EasterDate) , "Pfingstsonntag")
    $oHoliday.Add(_DateAdd( 'd', 50, $EasterDate) , "Pfingstmontag")
    If $oHoliday.Exists($iYear & '/' & $iMon & '/' & $iDay) Then
    Return $oHoliday.Item($iYear & '/' & $iMon & '/' & $iDay)
    Else
    Return ''
    EndIf
    EndFunc ;==>_IsHoliday

    [/autoit]

    Dateien

    _GetWorkDays.au3 4,47 kB – 657 Downloads
  • Button drücken lassen ?!

    • BugFix
    • 8. Dezember 2009 um 18:22

    Ein automatisches Voting als Bot anzukündigen ist arg übertrieben.
    Unabhängig davon zählt dieses aber zu sicherlich nicht zulässigen Abläufen - oder liege ich da falsch. Meines Erachtens ist ein Voting eine personalisierte Angelegenheit, deren Sinn durch Automatisierung verlorengeht. Insofern sehe ich da einen Widerspruch zu unseren Forenregeln.

    Ich schließe den Thread aber noch nicht, da ich dir Möglichkeit zur Erklärung einräumen möchte. (Vielleicht liege ich ja völlig falsch :wacko: )

  • Koordinatensuche "zusammfassbar"?

    • BugFix
    • 7. Dezember 2009 um 14:07

    Hier mal ein Schema, um die erforderlichen Koordinaten in einer Schleife zu ermitteln.
    Weiterverarbeitung kannst du dann einbauen.
    Ist aus dem Kopf geschrieben - ungetestet. Aber ich vertraue mir. :D

    Spoiler anzeigen
    [autoit]

    ; Ausgangsposition
    Local $x, $y
    Local $n = 1 ; Umkreisvariable, 1 beim Start dann 2..3.. usw.
    Local $max = 10 ; Anzahl Suchkreise

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

    For $n = 1 To $max
    ; Diagonal-Eckpunkte
    ; l.o.
    Local $lo[2] = [$x-$n, $y-$n]
    ; r.o.
    Local $ro[2] = [$x+$n, $y-$n]
    ; l.u.
    Local $lu[2] = [$x-$n, $y+$n]
    ; r.u.
    Local $ru[2] = [$x+$n, $y+$n]

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

    ; Kanten
    ; oben (alles zwischen l.o. und r.o.)
    Local $_o[$ro[0]-$lo[0]][2]
    For $i = 0 To UBound($_o) -1
    $_o[$i][0] = $lo[0] +$i +1
    $_o[$i][1] = $lo[1]
    Next
    ; unten (alles zwischen l.u. und r.u.)
    Local $_u[$ru[0]-$lu[0]][2]
    For $i = 0 To UBound($_u) -1
    $_u[$i][0] = $lu[0] +$i +1
    $_u[$i][1] = $lu[1]
    Next
    ; links (alles zwischen l.o. und l.u.)
    Local $_l[$lu[1]-$lo[1]][2]
    For $i = 0 To UBound($_l) -1
    $_l[$i][0] = $lo[0]
    $_l[$i][1] = $lo[1] +$i +1
    Next
    ; rechts (alles zwischen r.o. und r.u.)
    Local $_r[$ru[1]-$ro[1]][2]
    For $i = 0 To UBound($_r) -1
    $_r[$i][0] = $ru[0]
    $_r[$i][1] = $ru[1] +$i +1
    Next
    Next

    [/autoit]
  • Spaltenbreite in Funkion _ArrayDisplay selber definieren

    • BugFix
    • 7. Dezember 2009 um 13:24

    Ich habe das auch mal eingebunden und bei der Gelegenheit einen Fehler aus _ArrayDisplay() gleich noch gefixt:
    Standardmäßig wird die Breite der Anzeige-GUI nicht begrenzt. Ich habe das mal auf 1024 px gesetzt, da kleinere Desktopbreiten wohl nicht zu erwarten sind, Laptops aber sehr häufig hier ihr Limit finden.
    Als Standard-Spaltenbreite habe ich 80 angegeben, nicht unterschreitbares Minimum ist 20, mit -1 wird die Standardbreite verwendet.
    Da in der Anzeige selten der Titel gesetzt wird (geschweige denn die anderen optionalen Parameter) habe ich den Parameter für die Spaltenbreite als ersten Wahlparameter übergeben.

    Spoiler anzeigen
    [autoit]

    Local $a1[30][4], $a2[30][20]
    For $i = 0 To UBound($a1) -1
    For $j = 0 To UBound($a1,2) -1
    $a1[$i][$j] = 'Wert ' & $i & $j
    Next
    Next
    For $i = 0 To UBound($a2) -1
    For $j = 0 To UBound($a2,2) -1
    $a2[$i][$j] = 'Wert ' & $i & $j
    Next
    Next

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

    __ArrayDisplay($a1, 200, 'Test 4 Spalten')
    __ArrayDisplay($a2, 160, 'Test 20 Spalten')

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

    Func __ArrayDisplay(Const ByRef $avArray, $iColWidth = -1, $sTitle = "Array: ListView Display", $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|")
    If Not IsArray($avArray) Then Return SetError(1, 0, 0)

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

    ; Dimension checking
    Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
    If $iDimension > 2 Then Return SetError(2, 0, 0)

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

    ; Separator handling
    ;~ If $sSeparator = "" Then $sSeparator = Chr(1)
    If $sSeparator = "" Then $sSeparator = Chr(124)

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

    ; Declare variables
    Local $i, $j, $vTmp, $aItem, $avArrayText, $sHeader = "Row", $iBuffer = 64
    Local $iColLimit = 250, $iLVIAddUDFThreshold = 4000, $iWidth = 640, $iHeight = 480
    Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator)

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

    ; Swap dimensions if transposing
    If $iSubMax < 0 Then $iSubMax = 0
    If $iTranspose Then
    $vTmp = $iUBound
    $iUBound = $iSubMax
    $iSubMax = $vTmp
    EndIf

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

    ; Set limits for dimensions
    If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
    If $iItemLimit = 1 Then $iItemLimit = $iLVIAddUDFThreshold
    If $iItemLimit < 1 Then $iItemLimit = $iUBound
    If $iUBound > $iItemLimit Then $iUBound = $iItemLimit
    If $iLVIAddUDFThreshold > $iUBound Then $iLVIAddUDFThreshold = $iUBound

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

    ; Set header up
    For $i = 0 To $iSubMax
    $sHeader &= $sSeparator & "Col " & $i
    Next

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

    ; Convert array into text for listview
    Local $avArrayText[$iUBound + 1]
    For $i = 0 To $iUBound
    $avArrayText[$i] = "[" & $i & "]"
    For $j = 0 To $iSubMax
    ; Get current item
    If $iDimension = 1 Then
    If $iTranspose Then
    $vTmp = $avArray[$j]
    Else
    $vTmp = $avArray[$i]
    EndIf
    Else
    If $iTranspose Then
    $vTmp = $avArray[$j][$i]
    Else
    $vTmp = $avArray[$i][$j]
    EndIf
    EndIf

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

    ; Add to text array
    $vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
    $avArrayText[$i] &= $sSeparator & $vTmp

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

    ; Set max buffer size
    $vTmp = StringLen($vTmp)
    If $vTmp > $iBuffer Then $iBuffer = $vTmp
    Next
    Next
    $iBuffer += 1

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

    ; GUI Constants
    Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 0x66
    Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 0x40
    Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 0x0200
    Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 0x2
    Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 0x4
    Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
    Local Const $_ARRAYCONSTANT_LVIF_PARAM = 0x4
    Local Const $_ARRAYCONSTANT_LVIF_TEXT = 0x1
    Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
    Local Const $_ARRAYCONSTANT_LVM_INSERTITEMA = (0x1000 + 7)
    Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
    Local Const $_ARRAYCONSTANT_LVM_SETITEMA = (0x1000 + 6)
    Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
    Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
    Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
    Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
    Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
    Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
    Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000
    Local Const $_ARRAYCONSTANT_tagLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"

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

    Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
    Local $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]"), $pBuffer = DllStructGetPtr($tBuffer)
    Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM), $pItem = DllStructGetPtr($tItem)
    DllStructSetData($tItem, "Param", 0)
    DllStructSetData($tItem, "Text", $pBuffer)
    DllStructSetData($tItem, "TextMax", $iBuffer)

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

    ; Set interface up
    Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
    Local $aiGUISize = WinGetClientSize($hGUI)
    Local $hListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
    Local $hCopy = GUICtrlCreateButton("Copy Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
    GUICtrlSetResizing($hListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
    GUICtrlSetResizing($hCopy, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)

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

    ; Fill listview
    For $i = 0 To $iLVIAddUDFThreshold
    GUICtrlCreateListViewItem($avArrayText[$i], $hListView)
    Next
    For $i = ($iLVIAddUDFThreshold + 1) To $iUBound
    $aItem = StringSplit($avArrayText[$i], $sSeparator)
    DllStructSetData($tBuffer, "Text", $aItem[1])

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

    ; Add listview item
    DllStructSetData($tItem, "Item", $i)
    DllStructSetData($tItem, "SubItem", 0)
    DllStructSetData($tItem, "Mask", $iAddMask)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMA, 0, $pItem)

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

    ; Set listview subitem text
    DllStructSetData($tItem, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
    For $j = 2 To $aItem[0]
    DllStructSetData($tBuffer, "Text", $aItem[$j])
    DllStructSetData($tItem, "SubItem", $j - 1)
    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETITEMA, 0, $pItem)
    Next
    Next

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

    ; ajust window width
    $iWidth = 0
    For $i = 0 To $iSubMax + 1
    $iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
    Next
    If $iWidth < 250 Then $iWidth = 230
    ;~ WinMove($hGUI, "", Default, Default, $iWidth + 20)
    ; set max. width and horizontal centered (by BugFix)
    If $iWidth > 1024 Then $iWidth = 1004
    Local $x = (@DesktopWidth-($iWidth+20))/2
    WinMove($hGUI, "", $x, Default, $iWidth + 20)

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

    ; set Column width (by BugFix)
    Local $aResult = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", GUICtrlSendMsg($hListView, 0x1000+31, 0, 0), "int", 0x1200, "wparam", 0, "lparam", 0)
    Local $colCount = $aResult[0]
    If $iColWidth < 20 Then $iColWidth = 80
    GUICtrlSendMsg($hListView, 0x1000 + 30, 0, 40)
    For $i = 1 To $colCount -1
    GUICtrlSendMsg($hListView, 0x1000+30, $i, $iColWidth)
    Next

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

    ; Show dialog
    GUISetState(@SW_SHOW, $hGUI)

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

    While 1
    Switch GUIGetMsg()
    Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
    ExitLoop

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

    Case $hCopy
    Local $sClip = ""

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

    ; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
    Local $aiCurItems[1] = [0]
    For $i = 0 To GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
    If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
    $aiCurItems[0] += 1
    ReDim $aiCurItems[$aiCurItems[0] + 1]
    $aiCurItems[$aiCurItems[0]] = $i
    EndIf
    Next

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

    ; Generate clipboard text
    If Not $aiCurItems[0] Then
    For $sItem In $avArrayText
    $sClip &= $sItem & @CRLF
    Next
    Else
    For $i = 1 To UBound($aiCurItems) - 1
    $sClip &= $avArrayText[$aiCurItems[$i]] & @CRLF
    Next
    EndIf
    ClipPut($sClip)
    EndSwitch
    WEnd
    GUIDelete($hGUI)

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

    Opt("GUIOnEventMode", $iOnEventMode)
    Opt("GUIDataSeparatorChar", $sDataSeparatorChar)

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

    Return 1
    EndFunc ;==>_ArrayDisplay

    [/autoit]
  • Spaltenbreite in Funkion _ArrayDisplay selber definieren

    • BugFix
    • 7. Dezember 2009 um 10:56

    Wenn du möchtest, kannst du die Funktion um diesen Parameter erweitern. :)
    Standardmäßig ist das nicht möglich.

  • Wie kann ich mich mit einem AutoIt Script abmelden, sodass das Script weiter läuft???

    • BugFix
    • 6. Dezember 2009 um 13:47

    Geh doch einfach in den Screensaver-Modus mit Option Paßwort bei Wiederherstellung.

  • Internet sperren

    • BugFix
    • 6. Dezember 2009 um 13:06
    Zitat von xp_fan

    Wie kriege ich die Gateway IP heraus?


    z.B. damit: Konfiguration Netzwerkadapter
    (oder per Hand unter Eigenschaften Netzwerkadapter nachschauen ;) )

    Zitat von xp_fan

    Kann ich für $FAKE_GATEWAY_IP etwas beliebiges einsetzen?


    Ja, einfach eine nicht existierende IP-Adresse verwenden.

  • Datum vergleichen

    • BugFix
    • 6. Dezember 2009 um 11:53

    Du mußt alle 3 Möglichkeite abprüfen (> / = / < ).
    Das ließe sich so realisieren:

    [autoit]

    #include-once
    #Include <Date.au3>

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

    $d1 = @YEAR & '/' & @MON & '/' & @MDAY
    $d2 = '2009/12/04'

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

    ConsoleWrite(_GetLowerDate($d1, $d2) & @CRLF)

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

    Func _GetLowerDate($sDate1, $sDate2) ; Datumsformat: "YYYY/MM/DD[ HH:MM:SS]"
    Local $diff = _DateDiff('D', $sDate1, $sDate2)
    Select
    Case $diff < 0
    Return 2 ; das zweite Datum ist kleiner
    Case $diff = 0
    Return 0 ; beide Werte sind gleich
    Case $diff > 0
    Return 1 ; das erste Datum ist kleiner
    EndSelect
    EndFunc

    [/autoit]

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™