gibt es auch eine Möglichkeit Tage von einem Datum abzuziehen
_DateAdd mit negativer Zahl ![]()
gibt es auch eine Möglichkeit Tage von einem Datum abzuziehen
_DateAdd mit negativer Zahl ![]()
$var1 = 'A'
$var2 = 'a'
; Nicht Case Sensitive
$var1 = $var2
; Case Sensitive
$var1 <> $var2
Die Nutzungsbedingungen stellen nur erweiterte Regelungen zur EULA dar. Die wesentlichen, auf die Nutzung der Software gerichteten Bestimmungen, sind in der EULA dokumentiert. Du findest diese i.A. im Installationsordner als "EULA.txt". Schau bitte mal dort nach. ![]()
Ich möchte dich bitten, zu erklären WARUM du PixelSearch auf einem versteckten Fenster ausführen willst.
Anderenfalls werde ich diesen Thread schließen!
Wenn eine Installation verschiedener Versionen nicht möglich ist, wird dieses vermutlich auch gegen die Lizenzbestimmungen des Spieles verstoßen (Ich nehme an, dass dort in etwa steht: "...darf nur einmal auf einem PC installiert werden"). Das Beibehalten einer alten Version nach einem Update stellt dann einen Verstoß gegen die Lizenzbestimmung dar!
Da ich WOW und dessen AGB/Lizenz nicht kenne, weiß ich das nicht sicher. Du solltest das aber prüfen, bevor du dich hier mit deinem Skript auf etwaige illegale Aktionen einläßt. Bitte poste mal den Auszug dazu aus den Lizenzbestimmungen. Davon hängt auch die 'Rechtmäßigkeit' dieses Threads ab.
Ich nehme an, dass derjenige, der mehrere Versionen von WOW installiert hat auch die entsprechende Einträge in der Registry hat. Diese werden vermutlich unter einem gemeinsamen Schlüssel abgelegt sein. z.B. '....\WOW\ver_X' und '....\WOW\ver_Y'. Also lies, sofern vorhanden, alle Unterschlüssel aus und lade die Pfade in eine ComboBox. Ist es nur ein Pfad kann halt nur dieser gewählt werden, ansonsten wird zwischen den vorhandenen Installationen gewählt.
Warum das Komma einfügen??
[autoit]$split = StringSplit('1234', '')
[/autoit]Schon hast du, was du willst. ![]()
Hi,
es kommt häufig vor, dass man per mehrfacher ODER-Verknüpfung prüfen muß, ob eine Variable einen von mehreren möglichen Werten besitzt.
z.B.
If ($varCheck = $var1) Or ($varCheck = $var2) Or ($varCheck = $var3) Or ($varCheck = $var4) Then
[/autoit]Das läßt sich mit der Funktion _InList() syntaktisch einfacher darstellen und ist m.E. auch einfacher zu lesen. Da ein Case sensitiver Vergleich möglich ist, muß als zweiter Parameter entsprechend '0' oder '1' übergeben werden.
Die Funktion erlaubt die Übergabe von bis zu 10 Vergleichswerten. Eine größere Anzahl macht eigentlich auch keinen Sinn, denn dann ist es sicher besser die Werte in ein Array zu stecken und mit _ArraySearch() zu arbeiten.
Die Vorbelegung der Operanden mit '-0' hat den Hintergrund, dass dies wahrscheinlich der einzigste Wert ist, den eine Variable i.A. wohl niemals annehmen wird - und somit geeignet ist zu prüfen, ob der Operand belegt ist.
Dieselbe Abfrage wie oben:
If _InList($varCheck, 0, $var1, $var2, $var3, $var4) Then
[/autoit];===============================================================================
; Function Name: _InList($var, $CaseSens, $op1, $op2='-0', $op3='-0', $op4='-0', $op5='-0', $op6='-0', $op7='-0', $op8='-0', $op9='-0', $op10='-0')
; Description:: Prüft auf Übereinstimmung einer Variablen mit bis zu 10 Operanden (min 1) einer Auflistung
; Es kann Case Sensitiv geprüft werden
; Parameter(s): $var die Variable
; $CaseSens 1 = Case Sensitiv; 0 (oder alles <> 1) = nicht CS
; $op1..10 die Listenelemente
; Return Value(s): True bei Übereinstimmung, sonst False
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _InList($var, $CaseSens, $op1, $op2='-0', $op3='-0', $op4='-0', $op5='-0', $op6='-0', $op7='-0', $op8='-0', $op9='-0', $op10='-0')
Local $match = 0
For $i = 1 To 10
If $match Then Return True
If $CaseSens = 1 Then
If Eval("op" & $i) == '-0' Then ExitLoop
If $var == Eval("op" & $i) Then $match += 1
Else
If Eval("op" & $i) == '-0' Then ExitLoop
If $var = Eval("op" & $i) Then $match += 1
EndIf
Next
Return False
EndFunc ;==>_InList
Mein absoluter Favorit: imgBOX Wenn man sich dort registriert, bleiben die Uploads unbegrenzt stehen.
[OT]
Möchte mal lobend erwähnen:
Das hier ist wirklich eine klare und eindeutige Fragestellung.
Wenn doch nur alle so wären.
[/OT]
aber ich verstehe nicht so wirklich den vorteil wenn das script von 1970 hochrechnet was mir das bringen soll gebe ich mal ehrlich zu ich sehe grad "noch" keinen sinn dahinter sorry^^
Wenn du ein Datum in einem Wert (Timestamp) angeben möchtest, kannst du das nur, indem du einen Referenzpunkt schaffst und dazu die Differenz (hier in Sekunden) zum gewünschten Zeitpunkt ermittelst.
Der Unix Timestamp hat als diese Referenz den 01.01.1970 00:00:00 Uhr. Das hat den Effekt, dass im 32bit-System die daraus resultierenden Timestamps vor 1970 negativ und danach postiv sind. Gültigkeit hat das im Bereich von 1902 bis 2038. Datumswerte davor oder danach sprengen durch den Differenzwert den Bereich des 32-Integer.
Der_Doc: Ist das, was ich inzwischen auch hier gemacht habe: Datum UND Zeit in 32-bit Integer Variable speichern
so habe das Global mal zu Local geändert
Das ist doch quatsch! Global war richtig - aber nicht innerhalb der Funktion deklarieren, sondern außerhalb!
Und du mußt dem Return schon das Ergebnis aus _StringBetween mitgeben. ![]()
1. Globale Variablen sollte man nicht innerhalb von Funktionen deklarieren
2. Schau dir mal die Hilfe zu _StringBetween an. Insbesondere den Rückgabetyp
3. Wenn du aus einer Funktion etwas zurückgegeben haben möchtest, brauchst du: Return ![]()
Wieso kommt die MsgBox zwei mal?
Die erste gibt das gesetzte Datum aus, die zweite das ausgelesene Datum.
Du hättest doch auch EPOCH /Unix-timestamp verwenden können
1970-2038 mit positiven Werten, kleiner als 1970 mit negativen Werten.
Oder: du reservierst dir mit _MemGlobalAlloc Speicher und setzt den Pointer zum Speicher in den Parameter, um später mit dllstructs darauf zuzugreifen.
Werde ich mal beides testen und probieren was im Handling einfacher ist.
Edit:
Habe beides ausprobiert - funktioniert. Variante Unix-Timestamp kann verwendet werden für Datumsbereich 1902 - 2038, damit haben wir den Bereich schon mal aufgespreizt. ![]()
Die zweite Variante hat den Vorteil, dass keine Datumsgrenzen existieren. Der Nachteil ist aber eine zusätzliche Speicherverwaltung.
Also werde ich es auf die Timestamp-Variante abändern.
Kann mir die Bemerkung nicht verkneifen:
Ich habe noch nichts entdeckt, was echtes Multitasking zwingend notwendig macht. Insofern ist solch ein Projekt eine schöne Programmierstudie zur Horizonterweiterung - aber echter Nutzen ist nicht sichtbar.
Bei Bedarf lässt sie das vielleicht auch für die UDF (wieso erstellst du dein Listview darüber?) umbauen?
Das geht leider definitiv nicht! Das gibt unlösbare Probleme mit _GUICtrlListView_SetItemParam(), und dort lege ich die Info ab, welche (Sub)-Item formatiert sind.
Sollte aber kein Problem sein: Einfach das ListView wie üblich mit GUICtrlCreateListView() erstellen, anschließend mit GUICtrlGetHandle() das Handle des ListView holen - schon lassen sich alle Funktionen der ListView-UDF nutzen als wäre dieses mit _GUICtrlListView_Create() erstellt.
Mit VB auch!?! Ich dachte das geht damit nicht weil es per NET läuft.
Da denkst du richtig - die VB-Dll sind nicht allgemein nutzbar.
So etwa?
[autoit]Global $impuls1=0, $impuls2=0
AdlibEnable('impuls', 100)
$gui = GUICreate('test')
$progress1 = GUICtrlCreateProgress(20, 10, 200, 20)
$progress2 = GUICtrlCreateProgress(20, 40, 200, 20)
GUISetState()
Do
Until GUIGetMsg() = -3
Func impuls()
If $impuls1 < 100 Then
$impuls1 += 10
GUICtrlSetData($progress1, $impuls1)
ElseIf $impuls1 = 100 Then
$impuls1 = 0
$impuls2 += 10
GUICtrlSetData($progress2, $impuls2)
If $impuls2 = 100 Then AdlibDisable()
EndIf
EndFunc
Hi,
Hintergrund hierfür war der Versuch, in einem ListView-Item mittels _GUICtrlListView_SetItemParam() Datum und Uhrzeit abzuspeichern, wobei die Uhrzeit mit Sekundenangabe gespeichert werden soll.
Da als Speichergröße nur ein 32bit Integer zur Verfügung steht, fallen TimeToTicks und andere Varianten aus.
Edit:
Habe es auf progandys Tipp hin nun mit Unix-Timestamp realisiert. Somit ergibt sich ein verwendbarer Datumsbereich von 1902 - 2038.
Das sollte i.A. ausreichen.
Hier als Bsp. in einem ListView:
#include <Date.au3>
#include <GuiListView.au3>
$gui = GUICreate('test')
$ListView = GUICtrlCreateListView('Testspalte', 10, 10, 200,200)
GUICtrlCreateListViewItem("1", $ListView)
GUICtrlCreateListViewItem("2", $ListView)
GUICtrlCreateListViewItem("3", $ListView)
$hListView = GUICtrlGetHandle($ListView)
GUISetState()
Local $y = @YEAR, $mon = @MON, $d = @MDAY, $h = @HOUR, $m = @MIN, $s = @SEC
_GUICtrlListView_SetItemParam($hListView, 1, _DateTimeToTimeStamp($y, $mon, $d, $h, $m, $s))
MsgBox(0, 'Gesetztes Datum', $y & '/' & $mon & '/' & $d & ' ' & $h & ':' & $m & ':' & $s)
Sleep(500)
While 1
$getItem = _TimeStampToDateTime(_GUICtrlListView_GetItemParam($hListView, 1))
MsgBox(0, 'Gelesenes Datum', $getItem)
ExitLoop
WEnd
; Limit: 1902 - 2038
Func _DateTimeToTimeStamp($year, $mon, $day, $h, $m, $s)
Return _DateDiff('s', "1970/01/01 00:00:00", $year & '/' & $mon & '/' & $day & ' ' & $h & ":" & $m & ":" & $s)
EndFunc
Func _TimeStampToDateTime($Number)
Return _DateAdd('s', $Number, "1970/01/01 00:00:00")
EndFunc