Mit der Funktion oben, nimmt er immer nur jede 2. Datei, aber ich weis nicht warum..
Du mußt das Listview rückwärts durchlaufen!
Sonst stimmt die Indexzuordnung nach dem Entfernen von Items nicht mehr.
Mit der Funktion oben, nimmt er immer nur jede 2. Datei, aber ich weis nicht warum..
Du mußt das Listview rückwärts durchlaufen!
Sonst stimmt die Indexzuordnung nach dem Entfernen von Items nicht mehr.
$array[n][2]
[n][0] = Title
[n][1] = Zeit
In Schleife überprüfen ob Zeitdifferenz größer Time-max.
sicher).
Allerdings funktioniert sie nicht für negative Zahlen, was irgendwie schade ist...
Das hatte ich glatt vergessen, habe die dafür notwendigen 2 Zeichen hinzugefügt. ![]()
Die hatte ich mir vorsorglich mal archiviert, als ich gelesen habe, dass sie aus den UDFs entfernt wird.
Hatte ich auch irgendwie in Erinnerung, dass es da schon mal was gab. Habs nur nicht mehr gefunden. Da meine Variante deutlich kürzer ist, werde ich diese weiter nutzen. ![]()
Ich soll eine Com+ Komponente starten / beenden können, sowie auf basis einer AD Gruppe berechtigen.
Werd bitte mal etwas konkreter und benenne genau, welche Komponente du wozu nutzen möchtest. Dann kann man sehen, ob das überhaupt mit AutoIt realisierbar ist. Ganz pauschal kann man deine Frage nicht beantworten.
In der SB war die Frage, wie man eine Zahl mit den Tausenderpunkten ausgeben kann.
Hier mal eine Lösung dazu.
Eingabe:
- als nummerischer Wert (Komma als Punkt)
- als String (Komma als Zeichen)
Ausgabe:
- Tausendertrenner "." - Dezimaltrenner "," (Standard)
- Tausendertrenner "," - Dezimaltrenner "." (zweiten Parameter übergeben <> "DE")
Limitiert auf 18 Vorkommastellen - sollte aber wohl reichen. Wer mehr braucht: im Pattern weitere Dreierblocks ( "(\d{3})?" ) einfügen.
Man könnte das Pattern auch dynamisch über die Stringlänge anpassen. Aber ich denke so reicht es auch. ![]()
$i = '1234567890,97'
ConsoleWrite('EN: ' & _NumberFormatThousand($i, 'EN') & @CRLF)
$i = 12345678901234567
ConsoleWrite('EN: ' & _NumberFormatThousand($i, 'EN') & @CRLF)
$i = 123456789.1234
ConsoleWrite('EN: ' & _NumberFormatThousand($i, 'EN') & @CRLF & @CRLF)
$i = '1234567890,97'
ConsoleWrite('DE: ' & _NumberFormatThousand($i) & @CRLF)
$i = 12345678901234567
ConsoleWrite('DE: ' & _NumberFormatThousand($i) & @CRLF)
$i = 123456789.1234
ConsoleWrite('DE: ' & _NumberFormatThousand($i) & @CRLF)
Func _NumberFormatThousand($vNumber, $ret='DE') ; bis 18 Vorkommastellen
Local $sOut = '', $a = StringRegExp(StringReplace($vNumber, '.', ','), "(-?\d{1,3})(\d{3})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?(?:\Z|(,\d+))", 3)
For $i = 0 To UBound($a) -1
If $a[$i] <> '' Then $sOut &= '.' & $a[$i]
Next
If $ret <> 'DE' Then Return StringTrimLeft(StringReplace(StringReplace($sOut, '.', ','), ',,', '.'), 1)
Return StringTrimLeft(StringReplace($sOut, '.,', ','), 1)
EndFunc
Edit: Vielleicht bekommt jemand das ja auch mit StringFormat() hin. Falls ja - würde mich mal interessieren. Die Funktion liegt mir überhaupt nicht. ![]()
Edit 26.03.2011:
Ich habe gerade eine Funktion zur Währungsausgabe benötigt. Da diese z.T. auf der vorigen Funktion basiert, hänge ich sie mal hier mit an.
Währungssymbol, Dezimaltrenner und Gruppenseperator werden aus den Ländereinstellungen des PC übernommen. Ihr könnt ja zum Testen mal ein anderes Länderformat aktivieren.
; Ausgabe PC-Währung, Standard-Währungseinstellung
ConsoleWrite(_FormatCurrency(200*12345) & @CRLF) ; ==> 2.469.000,00 € , Länderformat USA: 2,469,000.00 $
; Ausgabe Dollar, Währungssymbol führend
ConsoleWrite(_FormatCurrency(-200*12345, -1, -1, '$', -1, 1) & @CRLF) ;==> $ -2.469.000,00 , Länderformat USA: -2,469,000.00 $
; Ausgabe Dollar, Währungssymbol führend, negativer Wert in Klammern
ConsoleWrite(_FormatCurrency(-200*12345, -1, -1, '$', -1, 1, 1) & @CRLF) ;==> [$ -2.469.000,00] , Länderformat USA: [$ -2,469,000.00]
; Ausgabe PC-Währung, mit Vornull
ConsoleWrite(_FormatCurrency(4/80) & @CRLF) ;==> 0,05 € , Länderformat USA: 0.05 $
; Ausgabe PC-Währung, ohne Vornull
ConsoleWrite(_FormatCurrency(4/80, -1, -1, -1, 0) & @CRLF) ;==> ,05 € , Länderformat USA: .05 $
;===============================================================================
; Function Name...: _FormatCurrency
; Description.....: Formatiert einen Ausdruck als Währung
; Parameter(s)....: $iExpression der zu formatierende Ausdruck
; Requirement(s)..: $iNumDigit Anzahl Nachkommastellen, -1 = Währungseinstellung PC (Standard)
; $iGroupDig Anzahl Zeichen für Gruppierung, -1 = 3 Zeichen (Standard)
; $sCurr Währungszeichen, -1 = Währungseinstellung PC (Standard)
; $iLeadingZero Führende Null anzeigen, -1 = Währungseinstellung PC (Standard), 0 = nein
; $fLeadingSign Währungszeichen führend anzeigen, 0 = nein (Standard)
; $fNegNumInPara Negative Werte in eckigen Klammern anzeigen, 0 = nein (Standard)
; Return Value(s).: Der formatierte Währungsstring
; Note............: Die Gruppierung ermöglicht maximal 8 Blöcke
; Author(s).......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _FormatCurrency($iExpression, $iNumDigit=-1, $iGroupDig=-1, $sCurr=-1, $iLeadingZero=-1, $fLeadingSign=0, $fNegNumInPara=0)
Local $sRegKey = 'HKCU\Control Panel\International', $sReturn, $aTmp, $sTmp, $sNul = '000000000', $fNeg = 0
Local $sDec = RegRead($sRegKey, 'sMonDecimalSep'), $sThousand = RegRead($sRegKey, 'sMonThousandSep')
Local $sNegative = RegRead($sRegKey, 'sNegativeSign')
If $iGroupDig < 0 Then $iGroupDig = 3
If $sCurr = -1 Then $sCurr = RegRead($sRegKey, 'sCurrency')
If $iNumDigit = -1 Then $iNumDigit = RegRead($sRegKey, 'iCurrDigits')
If $iLeadingZero = -1 Then $iLeadingZero = RegRead($sRegKey, 'iLZero')
If IsFloat($iExpression) Then
$iExpression = Round($iExpression, $iNumDigit)
$sReturn = String($iExpression)
If $iNumDigit Then
$aTmp = StringSplit(String($iExpression), '.')
$sReturn = $aTmp[1] & Chr(29) & StringLeft($aTmp[2] & $sNul, $iNumDigit)
EndIf
Else
$sReturn = String($iExpression)
If $iNumDigit Then $sReturn = String($iExpression) & Chr(29) & StringLeft($sNul, $iNumDigit)
EndIf
If Not $iLeadingZero And StringRegExp($sReturn, '^-?0' & Chr(29) & '\d*') Then $sReturn = StringReplace($sReturn, '0' & Chr(29), Chr(29), 1)
If $iGroupDig > 0 And StringLen(Abs($sReturn)) >= $iGroupDig Then
$aTmp = StringRegExp(StringReplace($sReturn, '.', Chr(29)), _
"(-?\d{1,"&$iGroupDig&"})(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(?:\Z|("&Chr(29)&"\d+))", 3)
For $i = 0 To UBound($aTmp) -1
If $aTmp[$i] <> '' Then $sTmp &= $sThousand & $aTmp[$i]
Next
$sReturn = StringTrimLeft(StringReplace($sTmp, $sThousand&Chr(29), Chr(29)), 1)
EndIf
If StringLeft($sReturn, 1) = '-' Then $fNeg = 1
$sReturn = StringReplace(StringReplace($sReturn, '-', $sNegative), Chr(29), $sDec)
If $fLeadingSign Then
$sReturn = $sCurr & ' ' & $sReturn
Else
$sReturn &= ' ' & $sCurr
EndIf
If $fNeg And $fNegNumInPara Then $sReturn = '[' & $sReturn & ']'
Return $sReturn
EndFunc ;==>_FormatCurrency
Mit autoit war halt ebend eine aufgabe die machen sollte...
Also wenn dir jemand die Aufgabe übertragen hat, dieses Problem mit AutoIt zu lösen und weiß, dass dein Wissensstand in AutoIt gering ist, dann solltest du demjenigen gehörig in den A... treten.
Dazu bedarfs es schon mehr als nur zu wissen, wie man eine GUI auf dem Monitor anzeigt.
Oder hast du dir AutoIt zur Lösung der Aufgabe selbst ausgesucht? ![]()
Ich brauch halt das passende "Gerüst" dazu.
Das ist leider etwas aufwändig. Zu einer Datenbankverwaltung gehört:
- Erfassung
- Änderung
- Löschung
- Suche/ Anzeige
- Auswertung/ Reports
- Drucken ?
Da mußt du schon ganz konkret deine Vorstellungen angeben, vielleicht ist dann jemand bereit das Projekt für dich in Angriff zu nehmen. ![]()
Die Datenbank als solches ist kein Problem und kein Aufwand. Entscheidend ist aber, wie du dir die Verwaltung vorstellst.
Unter Umständen reicht es ja, wenn du eine SQLite-DB nutzt und mit dem Administrator deine Daten verwaltest.
Dass BugFix' Aussage aber gerade darauf basiert das der Programmierer völlig dämlich programmiert hat und nur in diesem Sonderfall die Sache einfach ist hat mich zu meinem Statement hierzu bewegt.
OK, wir sollten wirklich nicht über Dinge streiten, bei denen eigentlich Einigkeit besteht.
Ich wollte nur mit einer ganz allgemein gehaltenen Aussage (ohne die verwendbaren Wege als "Ansporn" zu benennen) ausdrücken, dass es tatsächlich kein allzu schwerer Weg ist, die Schutzmechanismen auszuhebeln. Mit der Formulierung "..Passwort ausfindig machen.." wollte ich keinesfalls suggerieren, man könnte es auslesen. Aber da es ja nun schon angesprochen wurde - man braucht das PW nicht sondern setzt danach ein. Details sparen wir uns, ist sicher nicht ganz einfach aber wie erwähnt, gibt es Tuts, die es jedem ermöglichen, das auszutesten.
Aber wie gesagt, ich würde mir niemals den Streß antun und mir krampfhaft Sicherungsmechanismen für meine Programme ausdenken.
Mit jedem Disassembler kann ich auch in den Assembler Code reinschauen und den Code nachvollziehen!
Dem kann ich nur voll zustimmen. Wenn man durch den Spaghetticode durchblickt (was mit ein wenig Übung gar nicht so schwer ist), kann man recht problemlos jeden Produktkey, jedes Passwort oder was auch immer den Zugang zu einem Programm beschränken soll ausfindig machen. Die dafür notwendigen Programme sind auch völlig legal. Somit sind m.M. Passwortbeschränkungen nur geeignet um völlig programmiertechnisch unbedarfte Personen außen vorzuhalten. Wer dies umgehen will findet immer Mittel und Wege.
Mein Tipp daher:
Gestaltet eure Software immer als OpenSource. Wenn dies von allen so gehandhabt wird, haben wir ein reges Geben und Nehmen von dem alle profitieren (und lernen) können. ![]()
Da auch negative Zahlen gerade/ungerade sind, empfiehlt sich folgendes:
[autoit]Func _IsEven($i)
If $i < 0 Then $i = -1 * $i
If Mod($i, 2) Then Return False
Return True
EndFunc
Ich verstehe nicht recht, was du möchtest. Wenn der Würfel sich parallel zur Maus bewegt ändern sich doch nur 2D-Koordinaten, also horizontale und vertikale Wertänderung. Die kannst du doch 1:1 von der Maus übernehmen. Du behältst also z bei und änderst analog zur Änderung der Mauswerte x und y deines Würfels.
Zeig doch mal dein bisheriges Skript.
So sehr ich die Proteste aus sachlicher Sicht verstehen kann, stellt sich auch mir die Frage, warum Proteste erst jetzt erfolgen.
Über die Unsinnigkeit des Projektes braucht man wohl nicht reden. Man nehme sich einen 10 Jahre alten Fahrplan und staune: Damals wurden 20 min weniger Fahrzeit für eine Strecke benötigt als jetzt und genau dieser Status soll mit Milliardeninvestitionen wieder erreicht werden - also nix Neues oder Besseres.
Das kommt halt davon, wenn ein Staat die Herrschaft über die Verkehrswege aufgibt und rein profitorientierte Unternehmen die Wartungen der Strecken soweit minimieren, dass diese nur noch mit geringer Geschwindigkeit (und daraus resultierendem Zeitverlust) befahren werden können.
Du umschreibst ziemlich nebulös dein Vorhaben. Werde doch mal ganz konkret und nenne Roß und Reiter beim Namen.
z.B. so:
Local $gui1, $gui2, $gui3, $gui4, $gui5, $btn1_1, $btn1_2, $btn1_3, $btn1_4, $btn2, $btn3, $btn4, $btn5, $msg
[/autoit] [autoit][/autoit] [autoit]$gui1 = GUICreate('GUI 1')
$btn1_1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)
$btn1_2 = GUICtrlCreateButton('Zeige GUI 3', 10, 50, 100, 20)
$btn1_3 = GUICtrlCreateButton('Zeige GUI 4', 10, 80, 100, 20)
$btn1_4 = GUICtrlCreateButton('Zeige GUI 5', 10, 110, 100, 20)
$gui2 = GUICreate('GUI 2')
$btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)
$gui3 = GUICreate('GUI 3')
$btn3 = GUICtrlCreateButton('Button 3', 10, 20, 100, 20)
$gui4 = GUICreate('GUI 4')
$btn4 = GUICtrlCreateButton('Button 4', 10, 20, 100, 20)
$gui5 = GUICreate('GUI 5')
$btn5 = GUICtrlCreateButton('Button 5', 10, 20, 100, 20)
GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg(1)
Switch $msg[1] ; Window Handle
Case $gui1
Switch $msg[0] ; Event
Case $GUI_EVENT_CLOSE
ExitLoop
Case $btn1_1
GUISetState(@SW_HIDE, $gui1)
GUISetState(@SW_SHOW, $gui2)
Case $btn1_2
GUISetState(@SW_HIDE, $gui1)
GUISetState(@SW_SHOW, $gui3)
Case $btn1_3
GUISetState(@SW_HIDE, $gui1)
GUISetState(@SW_SHOW, $gui4)
Case $btn1_4
GUISetState(@SW_HIDE, $gui1)
GUISetState(@SW_SHOW, $gui5)
EndSwitch
Case $gui2
Switch $msg[0]
Case $GUI_EVENT_CLOSE
GUISetState(@SW_SHOW, $gui1)
GUISetState(@SW_HIDE, $gui2)
Case $btn2
MsgBox(0, '', 'Button 2 geklickt')
EndSwitch
Case $gui3
Switch $msg[0]
Case $GUI_EVENT_CLOSE
GUISetState(@SW_SHOW, $gui1)
GUISetState(@SW_HIDE, $gui3)
Case $btn3
MsgBox(0, '', 'Button 3 geklickt')
EndSwitch
Case $gui4
Switch $msg[0]
Case $GUI_EVENT_CLOSE
GUISetState(@SW_SHOW, $gui1)
GUISetState(@SW_HIDE, $gui4)
Case $btn4
MsgBox(0, '', 'Button 4 geklickt')
EndSwitch
Case $gui5
Switch $msg[0]
Case $GUI_EVENT_CLOSE
GUISetState(@SW_SHOW, $gui1)
GUISetState(@SW_HIDE, $gui5)
Case $btn5
MsgBox(0, '', 'Button 5 geklickt')
EndSwitch
EndSwitch
WEnd
GUIDelete($gui1)
GUIDelete($gui2)
GUIDelete($gui3)
GUIDelete($gui4)
GUIDelete($gui5)
Genau das machen diese Befehle! Wenn dir Hilfe geboten wird, dann nimm sie bitte auch an und lies wenigstens zu den Befehlen die Erklärungen aus der Hilfe gründlich durch.
Schau dir ControlClick, ControlCommand etc. an.
ja so nach deiner beschreibung schon, aber nicht nach meiner
Das ist das Problem, du vermutest dahinter einen nicht allzu großen Aufwand. Wir können dir aufgrund unserer Erfahrung aber sagen, dass der Aufwand immens und sowieso zweifelhaft ist, ob es mit AutoIt realisiert werden kann. Auf jeden Fall dürfte es zu einer echten Systembremse werden.
Also sag deinem Chef, er soll die paar € für einen guten Router locker machen oder bau dir, wie von progandy empfohlen, mit 'nem Linux-System deinen eigenen Router mit allem Komfort.
Was ich machen will sind 6 Inputboxen für ID & PW , sowie für die Koordinaten der ID und PW boxen auf der Seite.
Ein reines LogIn-Script mit Firefox - schau dir dazu mal die FF.au3 an (such im Forum, ist nicht Bestandteil von AutoIt). Denn über Desktopkoordinaten auf Felder zugreifen zu wollen ist zu ungenau und auch gar nicht notwendig.
Wie kann ich das ganze, also fertiger Code + neue Elemente exportieren?
Du darfst keine Änderungen an dem von Koda erstellten Code von Hand vornehmen, das siehst du an dem Bereich "#region Koda". Dann kannst du in Koda auch aus einem Skript wieder importieren, schau dir mal die Menüpunkte in Koda an.