Beiträge von BigRox

    Moombas

    Ich schreibe Registryeinträge mit Regwrite, dort wird @error auf einen Wert gesetzt, der Rückschlüsse zulässt (siehe dazu die Hilfe).

    Außerdem prüfe ich ALLE Registryeinträge auf ihre erwarteten Werte, wo ich eine Änderung vorgenommen habe.

    Da ich z.B. die Einstellungen von MS-Office 2013 in die Registry importieren will und diese Datei über 100 Werte usw. umfasst,

    würde das mit dem jeden Wert testen, wohl ein ganz schön großer Aufwand werden.


    Das mit dem Auswerten der Fehlermeldung ist dann wohl schon besser, weil dann übernimmt Windows die ganze Testerei für mich.


    MfG:

    BigRox

    Hallo,

    ich benutze Windows 10 Pro 64-Bit und AutoIt 3.3.14.5.


    Wenn ich eine .reg-Datei mit:

    Run(@WindowsDir & "\explorer.exe Test.reg)

    in die Registry importieren will, erscheint ja erst ein Fenster, mit der Frage, ob man diese Datei importieren will.

    Dieses Fenster bestätige ich mit "Ja" und als nächstes kommt da ein Fenster, mit eine Erfolgsmeldung oder einer Fehlermeldung.

    Jetzt kommt meine Frage.

    Wie kann man erkennen, ob da eine Fehlermeldung oder eine Erfolgsmeldung angezeigt wird?


    Das Fenster-Info ist da anscheinend keine Hilfe, da da kein Fenstertext angezeigt wird.

    Auch mit dem Style oder dem ExStyle geht nichts, da das Fenster mit der Erfolgsmeldung und das Fenster mit der Fehlermeldung die gleichen Daten haben.

    Daher habe ich es auch schon mit "PixelSearch" versucht um das rote Symbol zu erkennen, aber auch das geht nicht.

    Das Fenster scheint nur ein leeres Fenster zu sein, in das erst später der entsprechende Text eingeblendet wird.


    Aber irgendwoher muss Windows doch wissen, was es in diesem leeren Fenster anzeigen soll.

    Zudem erklingt ja auch der entsprechende Sound dazu und dazu muss es ja auch ein entsprechendes Ereignis geben.


    Eventuell kennt einer ein Möglichkeit dieses Fenster auszuwerten (oder die dafür nötige Windows-Message).


    MfG:

    BigRox

    Professor Bernd,

    also, wenn ich dein Vorhaben richtig verstehe, willst du anscheinend ein AutoIt-Script schreiben, was auf jedem Rechner, egal mit welchen Rechten, ausgeführt werden kann und das dir immer die notwendigen Rechte geben soll, damit du in alle Registry-Schlüssel schreiben kannst.


    Also das geht wohl nicht, das würde ja einige Sicherheitsvorkehrungen von Windows unterlaufen.

    Stell dir mal vor, wenn das so einfach per Script gehen würde, wie schnell die Hacker usw. das auch machen würden, um ihren Digitalen Müll auf jedem Rechner zu installieren.


    "PowerRun" ist wohl das maximale, was legal möglich ist und ich vermute, diese Möglichkeit wird auch in vielen Installationsprogrammen genutzt, um das zugehörige Programm, auch auf Rechner mit mindestens als Standard-Admin-Rechten, immer richtig zu installieren.


    Eine andere Möglichkeit wie man sich die Rechte mit einem AutoIt-Script maximal erhöhen kann, wird dir hier im Forum wohl auch keiner posten, ansonsten würde der wohl ganz schnell hier aus dem Forum fliegen.


    MfG:

    BigRox

    Professor Bernd,

    um die Schlüssel in die Registry zu schreiben, verwende ich nicht den "RegWrite"-Befehl von AutoIt.

    Ich schreibe alle Schlüssel usw. in eine "reg"-Datei und importiere die Datei dann mit:

    "Run(@WindowsDir & "\explorer.exe " & $_sRegistryFile)"


    Der große Vorteil dabei ist, dass man sofort sieht, wenn etwas nicht funktioniert hat.

    Aber man kann die beiden Fenster von RegEdit auch automatisch von AutoIt schließen lassen.


    Für das Problem mit den Admin-Berechtigungen, gibt es z.B. das Programm

    "PowerRun" vn sordum.org (Download Link z.B. bei Deskmodder.de


    MfG:

    BigRox

    Professor Bernd,

    hier nun die Ergebnisse der neuen Tests.

    Als BS verwende ich wiederum ein ganz jungfräuliches Windows10 Pro 64bit.

    Darauf habe ich nur die Dateien aus der "pspad505en.zip" kopiert, also die portable Version von PSPad.

    In PSPad habe ich keinerlei Einstellungen usw. gemacht.

    Anschließend habe ich folgende vier Dateien in die Registry importiert:

    au3file HKLM.txt

    au3file HKCU.txt

    .au3 HKCU.txt

    .au3 HKLM.txt


    Dies ergibt im Schlüssel "HKCR" folgendes (da habe ich aber nur mal nachgesehen, was da danach so steht):

    au3file HKCR.txt

    .au3 HKCR.txt


    Danach kann ich sofort au3-Dateien per Doppelklick mit PSPad öffnen.


    Dabei gilt, dass HKCU Keys die Keys aus HKLM überschreiben.

    Das wir z.B. dafür gebraucht das neue Benutzer z.B. txt-Dateien Standardmäßig mit Notepad öffnen können und du kannst txt-Dateien aber mit PSPad öffnen.

    Es werden KEINE Admin-Rechte benötigt, um Einträge zu schreiben.

    Also ich kann die Einträge problemlos ohne UAC-Meldung oder Admin-Rechte usw. in "HKLM\Software\Classes" schreiben.

    Das geht auf jedem meiner vier Rechner und auch sofort bei einem absolut jungfräulichen Windows 10.


    MfG:

    BigRox

    @Proffesor Bernd,

    Ich vermute mal Windows 10? Das würde mit "Einstellungen | Apps | Standard-Apps | Standard-Apps nach Dateityp auswählen" zusammen passen. :saint:

    Da vermutest du völlig richtig.


    Deine Schlüssel beziehen sich alle auf AutoIt und SciTE, aber PSPad4AutoIt3 soll voll portabel werden und somit unabhängig von anderen Programmen und deren Registry-Einträgen. Die von dir genannten Schlüssel würden PSPad NICHT für .au3 Dateien registrieren, wenn AutoIt und SciTE NICHT installiert sind. 8o

    Wenn ich das richtig verstehe, willst du AutoIt komplett in PSPad integrieren, sodass du nur noch "PSPad4AutoIt3" auf einem anderen Rechner ausführen musst und dann ein komplettes AutoIt mit PSPad als Editor hast, und das ganze soll ohne Installation gehen.

    Dann darfst du aber nichts in die Registry schreiben, sonst ist ja nichts mit portabel, oder nach jedem Beenden von "PSPad4AutoI3" ist erstmal groß Reinemachen angesagt.


    Somit sind für uns nur HKEY_CURRENT_USER und HKEY_LOCAL_MACHINE

    Sonderbarerweise wirkt sich bei mir jede Änderung in "HKCR" sofort auch auf "HKCU..." und "HKLM..." aus.

    So viel ich weiß, stehen in "HKCU..." die Schlüssel für den momentan angemeldeten User und in "HKLM..." die Schlüsse für alle User.

    Je nachdem welcher User angemeldet wird, werden die Schlüssel aus "HKCU..." und "HKLM..." in "HKCR" zusammengeführt und das was da steht, wird von allen Programmen ausgewertet.

    Man könnt eigentlich auch ganz auf "HKCR" verzichten und nur die entsprechenden Schlüssel in "HKCU..." und "HKLM..." auswerten, aber viele Programme bestehen nun mal auf "HKCR" und somit muss "HKCR" wegen der Kompatibilität bestehen bleiben.


    MfG:

    BigRox

    Hallo Professor Bernd,

    hier die neusten Ergebnisse der letzten Tests.

    Ich habe auf einem neuen BS zuerst die "autoit-v3-setup_3.3.14.5.exe"-Datei, und danach die "SciTE4AutoIt3_4.1.0.exe" installiert.


    Danach habe ich die Datei "pspad505_setup.exe" installiert.

    Bei PSPad habe ich keinerlei Einstellungen geändert.


    Dann habe ich einen Registry-Schlüssel folgendermaßen geändert:

    AutoIt3Script ganz neu.txt

    (die Dateiendung habe ich auf txt geändert, da das Forum reg-Dateien nicht mag).


    Als letztes musste ich noch den .au3-Dateityp unter: "Einstellungen | Apps | Standard-Apps | Standard-Apps nach Dateityp auswählen"

    dem "Text Editor" (das ist PSPad) zuordnen. Als zugeordnetes Standardprogramm wird zwar schon "Text Editor" angezeigt, aber der "Text Editor" ist in Wirklichkeit nicht zugeordnet (das ist eben auch einer der vielen Microsoft-Effekte?().

    Wenn man das nicht macht, so erscheint die "Öffnen mit"-Frage.


    Danach öffnet PSPad au3-Dateien auch sofort per Doppelklick.


    MfG:

    BigRox

    Hallo Professor Bernd,

    hier meine ersten Ergebnisse.

    Auf meinem Rechner (Windows 10 Pro 64Bit) ist Autoit, SciTe4AutoIt3 und PSPad installiert.

    Ich habe in PSPad als Dateityp der mit PSPad geöffnet werden soll ".au3" eingegeben.

    Dadurch fügt PSPad in seiner ini-Datei, im Abschnitt "[Registered FileTypes]"

    .au3 hinzu.

    Das reicht bei mir schon, nach einem Doppelklick auf eine .au3, legt PSPad sofort los und öffnet diese Datei.

    Die anderen notwendigen Registry-Schlüssel legt AutoIt und SciTe schon an.

    Zum ersten währe da der "HKCU\.au3", mit seinem Standardwert "au3file" (dieser Schlüssel ist für au3-Dateien zuständig.

    Dann währe da natürlich auch der Schlüssel "HKCU\au3file". Da steht das anzuzeigende Icon (Defaulticon) und das gewünscht Programm

    (Shell | Open | command).

    Wenn man in dem "Open"-Schlüssel als Standardwert z.B. "Mit PSPad öffnen" einträgt, so erscheint dies im Kontextmenü.

    Im Schlüssel "Shell" steht als Standardwert der Schlüssel der bei einem Doppelklick ausgewertet werden soll.

    Wenn es z.B. unter "Shell" mehrere Unterschlüssel gäbe (open, edit, print...) so gibt der Standardwert an, welscher Unterschlüssel für die Aktion bei einem Doppelklick zuständig ist (die Aktion wird auch fett im Kontextmenü angezeigt.


    So jetzt probiere ich das ganz auch noch mal auf einem anderen Rechner, mit ganz neuer Installation.


    MfG:

    BigRox

    Bist du sicher, dass dieser Einträg benötigt wird, um AU3 Dateien per Doppelklick zu öffnen?

    Hallo,

    das ist so ein Fall, bei dem es komischerweise auch ohne "UserChoice" geht (daher die Vermutung mit der gut versteckten "WhiteList"....)

    Da ich auch PSPad auf meinem Rechner habe, versuche ich mal, ob ich .au3-Dateien auch ohne diesen Schlüssel, auf PSPad registriert bekomme.

    Ich vermute aber schon jetzt, das es nicht geht:(.


    Microsoft hat hier definitiv Hürden eingebaut, die es so in früheren Windows Versionen nicht gab.

    So ist es. Microsoft versucht einem die Sache so schwer zu machen, damit möglichst viele gar nicht versuchen, ein anderes (besseres) Programm einzusetzen.

    Und das schlimmste ist, bei der nächsten Windows-Version, kann alles mal wieder ganz anders sein, damit die bisherigen bekannten Tricks nicht mehr funktionieren.

    Das wird dann wohl irgendwann dazu führen, dass Microsoft das ganze mit den Dateizuordnungen neu schreiben muss, weil sie selber nicht mehr durchblicken:D(das geht irgendwann wie mit WindowsXP, da hat man sich ja auch von einigen "Altlasten" verabschieden müssen, weil es vor lauter Ausnahmen usw. nicht mehr anders ging).

    Aber auch das Setzen des Standard Browsers scheint nicht ganz so simpel zu sein. Firefox öffnet dafür einfach den Dialog von Windows in dem die Standard Apps festgelegt werden können.

    Das Auswählen ist leider nicht das einzige Problem.

    Versuch mal ein Programm in die Listen zur Auswahl zu bekommen. Ich habe es mal mit Opera-Mail gemacht, dass war vielleicht ein Akt.

    Vielleicht hilft folgendes: SciTE scheint das Registrieren von .au3 Dateien ja zu beherschen. Ich könnte auf einem Test-PC ein Windows neu aufsetzen, sodass dort noch nie ein Programm für .au3 und .ppr registriert war. Einen RegShot erstellen, SciTee installieren, zweiten RegShot machen und Einträge ansehen. - Mal sehen. :/

    Das habe ich auch schon mal ausprobiert, es hat nichts gebracht.

    Aber ein Filevergleich könnte etwas bringen.



    MfG:

    BigRox

    Hallo Professor Bernd,

    du kannst unter Windows 10 nicht einfach mit einigen Registry-Einträge, Dateitypen mit einem Programm verknüpfen.

    Erst wenn man den Dateityp unter: "Einstellungen | Apps | Standard-Apps | Standard-Apps nach Dateityp auswählen" manuell auswählt, wird der

    Registry-Schlüssel:

    "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.au3\UserChoice"

    mit dem Eintrag "Hash" erstellt (den Schlüssel kann man zwar erstellen aber den Wert nicht).

    Den Wert für "Hash" kann Windows nur selber erstellen, da der Algorithmus dafür von Microsoft geheim gehalten wird.

    Das ist ein Sicherheitsfeature von Windows 10, damit man die Dateizuordnungen nicht einfach per Script o.ä. ändern kann.

    (Ich habe leider bis heute nicht rausbekommen, warum es gelegentlich auch ohne den "UserChoice"- Schlüssel geht, ich vermute dass es irgendwo eine gut versteckte und verschlüsselte "White List" gibt).


    Daher verwende ich in meinen Scripten, an den entsprechenden Stellen, diese Funktion um Dateitypen die ich zuvor mit der Funktion aus Post #2 in die Registry eingetragen habe, manuell zuzuordnen (das ist zwar etwas umständlich, aber es geht damit zuverlässig):

    _DateitypZuordnen.au3


    MfG:

    BigRox

    Hallo Professor Bernd,

    ich habe auch schon einiges probiert, um mal dahinterzukommen, wie das geht.

    Dabei hatte ich immer irgendwie das Gefühl, dass die von Microsoft da selber nicht mehr so ganz durchblicken.

    Die versuchen immer wieder die Registrierungen ihrer eigenen Programme (z.B. MS-Edge...) wiederherzustellen und dadurch wird das ganze wohl auch immer komplizierter (der Dateityp "pdf" ist da z.B. so ein Fall).




    MfG:

    BigRox

    Hallo,

    ich verwende als Betriebssystem Windows 10 Pro 19052.804 64-Bit und als Virenscanner, den im BS enthaltenen Defender.

    Am Anfang hatte ich auch andauernd das Problem, dass mir der Defender immer wieder einige kompilierten EXE "entsorgt" hat, weil er sie fälschlicherweise für Viren gehalten hat.


    Nach einigen Versuchen und Internetrecherchen, habe ich mal den "Cloudbasierten Schutz" abgestellt und seitdem ist Ruhe.

    Zwar soll der "Cloudbasierte Schutz" die Erkennungsrate steigern, aber leider steigert er auch die Falschmeldungen und lieber eine etwas geringere Erkennungsrate, als ewig fälschlicherweise "entsorgte" Dateien.


    MfG:

    BigRox

    Hallo water,

    nun habe ich das mal ausprobiert.

    Zuerst:

    Danke es funktioniert:thumbup:


    Aber irgendwie verstehe ich nicht, wie das ganze eigentlich funktioniert.

    Könntest du mir das mal etwas genauer erklären?

    Wozu dient z.B die Zeile: "Sleep(@AutoItPID * 10)"?


    Ein Problem habe ich auch noch.

    Das Programm, welches ich so aufrufe, zeigt mir u.a. nach dem erfolgreicher Aktion ein Fenster zur Info an.

    Aber es wird immer nur miniert gestartet, sodass ich es jedesmal erst normal anzeigen lassen muss um das Fenster zu sehen.

    Es müsste also normal starten und nicht sofort im Hintergrund verschwinden.

    Nur um das Problem selber zu lösen müsste ich das ganze zuerst mal verstehen (Wo wird z.B. mein Programm aufgerufen).


    MfG:

    BigRox

    Hallo,

    ich habe da ein kleines Problem mit $CMDLine.


    Man kann ja mit der rechten Maustaste auf eine Datei klicken um damit ein Autoit-Programm zu starten.

    Der entsprechende Dateiname (den man angeklickt hat) wird ja im Array $CMDLine an AutoIt übergeben.

    Soweit funktioniert das prächtig.


    Nur das AutoIt-Programm das ich so aufrufe kann immer nur eine Datei bearbeiten, ich kann aber auch mehrere Dateien auswählen und mit der rechten Maustaste anklicken.

    Dann wird für jede markierte Datei eine neue Instanz von Autoit gestartet und ein anderer Dateinamen übergeben und das gibt dann ein ordentliches Datenchaos.

    Also, das muss ich unbedingt verhindern.

    Gibt es da irgendeine Möglichkeit, wie man feststellen kann, wie viele Programme ausgewählt wurden?


    Wenn ich das mit: "_Singleton("Skript", 1) = 0" probiere, muss ja zu mindestens eine Instanz gestartet sein, aber dann darf diese Instanz nicht sofort komplett ausgeführt werden, sondern sie muss erst testen, ob da noch andere Instanzen aufgerufen werden und wenn da z.B. innerhalb von zwei Sekunden noch andere Aufrufe kommen, muss sie das Skript abbrechen.


    ich sehe da wohl irgendwie vor lauter Bäumen den Wald nicht mehr.

    Hat da einer eine Idee (ich vermute mal, das geht ganz einfach nur komme ich nicht darauf)?

    Hallo,

    mit "Send("{VOLUME_MUTE}") " kann man ja den Sound von Windows 10 ein- oder ausschalten.


    Gibt es auch eine Möglichkeit den momentanen Status des Sounds festzustellen?

    Windows 10 zeigt ja da so ein kleines Fenster mit einem Symbol dafür an, also müsste eigentlich auch irgendwo in den Tiefen von Windows stehen, ob das Kreutz im Fenster angezeigt werden soll oder nicht.

    Mit dem AutoIt Fenster-Info-Tool kommt man anscheinend nicht an die benötigten Infos ran.


    Mfg:

    BigRox

    Hallo,

    Danke für die Hilfe.

    Geht schon:

    AutoIt
    $sTextNeu = StringRegExpReplace($sText, ',(?=[^\[]+\])', '-')

    Hab ich mir doch gedacht, dass so etwas auch mit RegEx geht.

    U.a. für so etwas gibt es die Sache doch.


    MfG:

    BigRox

    Hallo,

    gut lesbaren aber möglichst "elegant" geschrieben Code liebe ich auch und meine persönliche Note sind:

    Eindeutige Variablennamen, eine klare Aufteilung und massenweise Kommentare.


    Gerade das mit den Kommentaren macht zwar viel Arbeit (dadurch wird das Script bei mir mehr als doppelt solang), aber es bringt auch einiges u.a. für spätere Scriptänderungen.

    Gerade bei RegExen schreibe ich immer einen Kommentar dazu.


    Ich versuche auch möglichst unnötige Variablen zu vermeiden, auch deshalb sieht das letzte Script von Musashi ganz interessant aus, da man damit u.a. auch einige Variablen sparen kann.


    MfG:

    BigRox

    Hallo,

    hier mal ein auf die schnelle zusammengebasteltes Script:

    Das Script macht genau das was ich will.

    Der Text kann durch jeden anderen Text ersetzt werden, es geht nur um die Kommas die zwischen [ und ] stehen.

    Die Kommas sollen ausgetauscht werden und alle Kommas die außerhalb der Zeichen [ und ] stehen,

    sollen nicht ausgetauscht werden.


    Nur kann man das nicht auch mit einem RegEx machen?

    Ich könnte mir schon vorstellen, dass diese Sache mit RegEx und ohne viel Scripterei zu machen währe.


    MfG:

    BigRox

    Hallo alpines,

    das können irgendwelche Zeichen sein, nur die Kommas die sich in diesen Zeichen befinden, sollen nicht ersetzt werden.

    Daher kann ich einfaches StingReplacen nicht verwenden.


    Da währe mit _StringBetween() usw. wohl eher was zu machen.

    Dann hätte ich ja den Teil zwischen [ und ] und dann könnte ich StringReplace verwenden.

    Nur wie bekomme ich dann den bearbeiteten String wieder in den Originalstring.


    MfG:

    BigRox