Jup schon klar, er braucht entweder n vernünftiges Trennzeichen oder n Array mit allen Makros. Aber grundsätzlich kann er die Makros mit Execute umwandeln
Beiträge von Schnitzel
-
-
Du könntest die Makros mithilfe von RegEx o.Ä. herrausfischen und dann mithilfe von Execute ausführen lassen.
Was besseres fällt mir da im Moment auch nicht ein^^
Ein Trennzeichen um Makros abzugrenzen wäre in dem Fall denke ich Recht gut.Also iwie so:
[autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit]$str = 'Teststringblablabla|@YEAR|WeitererString'
[/autoit][autoit][/autoit][autoit]
$a = StringRegExp($str, "(\|@\w+\|)", 3)
If IsArray($a) Then
For $i = 0 To UBound($a) - 1
$str = StringReplace($str, $a[$i], Execute(StringReplace($a[$i], "|", "")))
Next
EndIfMsgBox(0,"", $str)
[/autoit] -
Wow das is echt ne Frechheit. Ein NAS gehört für mich ins Lan ohne das dort Internet vorhanden ist. Im Gegenteil...
Da braucht man sich echt nicht wundern wenn durch Fehlkonfigurationen vom Verbraucher die Daten im Internet landen.
Da kann man die Schuld auch ganz schnell beim Hersteller sehen.
Rein Sicherheitstechnisch geht das ja mal garnich.Schade weil ich mit WD eigentlich noch keine schlechten Erfahrungen gemacht habe. Hab aber bisher auch nur HDD's gekauft.
-
Da sind wirklich viele Fehler drin. Du solltest unbedingt mal die Grundlagen durchlesen. (Tutorials siehe meine Signatur)
Der Teil gehört z.B. so:
[autoit]$Ziel1 = DirCreate($Ziel & '\UBSBackup')
[/autoit]
DirCopy( 'C:\Users\' & $Ordner & '\Music', $Ziel1, 1)
DirCopy( 'C:\Users\' & $Ordner & '\Videos', $Ziel1, 1)
DirCopy( 'C:\Users\' & $Ordner & '\Downloads', $Ziel1, 1)
DirCopy( 'C:\Users\' & $Ordner & '\Documents', $Ziel1, 1)
MsgBox(0, 'Abgeschlossen','Backup Abgeschlossen!Dateien in ' & $Ziel1 & '\UBSBackup!')Außerdem würde ich statt Inputboxen oft etwas anderes verwenden. Für die Ordnerauswahl z.B.
[autoit]FileSelectFolder
[/autoit] -
Einfache ' machens dir viel leichter
[autoit]MsgBox (0, 'Willkommen', 'Drücken Sie auf OK')
[/autoit][autoit][/autoit][autoit]
$Eingeben = InputBox('Befehl eingeben', 'Wollen sie User Backup Starter starten? Wenn ja, bitte "Ja" eingeben')If $Eingeben = 'Ja' Then
[/autoit]
ShellExecute('C:\Program Files (x86)\StevenX Media\WT Launcher\WT LauncherDE.exe')
EndifBitte verwende auch die autoit Tags
-
Jup Verbesserungen gibts natürlich noch viele. Grundsätzlich wollte ich ersteinmal von der Maschentopologie abraten an die er zuerst dachte. Ein Zentraler Speicherort wäre für die erste Version der beste Einstieg denke ich. Dannach kann man es ja immer noch um so viele Dinge erweitern (Protokoll, Userauthentifizierung, Versionierung, Zugriffsrechte, Gruppenfreigaben, ....). Sofern mans kann, kann mans
Grundsätzlich dachte ich also: Nimm dir nich zuviel für die erste Version vor^^
-
Ich würde das Problem an deiner Stelle etwas anders angehen.
Du schreibst dir ein kleines FTP Programm:
Du hast ein zentrales Verzeichnis auf dem FTP und ein lokales bei jedem PC.
Jeder PC connected zum FTP und überprüft ob im FTP-Verzeichnis neue Dateien vorhanden sind.
Wenn neue Dateien vorhanden sind läd er diese herrunter.
Außerdem wird in bestimmten Zeitabständen überprüft ob der User im lokalen Verzeichnis Dateien angelegt bzw verändert hat.
Wenn das zutrifft werden die Daten auf den FTP geladen.Dadurch ergeben sich für dich 2 enorme Vorteile:
1. Jeder kann sich die aktuellen Daten holen und die Daten im FTP aktualisieren ohne dass jemand anderes erreichbar ist
2. Du brauchst kein NAT am Router zu konfigurieren. (NAT leitet anfragen von deinem Router zum PC im Netz weiter. Ich würde das als ziemliches Sicherheitsrisiko sehen, weil du damit Leuten aus dem Internet zugriff auf deinen PC ermöglichst. Natürlich kann man das auch gut absichern, aber dazu sollte man sich auch gut damit auskennen)Ok du hast auch einen Nachteil:
Deine FTP Daten müssen im Script hinterlegt werden. Per decompilieren oder Netzwerksniffing wären diese dann auslesbar. Aber das lässt sich mit reinem FTP nicht verhindernHoffe ich konnte dir etwas weiterhelfen^^
Gruß
-
Das stichwort heißt GDI+
Damit kann man alles mögiche zeichnen, auch solche Graphen
Hier mal 3 links die dir weiterhelfen könnten: -
Du hast da ein paar Denkfehler und ein paar Dinge die umständlich gelöst sind...
1. Du musst natürlich erst überprüfen ob die IP schon im Array ist und dann erst (wenn sie nicht vorhanden ist) die neue einfügen.
2. Du machst ständig das selbe Stringsplit in das selbe Array.
3. Du solltest ganzzahlige Randomzahlen generieren.
4. Winwaitactive finde ich sehr fehleranfällig, Send noch mehr
5. Es gibt keine IP's über 255Deswegen hier mal 2 Vorschläge von mir:
[autoit]
[/autoit]
#include <Array.au3>
Local $sIpTmp, $aIp[1]
While 1
$sIpTmp = "192.168." & Random(0, 255, 1) & "." & Random(0, 255, 1); Beispielsweise mit IP's aus einem privaten Bereich (192.168...)
_ArraySearch($aIp, $sIpTmp)
If @error Then
_ArrayAdd($aIp, $sIpTmp)
ConsoleWrite($sIpTmp & @CRLF)
Else
ConsoleWrite($sIpTmp & " existiert schon" & @CRLF)
EndIf
WEndNotepad Version:
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <Array.au3>HotKeySet("{Esc}", "quit")
[/autoit][autoit][/autoit][autoit]
Local $sIpTmp, $aIp[1]
ShellExecute("notepad.exe")
WinWait("Unbenannt - Editor")While WinExists("Unbenannt - Editor")
[/autoit][autoit][/autoit][autoit]
$sIpTmp = "10." & Random(0, 255, 1) & "." & Random(0, 255, 1) & "." & Random(0, 255, 1); Beispielsweise mit IP's aus einem anderen privaten Bereich (10...)
_ArraySearch($aIp, $sIpTmp)
If @error Then
_ArrayAdd($aIp, $sIpTmp)
ControlSend("Unbenannt - Editor", "", "[CLASS:Edit; INSTANCE:1]", $sIpTmp & @CRLF)
Else
ControlSend("Unbenannt - Editor", "", "[CLASS:Edit; INSTANCE:1]", "Die generierte IP: " & $sIpTmp & " existiert schon." & @CRLF)
EndIf
WEndFunc quit()
[/autoit]
Exit
EndFunc -
Gute Frage. Nur kann man die Antwort leider nur erraten...
Ich schätze mal du möchtest ein Event auf ein GuiControl legen.
[autoit]
Dazu musst du den GuiOnEventMode verwenden und dann gehts mitGuiCtrlSetOnEvent
[/autoit]
Sie dir doch einfach mal die hilfe dazu an
Einfach alles zu GUI-Referenz -
Du überprüfst nicht ob es sich um ein Array handelt. D.h. es ist eben nicht unbedingt ein ordentliches Array
Wenn du Arraysearch auf eine normale Variable anwendest bekommst du auch j = -1.
D.h. statt zu prüfen ob j = -1 solltest du lieber prüfen ob @error = 6 ist.
@error = 6 Steht für Suchstring nicht gefunden (Siehe Hilfe)
Ein Array kann maximal 16 777 216 Indizies haben.
Also geht das gerade noch:
Dim $aArray[4096][4096]
Mehr geht aber nicht -
Du brauchst ein Array in dem du alle IP's speicherst.
einfach so:
[autoit]
[/autoit]
Dim $aIP[1]
_ArrayAdd($aIP, $ip)Und dann musst du vor dem Senden von dem ganzen Text überprüfen ob die IP schon einmal vorkam
[autoit]
so z.B.
[/autoit]
_ArraySearch($aIP, $ip)
if @error Then
send(...)
Else
;ip kam schon vor
EndIf -
Beispiel ist in der Hilfe!!!
-
Läuft auch dein Apache?
-
Sie dir doch mal die Hilfebeispiele an.
[autoit]
Z.B. hier:TrayCreateMenu
[/autoit] -
Gesperrt = Gesperrt
Wenndann musst du sie erst entsperren. Z.B. mit sowas: link
Ansonsten google mal nach gesperrte Dateien freigeben oder Ähnlichem. -
Backup Tools laufen egtl immer unter einem anderen Adminbenutzer.
Das würde ich dir für deinen Fall auch empfehlen, weil die ntuser.dat nicht die einzige gesperrte Datei ist auf die du treffen wirst^^.
Gesperrte Dateien sind "gesperrt" deshalb lassen sie sich nicht öffnen^^
Das hat nichts mit autoit zu tun. Gibt aber für die meisten Daten auch möglichkeiten diese zu entsperren.
Aber wie gesagt, unter nen anderen benutzer laufen lassen und gut is... -
Die generelle maximale Stringlänge ist 2147483647 Byte. Allerdings weiß ich nicht ob die auch für ein Array gelten
-
Autoit hat natürlich für einige Sachen bestimmte grenzen. z.B. kannst du maximal ein Array mit 16 777 216 Indizies erzeugen.
Es gibt auch maximale Stringlängen und so weiter.
An deiner Stelle würde ich alles von autoit in eine Datenbank schreiben lassen und diese dann auswerten.
Oder du überlegst dir was um nicht alles auf einmal in ein Array zu schreiben. Wie gesagt das is egtl nicht sinn und zweck eines Programmes den Ram aufzupumpen oder sonst was. -
Auch wenn ich generell davon abraten würde mehrere Daten in ein Feld zu schreiben.
[autoit]
Aber das kommt drauf an was du damit vorhast^^
Im Prinzip ginge es in diesem speziellen Fall z.B. so:#include <Array.au3>
[/autoit][autoit][/autoit][autoit]
Dim $aAuto[2][2] = [['(auto12)', '(auto34)'], _
['(auto56)', '(auto78)']]_ArrayDisplay($aAuto)
[/autoit][autoit][/autoit][autoit]$aAuto[0][1] = StringReplace($aAuto[0][1], ")", ", auto9)")
[/autoit][autoit][/autoit][autoit]_ArrayDisplay($aAuto)
[/autoit]