Ein bißchen böse ist manchmal notwendig
Ach?!
Ein bißchen böse ist manchmal notwendig
Ach?!
Hallo Hallmann!
Ich bin ein unerfahrener Programmierer und programmiere nun seit über 30 Jahren in meiner Freizeit als Hobby.
Na dann....willkommen im Club! Bei mir hatte die Programmiererei auch als Hobby angefangen, aktuell benutze ich sie als nicht unerheblichen Anteil zur Verbesserung von Arbeitsabläufen sowie von Maschinen und Anlagen und deren Bedienung.
Mit AutoIt hab ich richtig spaß beim programmieren und auch ein paar Programme entwickelt.
In welchem Bereich?
Leider habe ich mich noch nie in meinem Leben mit einem anderem Programmierer austauschen können, da in meinem Privaten Umfeld keiner auch nur ein hauch von Interesse am Programmieren bzw. für PC's hat.
Uiiii, könnte auch von mir kommen . In den letzten Jahren/Jahrzehnten hatte ich zwangsläufig intensiven Kontakt zu "professionellen" Programmierern und ich habe die Erfahrung gemacht, bei den allermeisten ist es mit der "Professionalität" nicht weit her....
Glücklicherweise finden sich hier im Forum einige "Perlen" der Programmiererzunft , von daher hast du imho ein gutes Plätzchen gefunden um Rat nicht nur bezüglich deiner Scripte zu suchen und zu finden, sondern auch "out of the Box" zu denken und mit den anderen "Spinnern" interessante Diskussionen zu führen!
Ich denke, dass meine Formate für prof. IT'ler, ich sag mal, billig aussehen.
Es kommt nicht auf das Programm an, sondern die Idee dahinter! Den Code hinter der Idee umsetzen ist meist nicht das Problem und auch nicht die Anforderung!
Hoffe es lacht mich keiner aus, obwohl es wäre mir eigentlich egal wenn jemand lacht.
Hier wird niemand ausgelacht, gerade im Gegenteil! Wenn jemand ernsthaftes Interesse zeigt und sich entsprechend artikulieren kann, dann bekommst du kaum irgendwo sonst einen besseren Support!
Hi,
bevor ich meine eigenen Skripte wieder verlege und nie wieder finde, lade ich sie lieber mal hoch, dann findet man sie im Notfall in der Suche
so sie denn nicht wie schon viiiile andere Beiträge auch, für immer im Forennirvana verschwinden
Du hängst doch mit dem "neuen" Dec2Bin nicht etwa an dem alten Thread von 2011?!
Und jetzt kommt wieder AspirinJunkie um die Ecke und haut da wieder einen raus.
Indem er das Script aus einem Post obendrüber kopiert hat?! Zwei Doo*** und ein Gedanke
"Rausgehauen" hat er jedenfalls (wieder mal) ein schönes Script für die Integration von Konsolenprogrammen in ein Windows-basiertes AutoIt!
Naaa. alles gut. Ich hatte Curl schon öfter verwendet, gerade der -L Parameter hat mir schon einige Male weitergeholfen.
Jetzt ist nur noch die spannende Frage, ob @kilo auch zu einem positiven Ergebnis kommt?!
Das Ergebnis bleibt bei mir immer negativ, auch ein Testlauf auf meinem Laptop verlief ohne Erfolg.
Ok, es scheint damit in die von Kanashius angegebene Richtung zu gehen.
Probiere mal folgendes:
Wenn du ein Smartphone hast, deaktiviere dort das WLAN (Verbindung zu deinem Router) und aktiviere die Datenverbindung und das sog. Tethering, um das Smartphone als WLAN-Hotspot deinem Laptop zur Verfügung zu stellen.
Verbinde deinen Laptop nun mit dem vom Smartphone bereitgestellten WLAN und teste das Script.
Ersetze die "Warteschleife" im Script durch diese, um den Download zu registrieren:
Do
Sleep(2500)
$iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iBytesSize = ' & $iBytesSize & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)
Wenn der Download funktioniert, d.h. Daten in der Scite-Console angeteigt werden, kannst du das Script abbrechen.
Somit hast du deinen Router und/oder deinen Provider als "Schuldigen" festgestellt.
Wenn das auch nicht funktioniert, ggf. weil dein Provider den Internetzugang für den Router und das Smartphone bereitstellt, ist es Zeit dort bei der Störungsstelle anzurufen.
Btw., hast du in letzter Zeit AutoIt geupdatet? Lädst du von einer Privatadresse oder aus einem Firmennetzwerk?
Ansonsten probiere mal dieses Script:
#include <AutoItConstants.au3>
Curl("https://bits.avcdn.net/productfamily_ANTIVIRUS/insttype_FREE/platform_WIN/installertype_FULL/build_RELEASE/cookie_mmm_ava_998_999_000_m", @TempDir & "\Avast_Offline.exe")
Msgbox(0,"", "done")
Func Curl($source, $dest);by Mikell
$cmd = "curl -L -k -A 'Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)' " & $source & " -o " & $dest
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $cmd = ' & $cmd & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
RunWait($cmd, "", @SW_show)
EndFunc
#cs
-L --location : follow redirection(s)
-s --silent : show only requested data
-k --insecure : for SSL connections possibly insecure
-A --user-agent
#ce
Alles anzeigen
Ich habe die CMD für dieses Beispiel sichtbar gemacht und auch die -s (silent) Option ausgeschaltet, so dass man den Download verfolgen kann
@kilo , bei mir funktioniert dein Script einwandfrei.
Die Datei wird anstandslos heruntergeladen.
Da der Download im Browser funktioniert, teste ein anderes, definitiv von AutoIt beschreibbares Verzeichnis zum Speichern der Download-Datei.
Starte auch mal dein Script aus einem anderen Verzeichnis/Laufwerk.
Teste bei InetGet() (s. in der Hilfe dazu) auch den Parameter $INET_IGNORESSL (2) = Ignore all SSL errors (with HTTPS connections).
Hallo Claus,
Ganz sicher dass das besser geht, aber ich kann es (noch) nicht und ich muß mich da langsam rantasten.
Genau DAFÜR ist dieses Forum da! Viel Spass weiterhin!
Hi,
dein Script funktioniert einwandfrei!
Du hast lediglich "vergessen" am Ende deiner Funktion die GUI "unsichtbar" zu machen
Das kannst du mit
GUISetState(@SW_Hide,$LoginGUI)
vor dem EndFunc (vom Login) machen...
Das hast du in der ersten Funktion (RegEdit) am Ende mit GUIdelete() so gemacht.
Generell ist es "besser", die GUI´s und auch die dafür verwendeten Variablen vor dem eigentlichen Programm zu definieren und während des Programmablaufs die GUI´s ein- und auszuschalten und auch nur die Variablen abzufragen.
HansJ54 , du hast immer noch nicht erklärt bzw beschrieben, was überhaupt gemacht werden soll.
Ich gehe von einem XY-Problem aus...du beschreibst mit
Gelegentlich muss ich in einer Spalte testweise einige Werte ändern. Bisher verlasse ich das Programm, starte Excel, suche die Spalte, ändere und lese wieder ein und teste.
das was du jetzt aktuell MACHST!
Was allerdings vollkommen uninteressant ist und auch nicht zum Ziel führt, ansonsten gäbe es diesen Thread nicht!
Beschreibe besser, was DEIN ZIEL sein soll, am Besten mit Beispieldaten. Vorher -> Nachher.
Anhand welcher Kriterien sollen "einige" Werte in der Tabelle geändert werden?
Beschreibe dein Problem, und nicht den von dir bisher umgesetzten problematischen Weg.
Hilft dir das?
;aus einer CSV-Datei die jeweilige Spalte in ein Array ausgeben
#include <Array.au3>
$txt = "Stadt,Land,Fluss,Farbe,Vorname,Nachname,Tier" & @CRLF ;alternativ fileread("file.csv")
$txt &= "London,England,Themse,Blau,Heinz,Becker,Hund" & @CRLF
$txt &= "Mainz,Deutschland,Rhein,Gelb,Tim,Thaler,Katze" & @CRLF
$txt &= "Paris,Frankreich,Seine,Rot,Hilde,Meier,Maus"
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $txt = ' & $txt & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$s = "," ;Separator, der in der CSV verwendt wird
$column = "D" ;Spalte, entweder als Buchstabe A-Z
$col = Asc(StringUpper($column)) - 65 ;Spalte, als Spaltennummer einsbasierend
$pattern = '(?m)^(?:[^' & $s & ']*' & $s & '){' & $col & '}([^' & $s & ']*)' ;RegEx-Pattern
$res = StringRegExp($txt, $pattern, 3) ;RegEx
_ArrayDisplay($res, "Spalte " & $column)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
_ArrayDisplay($res, "Spalte " & $col)
$res=StringRegExpReplace($txt,$pattern,stringlen("${1}"))
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $res = ' & $res & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
_ArrayDisplay($res, "Spalte " & $col)
Alles anzeigen
Die Spalten sind entweder über die einsbasierte Spaltennummer oder den Spaltenbezeichner wie bspw in Excel, also A,B, XX usw. ansprechbar
daher müsste ich Spalte 1 und Spalte xx anzeigen können, die Werte in Spalte xx ändern
Wieso "anzeigen"? Was soll denn gemacht werden? Ändern kann man direkt in einer CSV auch ohne "anzeigen"?!
Warum so minimalistisch?
Ist doch offensichtlich! Der so teuer angeschaffte Computer muss doch auch feste Arbeiten! Zwar nicht sinnvolles, aber das ist egal.....passt auch zu
ich werde erst mal mit der (100) versuchen, ich nehme an damit ist das Intervall erst ein mal herabgesetzt. Dann schaue ich was passiert. Wenns dann noch nicht gehr schaue ich mal wegen errorwert, bzw. wie ich da ran komme.
Anstatt zu debuggen und den Fehler zu finden, einfach noch einmal Stunden damit verbringen auf den Fehler zu warten....vielleicht tritt der ja wirklich nur alle x Milliarden Schleifendurchläufe auf...."Problem" gelöst Und wenn nach etlichen Minuten warten das Script immer noch nicht funktioniert, ist man genauso schlau wie vorher. Bei so einer Einstellung bin ich raus....
ich nehme an damit ist das Intervall erst ein mal herabgesetzt.
Übrigens hätte man das "früher" beim Betrieb eines 1- oder 2-Kernprozessors sofort gemerkt bzw. im Taskmanager gesehen wenn der Rechner in einer "ungebremsten" Dauerschleife das System am Anschlag laufen lässt. Heutzutage bei einem 12-Kernprozessor sieht man im Taskmanager NICHTS (bzw. nur 8% CPU-Last), weil Windows den amoklaufenden AutoIt-Thread so schnell zwischen den Cores wechselt, dass man schon genau hinsehen muss. Das Problem sind nicht die "nur" 8% CPU-Last sondern das von Windows deswegen exzessiv durchgeführte Core-hopping, welches das gesamte System verlangsamt. Daher ist das IMMER eine gute Idee ->
Selbst ein Abfrageintervall von 10 Sekunden würde doch deinen Anforderungen gerecht werden.
Hi,
nur mal für die Zukunft....bei solchen Scripten wenn man nicht weiß warum und wieso das Programm WAS macht, loggt man ALLES mit, und zwar jede Zeile!
Dafür hat Scite im Reiter Extras die Funktion Trace: Add Trace Line um alle Zeilen mitzuloggen.
Remove Trace Lines löscht dann diese Zeilen wieder.
Weiterhin macht es ggf. Sinn nur die Funktionsaufrufe mitzuloggen, das macht man mit Trace:Add Func Trace Lines
Einzelne Debug-ConsoleWrites() bekommt man, indem man den Cursor auf eine Variable stellt (oder etwas markiert) und dann ALT-D drückt.
Debug-Messageboxen per CTRL_SHIFT-D
Entgegen dem Rat von Mars würde ich den Sleep auf 1 oder 2 Sekunden hochsetzen, und mir den ProcessExist() zusammen mit einem Timestamp in der Konsole anzeigen lassen, ggf. zusammen mit der aktuellen Laufzeit der Schleife. Mit weniger als einer Sekunde "Wartezeit" kann ich zumindest die Konsolenausgabe nicht (richtig) mitlesen.
sobald die Session über 20 Minuten ist, habe das jetzt oft genug getestet, kappt er die VPN Verbindung nicht mehr.
Die große Frage ist, ob in der While-Schleife der ProcessExist()=0 nicht triggert oder der RunWait() nicht (richtig) ausgeführt wird.
Das geht nur durch mitloggen/Debug-Lines!
Hi,
ich hatte das Problem der "langen Antwortzeiten" schon hier auf AutoIt.de im Jahre 2009 angesprochen...
Nach langer Recherche war die Hauptursache die dynamisch(!) berechnete/festgelegte Wartezeit bei NICHT erreichbaren Services von Windows. In Kombination von Router/Providerseitig gedroppten Antwortpaketen...
Weiter unten im Thread meine Analyse mit Ethereal, die schnell angeworfene Analyse heute allerdings mit Wireshark wirft annähernd identische Ergebnisse.
Ich vermute drops der Antwortpakete bei Router/Provider um massive (D)DOS-Angriffe einzubremsen.
Gelöst habe ich das Problem mittels AdlibRegister, dort springe ich nach 3 Sekunden rein, ist bis dahin keine Antwort da, ist mein Server/Dienst "OFF"
UEZ: dein Skript startet bei mir mit der Autoit Version v3.3.16.1 aktuell nicht. Da sind bestimmte Variablen nicht definiert oder es fehlt ein Include.
Dafür habe ich mir OrganizeIncludes auf die F2-Taste gelegt. Guck mal hier im Forum im Dashboard auf der rechten Seite im Download-Bereich ganz unten. Imho gehört das in Scite4AutoIt integriert und zusammen mit allen anderen Scripten wie Wrapper, Check, Tidy usw. ausgeführt!
Hi,
ich habe (seit Jahren) ein Acer Aspire Switch SW5-012 mit 10´´ Display. Dieses Gerät hat eine per Magnet anklickbare (imho ordentliche) Tastatur mit gutem Touchpad, meine Frau nutzt allerdings auch eine kabellose (Mini)-Maus.
Es war/ist für meine Frau als "Handtaschen-Tablet" für Außeneinsätze und für Reisen vorgesehen und erfüllt seinen Job mittlerweile seit etlichen Jahren...
Das Display ist bei den neueren Versionen hochauflösender, aber das ist nicht Arbeitsentscheidend. Entscheidend ist u.a. der Mikro-HDMI-Anschluß und funktionierendes WIDI um auch Beamer, Fernseher und große Displays (kabellos) anschließen zu können und auch damit zu arbeiten (und im Hotel/bei der Schwiegermutter abends Filme zu streamen^^)
NATÜRLICH war eins der ersten Programme, dass ich installiert hatte, AutoIt. Und das läuft völlig problemlos. Ich hatte damit auch Programme für die Touch-Steuerung per Fingergesten umgesetzt (extra große Buttons usw), das funktionierte "natürlich" auch einwandfrei.
Gebraucht bekommst du diese Geräte schon für SEHR kleines Geld....Ich mag besonders die anklickbare Tastatur mit einem wirklich ordentlichen Drehscharnier. Windows schaltet damit "automatisch" vom Tabletmodus in den Tastaturmodus um!
Ich hatte derzeit ein 13 Zoll Gerät, was richtig, auch geschleppt werden muss 😅 .
Ich bin ein Fan von großen Displays WENN ich schon schleppe, dann richtig! Privat und dienstlich nutze ich 17´´ Laptops. Wenn es größere gäbe, würde ich die nutzen...
Wenn ich anderen, u.a. auch Kunden, etwas zeigen oder erklären will/muss, dann ist es imho ein Unding, dafür in die persönliche Distanzzone oder gar in die Intimzone des Gegenübers eindringen zu müssen und damit beim Gegenüber ein Unwohlsein auszulösen und den Erfolg dieses Gesprächs negativ zu beeinflussen. Aber das ist ein anderes Thema^^
Mit meinem Handy hätte ich das auch gemacht aber leider lässt sich autoit für Android nicht installieren was verständlich ist.
Meine Tochter war ganz heiß auf ein großes M$-Surface, aber einige Monate als Student dafür arbeiten zu gehen war es ihr dann doch nicht wert.
Mittlerweile nutzt sie größtenteils für Programmieraufgaben/Änderungen unterwegs ihr Smartphone mit einer Bluetooth-Tastatur. Da remote mit ihrem PC/Server verbunden, ist das kein Thema.
Du kannst das auch machen, dazu muss allerdings, wenn du unterwegs bist, zuhause bzw. in der Firma dein Rechner laufen. Die Bildschirmdarstellung des Rechners wird auf dein Handy übertragen, deine Eingaben (Touch oder Tastatur) über die Onlineverbindung wieder zurück auf deinen Rechner. DAS kostet idR, außer dem Strom für den Computer und ggf. eine (zusammenrollbare) Bluetooth-Tastatur, garnichts!
Tja und wenn ich dann höre, dass du im Auto programmieren willst, dann würde ich dir eher zu einem schlanken Netbook oder convertible raten.
Denn so kannst du auch mit einer vernünftigen Tastatur auf dem Schoß arbeiten.
Wenn ich mehrere Stunden im Auto/in der Bahn gefahren werde, was 1-2x im Monat vorkommt, dann arbeite ich dort auch. Gerade für die Arbeit im Auto habe ich mir einen "Laptoptisch (eher eine Platte) mit Kissen und Handballenauflage" gegönnt. Ein Unterschied wie Tag und Nacht zu dem Gewackel des Geräts auf den Knien/Schoß.
der passt....
Hi,
was willst du dort optimieren, das läuft so doch einwandfrei!?
Du könntest die gespeicherten *.jpg noch dahingehend erweitern, dass der User auch mehrere Screenshot-Dateien nacheinander speichern kann.
Für solche und ähnliche Fälle speichere ich immer Dateiname_Datum_Uhrzeit.jpg
Die Uhrzeit incl. der Sekunden, bei eingescannten Barcodes auch die Millisekunden.
Ansonsten im weiteren Ablauf die gespeicherten Screenshots direkt in das Helpdesktool einfügen...
Wer sagt denn, das eine Pin immer 4 Zeichen lang ist? Die Zeiten haben wir doch gehabt, man kann doch schon lange längere Pins verwenden.
GENAU DARUM GEHTS! Wer in der Lage ist, nach bspw. 4 eingegebenen Zeichen die Eingabe zu beenden und das Programm/Script weiterzuführen, der sollte das dann auch bei StringLen($pin) hinbekommen...aber genau daran liegt es, wenn Anwender immer wieder in ihrem eigentlichen Arbeitsablauf unterbrochen werden um Taste X zu drücken oder Button Y wegzuklicken. Die Programmierer, welche vom eigentlichen Arbeitsablauf keine Ahnung haben, setzen das Lastenheft, erstellt von einem Vorgesetzten, welcher vom Arbeitsablauf idR auch keine oder nur wenig Ahnung hat, so um, wie es für sie am einfachsten/schnellsten geht. Kaum jemand analysiert Arbeitsabläufe um diese, auch hinsichtlich Ergonomie, zu optimieren!
Dabei sind die "reinen" Bildschirmarbeiter noch im Vorteil weil sich die Tätigkeit auf "einfaches" Tastaturgeklimper oder Mausgeklicker (oft auch abwechselnd in Sequenzen ) beschränkt. DAS kostet maximal Zeit und führt langfristig zu "geringen" Schmerzen wie bspw. den "Mausarm", was den Programmierer als auch den Vorgesetzten des Mitarbeiters idR einen SCH*** interessiert!
Wenn Mitarbeiter chronisch krank sind/werden, dann wird sich oft seitens Arbeitgeber darüber lauthals beschwert, aber wenn du genau diese Arbeitgeber dann fragst, WARUM die Mitarbeiter "dauernd" krank sind bzw. ihre Ziele oder Ergebnisse nicht erreichen, dann triffst du auf völlige Verständnislosigkeit. Ich bin da tiefenentspannt, habe in meiner Tasche immer zwei Overalls (Größe M und XL^^) dabei, und sage, ich könne das "Problem" innerhalb von 5-10 Minuten LANGFRISTIG lösen....
Auf die Frage nach dem "Wie DAS denn?" fordere ich den Vorgesetzten/Arbeitgeber auf den Arbeitsplatz einzunehmen (in "schmutzigen" Produktivunternehmen dafür den Overall) und mit der Arbeit anzufangen. Nach Instruktion durch den Mitarbeiter, was meist nur 1-2 Minuten dauert, erkennt der Vorgesetzte/Arbeitgeber in den nächsten 2-3 Minuten SOFORT, wo das eigentliche Problem liegt....und weist idR auch SOFORT die Umgestaltung dieses Arbeitsplatzes an! Das ist MEINE Erfahrung!
Diejenigen, die sich nicht mal "herablassen" den Arbeitsplatz ihrer eigenen Untergebenen zu betreten bzw. nur einige Augenblicke deren Arbeit zu machen sind in der Führungsebene sowieso fehl am Platz! Da weiß ich dann sofort, wo das "Problem" liegt und DAS wird dann von mir auch ohne Umschweife so kommuniziert! "Sie hatten mich gefragt, wieso so viele ihrer Mitarbeiter so lange "krank feiern"....ich gebe Ihne jetzt die Antwort: Weil SIE ihren Job nicht richtig machen!"
Und DAS geht auch an die Programmierer! Denn die zwingen den Anwendern den Arbeitsablauf auf, den sie selbst nicht (langfristig) machen würden. Daher:
MACHT EUREN JOB RICHTIG!
Und versucht die Betriebsblindheit zu überwinden
Leider ja, wobei ja teilweise bereits während der Eingabe eine optische Meldung erscheint (z.B. beim Setzen eines neuen Passworts), das Bedingung x/Y nicht geben ist.
In einem Fenster, dass mit MausKlick auf den OK-Button bestätigt werden muss .
Natürlich soll das NICHT so sein! Die Info, dass eine "unzulässige" Aktion (bspw. Taste) eingegeben wurde, gehört in das Fenster mit dem Eingabefeld, zusammen mit der Angabe der zulässigen Möglichkeiten. Der Eingabecursor bleibt im Eingabefeld. Wenn dann die "Fehleingabe" auch noch akustisch, denn genau dafür gibt es die "Standard"-Windows-Sounds, mitgeteilt wird, werden auch "Blindschreiber" wach^^.
Wieso muss ich als Anwender die Finger von der Tastatur nehmen um mit der Maus auf Buttons rumzuklickern damit es weiter geht?! Wieso wissen die meisten Anwender nicht, dass man mit der TAB-Taste zum/in das nächste Eingabefeld/Button usw. springen kann?! Fragen über Fragen...
Das ist richtig
Evtl. war sein Button ja auch nur der 1. Versuch es zum Laufen zu bringen.
Amen! Ich hoffe so sehr, das du damit richtig liegst
Hi!
Eine Fortschrittsanzeige mit fortlaufender Anzeige der %-Zahl der bereits erledigten Aktion macht Sinn. Bei einfachen/schnellen ( <1 Minute) dauernden Aktionen kann man auch einen drehenden "Balken" verwenden, oder beides kombinieren.
Wenn du das Anzeigefenster so weit verkleinerst, dass die Anzeige nur auf die Titelleiste beschränkst, kannst du das "Minifenster" als TopMost deklarieren und an eine Stellle des Bildschirms ziehen, an der es nicht stört.
Oder alle x Sekunden im Traymenü sichtbar machen...oder den berühmten "Ladebalken"...oder oder oder
Der "Beep"-Sound, bzw. gibt es genau dafür die definierten Windows-Sounds, macht am Ende einer Aktion Sinn wenn das Anzeigefenster aktuell nicht sichtbar ist.