'BF'
guckst du: [ offen ] Wo sind ö/ä/ü bei _IsPressed?
Beiträge von BugFix
-
-
Das kommt hin, normal befüllter PC
- bei mir 4600 Zeilen ;-). -
Da tippe ich mal auf Vista, bei mir sind es etwa 3 Sekunden.

-
Mit der Funktion werden zu einzelnen/allen Systemordnern der Pfad und die Inhalte ausgegeben.
_ListSystemFolder( )
[autoit]#cs
[/autoit] [autoit][/autoit] [autoit]
-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$ret = _ListSystemFolder() ; Abfrage aller Systemordner
[/autoit] [autoit][/autoit] [autoit]
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]
; 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 -
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:
[/autoit] [autoit][/autoit] [autoit]
_DirRename('C:\test', 'C:\Neu')
; oder auch
_DirRename('C:\test', 'Neu');===============================================================================
[/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 -
GTASpider hatte das mal für die G15 gemacht, vielleicht nützt dir das was: Zugriff auf LCD der G15 mit der LgLCD SDK
-
-
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ß ;)). -
Natürlich möchte ich auch dem Forum zum Vierten gratulieren.
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!
Und auch, wenn ihr es euch vielleicht nicht vorstellen könnt: Damals kannte ich Arrays nur dem Namen nach, ein Buch mit 7 Siegeln.
Nunja, mit Hilfe des Forums konnte ich da einiges an Wissen erweitern
Auch ich war von Anbeginn begeistert vom 'Geist des Forums', wenn ich das mal so nennen darf.
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.
-
Hi Oscar,
habe deine Anregungen übernommen - aber ohne meine erste Variante wegzulassen.
Beide Eingabemethoden haben Vor- und Nachteile, somit wird die jetzt vorhandene Wahlmöglichkeit allen Wünschen gerecht.
Änderungen 1. Post
-
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. -
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 ErrorIn 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
[/autoit] [autoit][/autoit] [autoit]
#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]
#ce
#endregion
If $oHoliday.Exists($iYear & '/' & $iMon & '/' & $iDay) Then
Return $oHoliday.Item($iYear & '/' & $iMon & '/' & $iDay)
Else
Return ''
EndIf
EndFunc ;==>_IsHoliday -
Änderung s. 1.Post: Bundeseinheitliche Feiertage können berücksichtigt werden.
-
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. -
Deine Frage hat mich zu folgender Funktion angeregt: Werktage / Arbeitstage eines Monats ermitteln
-
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
[/autoit] [autoit][/autoit] [autoit]
#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 ;==>_GetWorkDaysFunc _IsHoliday($iYear, $iMon, $iDay)
[/autoit]
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 -
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: )
-
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.
Spoiler anzeigen
[autoit]; Ausgangsposition
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $x, $y
Local $n = 1 ; Umkreisvariable, 1 beim Start dann 2..3.. usw.
Local $max = 10 ; Anzahl SuchkreiseFor $n = 1 To $max
[/autoit] [autoit][/autoit] [autoit]
; 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]; Kanten
[/autoit]
; 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 -
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]
[/autoit] [autoit][/autoit] [autoit]
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__ArrayDisplay($a1, 200, 'Test 4 Spalten')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
__ArrayDisplay($a2, 160, 'Test 20 Spalten')Func __ArrayDisplay(Const ByRef $avArray, $iColWidth = -1, $sTitle = "Array: ListView Display", $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|")
[/autoit] [autoit][/autoit] [autoit]
If Not IsArray($avArray) Then Return SetError(1, 0, 0); Dimension checking
[/autoit] [autoit][/autoit] [autoit]
Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
If $iDimension > 2 Then Return SetError(2, 0, 0); Separator handling
[/autoit] [autoit][/autoit] [autoit]
;~ If $sSeparator = "" Then $sSeparator = Chr(1)
If $sSeparator = "" Then $sSeparator = Chr(124); Declare variables
[/autoit] [autoit][/autoit] [autoit]
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); Swap dimensions if transposing
[/autoit] [autoit][/autoit] [autoit]
If $iSubMax < 0 Then $iSubMax = 0
If $iTranspose Then
$vTmp = $iUBound
$iUBound = $iSubMax
$iSubMax = $vTmp
EndIf; Set limits for dimensions
[/autoit] [autoit][/autoit] [autoit]
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; Set header up
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To $iSubMax
$sHeader &= $sSeparator & "Col " & $i
Next; Convert array into text for listview
[/autoit] [autoit][/autoit] [autoit]
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; Add to text array
[/autoit] [autoit][/autoit] [autoit]
$vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
$avArrayText[$i] &= $sSeparator & $vTmp; Set max buffer size
[/autoit] [autoit][/autoit] [autoit]
$vTmp = StringLen($vTmp)
If $vTmp > $iBuffer Then $iBuffer = $vTmp
Next
Next
$iBuffer += 1; GUI Constants
[/autoit] [autoit][/autoit] [autoit]
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"Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
[/autoit] [autoit][/autoit] [autoit]
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); Set interface up
[/autoit] [autoit][/autoit] [autoit]
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); Fill listview
[/autoit] [autoit][/autoit] [autoit]
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]); Add listview item
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tItem, "Item", $i)
DllStructSetData($tItem, "SubItem", 0)
DllStructSetData($tItem, "Mask", $iAddMask)
GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMA, 0, $pItem); Set listview subitem text
[/autoit] [autoit][/autoit] [autoit]
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; ajust window width
[/autoit] [autoit][/autoit] [autoit]
$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); set Column width (by BugFix)
[/autoit] [autoit][/autoit] [autoit]
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; Show dialog
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hGUI)While 1
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
ExitLoopCase $hCopy
[/autoit] [autoit][/autoit] [autoit]
Local $sClip = ""; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
[/autoit] [autoit][/autoit] [autoit]
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; Generate clipboard text
[/autoit] [autoit][/autoit] [autoit]
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)Opt("GUIOnEventMode", $iOnEventMode)
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIDataSeparatorChar", $sDataSeparatorChar)Return 1
[/autoit]
EndFunc ;==>_ArrayDisplay -
Wenn du möchtest, kannst du die Funktion um diesen Parameter erweitern.

Standardmäßig ist das nicht möglich.