Danke Schumi für das Angebot.
Ich habe inzwischen die zur Installation heruntergeladenen Updates (deren Insatallation ja dann immer wieder fehlschlug) alle gelöscht. Anschließend habe ich die Dienste wieder aktiviert. Mit dem aktuellen Updatepack scheinen Fehler aus dem letzten Update bereinigt worden zu sein. Das Update konnte ich nun endlich erfolgreich durchziehen.
Ich hoffe, dass das dann auch in Zukunft dabei bleibt. Momentan habe ich also keinen Bedarf an den Dateien, trotzdem Danke.
Beiträge von BugFix
-
-
Soweit mir bekannt ist, ist das in AutoIt implementierte Drag 'n Drop auf Dateien bezogen.
Generell ist Drag 'n Drop mit purem Text eher die Ausnahme und von Microsoft auch hinsichtlich des Einsatzes begrenzt: https://msdn.microsoft.com/de-de/library/ms173816.aspx -
Wie sieht denn so eine AutoIt Callback-Funktion aus?
Hier mal ein ganz primitives Bsp., nicht unbedingt sinnvoll, aber es zeigt, wie Callbackfunktionen arbeiten.
Eine Callbackfunktion ist eine Rückruf-Funktion.
Sie wird einer anderen Funktion als Parameter mitgegeben und von dieser bei Vorliegen entsprechender Bedingungen aufgerufen.Spoiler anzeigen
[autoit]$sTest = "AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting."
[/autoit] [autoit][/autoit] [autoit]
$sSearch = "designed"$ret = _SomeFunc($sTest, $sSearch, _MyCallback)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('"' & $sSearch & '" ist Wort Nummer: ' & $ret & @CRLF); die Funktion durchsucht wortweise einen String nach einem Suchbegriff. Bedingung zum Aufruf der Callbackfunktion ist, dass das zu prüfende Wort mehr als 5 Buchstaben hat.
[/autoit] [autoit][/autoit] [autoit]
; Zurückgegeben wird, das wievielte Wort der Suchbegriff ist, bei nicht finden '0'.
Func _SomeFunc($sStr, $sFind, $cb_func)
Local $iLen, $aWords = StringSplit($sStr, ' ')
For $i = 1 To $aWords[0]
$iLen = StringLen($aWords[$i])
If $iLen > 5 And $cb_func($aWords[$i], $sFind) Then Return $i
Next
Return 0
EndFunc; Die Callback-Funktion beeinflusst die aufrufende Funktion. Bei Erreichen einer Bedingung wird die aufrufende Funktion vorzeitig beendet.
[/autoit]
; Dabei ist die Callback-Funktion neutral, da sie in der Deklaration selbst nicht weiß, worauf sie reagiert. Diese Angaben erhält sie erst durch die Aufruf-Funktion.
Func _MyCallback($sParam, $sCheckVal)
Local $fRet = False
If $sParam = $sCheckVal Then $fRet = True
Return $fRet
EndFunc -
Wenn ich mich recht erinnere, können auch mehrere Instanzen des IE parallel laufen (in einer PID). Da hatten wir mal Funktionen zu gebastelt (GetWndByPID oder so), quäle mal die SuFu. Da kannst du dann alle existierenden IE-Fenster abfragen und verstecken.
-
Verwende dafür besser RegEx. Da kannst du Hex-, Dezimal- oder Unicodewert für die Suche angeben. Sollte etwas komfortabler sein.
-
OK, eh man da jetzt ein riesen Konstrukt baut um Scrollen abzufragen und mit ControlMove die Labels zu bewegen schlage ich dir eine m.M. nach simplere Lösung vor. Setze die Label auf ein eigenes Child, welches ein-fadet, wenn du mit der Maus über den linken Rand der GUI hinaus fährst. Oder du zeigst das Label-Child statisch am linken/rechten Rand deiner Gui an.
-
Hi,
ich habe mal ein wenig mit AutoItObject gespielt und mir vorgestellt, wie AutoIt-Syntax als AutoIt-Object aussehen könnte. Dazu habe ich die String-Bibliothek kpl. in einem Objekt gewrappt.
Jede String-Funktion ist hier als Methode abgebildet. Dabei habe ich unterschieden in "aktive Methoden", welche Manipulationen am String vornehmen, und "passive Methoden", welche Auswertungen vornehmen.
Zusätzlich wird der String, der dem Objekt erstmalig zugewiesen wird als Initialstring unveränderbar im Objekt gespeichert. Auf diesen kann wahlweise zugegriffen werden, solange das Objekt existiert. Standardmäßig verwenden jedoch alle Methoden .Val und speichern dort auch die Veränderungen. Somit ist gewährleistet, dass bei verketteten Methoden, jede Methode auf das Ergebnis der vorigen zugreift.
(Über Sinn oder Unsinn dieses Projektes wollen wir hier aber nicht reden. Es geht einzig um die Möglichkeiten. - Auch wenn ich den Eindruck habe, dass kaum jemand ausser MG und mir sich mit AutoIt-Object befasst.
)Und hier mal ein Bsp. mit einigen Funktionen in der Anwendung.
Beispiel
AutoIt
Alles anzeigen#include "oopAU3.au3" ; für ein besseres Handling lege ich die Funktion zum Erstellen von Stringobjekten auf eine kurze Variable $oS = _objString_Create ; Der String kann direkt als Parameter beim Erstellen des Objektes übergeben werden oder später an .Value gesetzt werden ; Im Objekt wird der Initialwert unveränderbar gespeichert. Mit Flag "$iUseInit=$_INIT" kann jede Methode angewiesen werden den Initialstring zu verwenden. ; Das Ergebnis einer (aktiven) Methode wird in .Val gespeichert. Dieser Wert wird als Standard ("$iUseInit=$_VAL") bei weiteren Aufrufen verwendet. $oA = $oS('Hallo Welt!') ; String-Objekt erstellen und String initialisieren $oB = $oS() ; leeres String-Objekt erstellen $oB.Val = 'Das ist ein String.' ; Initialstring zuweisen (nur bei erstmaliger Zuweisung wird der Initialstring gesetzt) ; oder ;~ $oB.Val('Das ist ein String.' ) ; Um den String, der vom Objekt vekörpert wird, auszugeben wird auf .Val zugegriffen ConsoleWrite( $oA.Val & @CRLF ) ConsoleWrite( $oB.Val & @CRLF & @CRLF ) ; Soll nur das Ergebnis einer Stringmanipulation erstellt werden, ohne dass später weitere Operationen an diesem String durchgeführt werden, ; dann ist es nicht zwingend erforderlich die Objektvariable aufzufangen, ich kann auch gleich das Ergebnis der Operation zurückgeben ; Bsp. von "[ Text in eckigen Klammern ]" sollen die Klammern abgetrennt werden ConsoleWrite( $oS("[ Text in eckigen Klammern ]").Trim(1).Trim(-1).Val & @CRLF ) ; Die Methode .Trim() umfasst: StringTrimLeft(), StringTrimRight(), StringStripWS() ; Positive Zahlen schneiden von links, negative von rechts ab. Zusätzlich ist das Flag für StringStripWS() verfügbar. ; Es kann also in einem Rutsch abgetrennt und evtl. Leerzeichen vorn und hinten mit abgeschnitten werden: ConsoleWrite( $oS("[ Text in eckigen Klammern ]").Trim(1).Trim(-1, 3).Val & @CRLF & @CRLF ) ; Will ich Methoden verketten ist es erforderlich, dass ich auf ein Objekt zugreife. Die Methoden müssen also das Objekt selbst zurückliefern. ; Wenn ich mit dem Initialwert mehrfach arbeiten möchten rufe ich die Methode mit $_INIT als letztem Parameter auf. ; Bsp.: Jeder Buchstabe des Strings wird einmal als Großbuchstabe ausgegeben $oT = $oS('hallo autoit') For $i = 1 To $oT.Len ConsoleWrite( $oT.Get($i-1, $_INIT).Val & $oT.Mid($i, 1, $_INIT).Upper.Val & $oT.Mid($i+1, -1, $_INIT).Val & @LF ) Next ConsoleWrite( @CRLF ) ; so haben wir Zugriff auf den Initialstring - aber nur lesend ConsoleWrite( 'Initialstring: ' & $oT._Init & @CRLF & @CRLF ) ; noch ein paar Funktionsbeispiele ; .Get() umfasst StringLeft(), StringRight() ConsoleWrite( '"Hallo Welt!" -- 5 Zeichen von links: ' & $oA.Get(5).Val & @CRLF ) ConsoleWrite( '"Hallo Welt!" -- 5 Zeichen von rechts: ' & $oA.Get(-5, $_INIT).Val & @CRLF & @CRLF ) Local $a[6] = [72,65,76,76,79,33] ConsoleWrite( 'FromASCIIArray: ' & $oS().FromASCIIArray($a).Val & @LF & @LF ) _ArrayDisplay( ($oS('Hallo Welt!').ToASCIIArray.Val), 'StringToASCIIArray' ) ConsoleWrite( $oS('HALLO').Lower.Val & @CRLF & @CRLF ) ConsoleWrite( $oS('hallo').Upper.Val & @CRLF & @CRLF ) ConsoleWrite( $oS('hallo').RegExpReplace('l', 'm').Replace('o', 'er').Initial.Val & @CRLF & @CRLF ) ; ->> Hammer ConsoleWrite( $oS('hallo hecht!').Replace('h', 'H', 2).Val & @CRLF & @CRLF ) ConsoleWrite( $oS('Lager').Reverse.Initial.Val & @CRLF & @CRLF ) ; umdrehen und neuen Anfangsbuchstaben groß, den Rest klein $oC = $oS('AutoIt').Split ConsoleWrite( $oC.Val[1] & @CRLF ) ConsoleWrite( $oC.Val[2] & @CRLF ) ConsoleWrite( $oC.Val[3] & @CRLF ) ConsoleWrite( $oC.Val[4] & @CRLF ) ConsoleWrite( $oC.Val[5] & @CRLF ) ConsoleWrite( $oC.Val[6] & @CRLF & @CRLF ) ConsoleWrite( $oS(1.15).Format('%.3f').Val & @CRLF ) ; ---------------------------------------------------------------------------------------- ; Das angenehme bei OOP-Notation ist die gute Lesbarkeit und Verkettbarkeit von Methoden. ; Hier mal im direkten Vergleich, der Dateiname (ohne Endung) soll abgefragt werden. $string = "C:\Ordner_1.0\Ordner_1.1\Datei.abc 10.01.2015 18:50:09" ; >> AutoIt-Syntax (hier versuche ich gar nicht erst, einen Einzeiler zu produzieren) $path = StringLeft($string, StringInStr($string,' ',0,-2)) $file_name_ext = StringTrimLeft($path,StringInStr($path,'\',0,-1)) $file_name = StringTrimRight($file_name_ext,StringLen($file_name_ext)-StringInStr($file_name_ext,'.',0,-1)+1) ConsoleWrite("file_name (AutoIt-Syntax): " & $file_name & @LF & @LF) ; >> Objekt-Syntax With $oS($string) ConsoleWrite("file_name (Objekt-Syntax): " & .Get(.InStr(' ',0,-2)).Trim(.InStr('\',0,-1)).Get(.InStr('.')-1).Val & @LF) EndWith -
Ist das nicht etwas umständlich? Ich arbeite nicht mit dem IE - aber alle anderen Browser, die ich kenne, bieten die Möglichkeiten offene Tabs als Gruppe abzuspeichern. Falls das der IE nicht kann, verwende doch einen anderen Browser.
-
Wesentliche Grundlage um helfen zu können ist das Skript. Meine Glaskugel verrät mir nicht, wie du das aufgebaut hast.
-
Hi,
mir ist folgender Fehler in der Beschreibung zu StringInStr() aufgefallen:
StringInStr ( "string", "substring" [, casesense = 0 [, occurrence = 1 [, start = 1 [, count]]]] )
"start" wird angegeben mit dem Standardwert "1". Das ist aber völliger Quatsch. "start" ist ein von "occurence" abhängiger Parameter und der ist nur dann "1", wenn "occurence" >= 0 ist. Bei negativem "occurence" ist "start" mit StringLen() vorbelegt.
Hat mich fast einen ganzen Tag gekostet, diesen Fehler zu lokalisieren. Ich hatte an eine Auswertefunktion verschiedenste Abfragen übergeben, die einen String unterschiedlich analysieren. Dazu hatte ich alle optionalen Parameter, wie in der Hilfe beschrieben, vorbelegt. Unerklärlicherweise kam in der Auswertung mal Blödsinn raus und mal nicht. Beim Debuggen konnte ich dann feststellen, dass nur bei negativer "occurence" die Funktion versagte. - Nun weiss ich warum.
Hier mal die gekürzte Funktion mit dem Fehler:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$s = "Irgendein String zum Auswerten."; Original, Ausgabe wie erwartet, Wert für 'start' wird nicht übergeben
[/autoit] [autoit][/autoit] [autoit]
$pos = StringInStr($s, ' ', 0, -2)
ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $pos --> " & $pos & @LF & "!@ " & @TAB & "#Error: " & @error & @LF); hier der verpackte Aufruf
[/autoit] [autoit][/autoit] [autoit]
Local $a[] = ["Irgendein String zum Auswerten."]
$pos = _Analyse(1, $a, 0, ' ', 0, -2)
ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $pos --> " & $pos & @LF & "!@ " & @TAB & "#Error: " & @error & @LF)Func _Analyse($iModus, ByRef $aVal, $iIndex, $sSubStr, $iCasesense=0, $iOccurrence=1, $iStart=1, $iCount=-1)
[/autoit] [autoit][/autoit] [autoit]
Local $sString = $aVal[$iIndex]
$iCount = ($iCount = -1) ? StringLen($sString) - $iStart : $iCountLocal $result = StringInStr($s, $sSubStr, $iCasesense, $iOccurrence, $iStart, $iCount)
[/autoit] [autoit][/autoit] [autoit]
Return SetError(@error,0,$result) ; kein Fehler aber Rückgabe "0" (=Substring nicht gefunden);~ $iStart = ($iOccurrence < 0) ? StringLen($sString) : $iStart
[/autoit]
;~ Local $result = StringInStr($s, $sSubStr, $iCasesense, $iOccurrence, $iStart, $iCount) ; so funktioniert es
;~ Return SetError(@error,0,$result)
EndFunc -
Als erstes sollte man sich überlegen, was man sichern möchte.
Den Gedanken sollte man deshalb schon in die Gestaltung der Partitionen einbeziehen. Ich bevorzuge dabei:
- eine Partition für System und Programme
- eine Partition für alle anfallenden Daten (deshalb zwingend den USER-Pfad auf diese Partition verlegen)Nach der Installation des Systems mit allen aktuellen Treibern und Updates, dessen Aktivierung und vor der Installation zusätzlicher Software erstelle ich ein Image dieser Partition (ich verwende Acronis TrueImage, auch 10 Jahre alte Images von Vor-Vor-Vorversionen lassen sich problemlos wieder installieren).
Dann werden die benötigten Programme installiert und ein erneutes Komplett-Image wird erstellt. Wenn ein neues Programm hinzukommt oder eines gelöscht wird, erstelle ich ein inkrementelles Image.
Für die Datenpartition geht es ähnlich. Nur wird hier nach Zeitintervallen gesichert. Welchen Rhytmus man dabei verwendet, liegt sicher auch in der Häufigkeit, wie die Daten sich ändern. Wobei ich hier etwa einmal im Monat ein kpl. Image erstelle und bei den Zwischensicherungen werden inkrementelle Images erstellt.Nun die Frage: Wo die Sicherungen speichern?
Strenggenommen gehört eine Sicherung niemals auf ein Medium, dass durch mechanische Defekte oder Defekte eines integrierten Controllers ausfallen kann.
Da der Preis für Festplatten inzwischen kein Problem mehr ist, werden diese immer wieder gern als Ablagemedium genutzt. Jedoch ist kein Medium so anfällig, wie eine HDD. Die Lebensdauer heutiger Festplatten ist im Vergleich zu denen vor 10 Jahren deutlich kürzer. Das liegt sicher an optimiertem (und somit minimiertem) materialeinsatz, höheren Drehzahlen um die Zugriffszeiten zu verkürzen und somit konkurrenzfähig zu bleiben etc. pp.
Es gibt natürlich auch Festplatten, die auf Sicherheit gestrickt sind, (relativ) langsam drehen und somit auch weiterhin große Zuverlässigkeit bieten. Die kosten dann aber dann auch einen Schein mehr.
Stecke ich eine Festplatte nur an, um die Sicherung aufzuspielen und lege sie danach beiseite, sollte allerdings schon ein recht grosses Maß an Sicherheit erreicht sein. Zumal ja im schlimmsten Fall auch von einer mechanisch defekten Platte Daten durchaus gerettet werden können (wenn auch teuer).
Möchte man Daten auf einem NAS parken gilt auch hier: Das ist keine Sicherung. Man sollte ausserdem genau drauf achten, was für ein NAS man verwendet. Es sollte die Möglichkeit bieten, dass ich die Daten der Platte auch bei defektem Controller des NAS auslesen kann. Und somit ist WD von vornherein aussen vor (zumindest mit dem Live Book). Dort wird ein eigenes Datenformat verwendet, das man auf herkömmliche Art und Weise nicht lesen kann.
Die größte Sicherheit bieten immer noch Sicherungen auf DVD oder auch MOD. MOD kann man sogar nach 20 Jahren noch lesen (habe gerade mal in eine Sicherung von 1994 reingeschaut, alles lesbar), bei DVD liegt die Schmerzgrenze wohl bei 10 Jahren.
Cloud ist als Möglichkeit der Mehrfachablage zu betrachten um mal schnell Zugriff von überall zu gewährleisten. Sicherungswürdige Daten haben aber dort gar nichts verloren. Ein Speicherort, über den man keine physische Hoheit hat ist perse ein Widerspruch zum Thema Datensicherheit. -
nur über den Anrufaktivierungscomputer wieder aktivieren konnte
Aktivierung ist im Normalfall immer über INet möglich. Die Erstprüfung auf (überhaupt) gültigen Schlüssel erledigt Windows ja selbst mit der GenuineCheck-Software. Erst die Prüfung ob Schlüssel von M$ nicht auf dem Index wird bei der Aktivierungsstelle vorgenommen.
Jedenfalls hätte ich mir das persönliche Gespräch mit dem Aktivierungsheini knicken können. Mehr Auskunft als vom Computer bekommt man von dem auch nicht. -
Ich habe sooooo einen Hals!
Laptop (gekauft Januar 20011 mit vorinstalliertem Win 7 Pro), Mainboard defekt - Ersatz gefunden und läuft wieder.
Soweit, sogut. Jetzt das AAAber: Wesentliche Komponente gewechselt - Produkt muss erneut aktiviert werden.
Kein Problem - Produkt-Key steht ja drauf auf dem Lizenzaufkleber am Boden (und ist auch identisch mit dem Wert in der Registry).
Also auf Aktivierungslink geklickt: Dieser Lizenzschlüssel ist ungültig. Häää??!
OK, dann den Lizenzeintrag kpl. gelöscht und slui erneut aufgerufen. Dasselbe in grün.
Aktivierungshotline angerufen: "Das interessiert uns nicht, wir prüfen nur ob die Schlüssel gültig sind." -- Naa prima, so liebe ich Kundendienst!
Dann noch der Ratschlag, ich möge mich an den Händler wenden, schließlich stammt die Lizenz von ihm - somit sein Problem.
Ob soviel Fürsorge bin ich vor Rührung fast in Tränen ausgebrochen. Habe mich nun auch an den Händler gewandt, mal sehen, was ich von dort als Antwort bekomme.Grundsätzlich stellt sich natürlich die Frage, wozu man eine Lizenz kauft, wenn diese irgendwann auf den Index gesetzt wird.
Leider läuft auf unseren Firmen Rechnern Software, die Windoof erfordert. Ansonsten wäre spätestens jetzt ein guter Punkt um dem Chef mal die Vorzüge freier OS unter die Nase zu reiben.
-
hat WSUS-Offline was gebracht?
NEIN!
Was ist das für seltsame Software? Habe es auf 3 Laptop getestet:Zitat
Warning: Integrity database ..\client\md\hashes-win-glb.txt not found.
Determining static update urls for win glb...
Extracting Microsoft's update catalog file package.xml...
10:11:45,77 - Determining superseded updates (please be patient, this will take awhile)...Und so sieht das Display auch nach 5 Stunden noch aus. Hab keine Ahnung was die Software an diesem Punkt so treibt - auf keinen Fall sucht sie irgendwas im Internet zusammen, die INet-Aktivität ist nämlich Null!
Man kann dann nur noch abbrechen.
-
Ich würde besser nur ein Array verwenden für Checkboxen und zugehörige Bilder.
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 615, 437, 391, 262)Local $Checkbox[2][2] = [ _
[/autoit] [autoit][/autoit] [autoit]
[GUICtrlCreateCheckbox("Bild 1", 312, 144, 97, 17), @DesktopDir & "\Unbenannt.jpg"], _
[GUICtrlCreateCheckbox("Bild 2", 312, 176, 79, 25), @DesktopDir & "\lol.jpg"]_
]$Button1 = GUICtrlCreateButton("Start", 288, 264, 75, 25)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW)While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
For $i = 0 To UBound($Checkbox) -1
If BitAND(GUICtrlRead($Checkbox[$i][0]), $GUI_CHECKED) Then ShellExecute($Checkbox[$i][1])
Next
EndSwitch
WEnd -
[autoit]Adressfeld des Internet Explorers
_IEPropertyGet($oIE, "locationurl")
[/autoit] -
.ParagraphFormat.Alignment = 1
Kopierst du Code nur oder liest du auch mal durch?! Aus meiner Funktion: ; iAlign: 0=links, 1=center, 2=rechtsoRng.Fields.Add oRng, wdFieldEmpty, , False
Was wird denn von der Funktion .Add dort erwartet? Die Parameter findest du in MSDN. Wenn die Funktion intern einen Standardwert vorbelegt kannst du das in AutoIt mit Default belegen. Denk dran, dass beim Funktionsaufruf in AutoIt alle zur Funktion gehörenden Parameter zu übergeben sind, auch wenn diese in VBA optional sein sollten. -
Verstehe deine Aufgabenstellung nicht. Du gibst die Schritte vor - somit ist doch jeder gezwungen diesen Alghoritmus zu nehmen. Woher soll da ein eigener Algorithmus kommen?
Und "Die Frage ist nun, wie viele Schritte sind nun mindestens notwendig, um dies zu erreichen?" halte ich für falsch herum gefragt. Wichtiger wäre doch zu wissen, nach wieviel Sortierschritten ich sicher sein kann, dass der String sortiert ist - also: maximal.
-
Warum probierst du es nicht selbst? Die Lösung findest du in meiner Funktion (.ParagraphFormat.Alignment = 1 auf eine Selection anwenden)
Also schau, wie du die von dir eingefügte Fußzeile selektierst und wende dann das obige an. -
Vielleicht kann man das Pattern auch noch effizienter gestalten.
Zumindest etwas besser lesbar. Das "-" brauchst du nicht maskieren und statt der horizontalen Spaces kannst du auch das Leerzeichen selbst verwenden, da dieses ja eindeutig ist.
[autoit]StringRegExpReplace($s1 & ' -- ' & $s2, '^( -- )|( -- )$', '')
[/autoit]