Beiträge von misterspeed
-
-
Ich verstehe sowieso nicht warum er ispressed verwendet um einen Klick auf die Buttons zu erkennen. Ich würde den ganzen murks raushauen und im guigetmsg switch case alle Buttons mit dem Event vergleichen:
[autoit]
[/autoit]
While 1
$guimsg = GUIGetMsg()
Switch $guimsg
Case $GUI_EVENT_CLOSE
Exit
Case else
If IsArray($_SCRIPT_COUNT_EXEFILE) Then
For $i = 1 To $_SCRIPT_COUNT_EXEFILE[0]
if $_SCRIPT_GUI_BUTTONS[$i] = $guimsg then
ShellExecute($_SCRIPT_FOLDER & guictrlread($guimsg) & ".exe", " -start")
exitloop
endif
Next
EndIf
EndSwitch
WEnd -
ZitatAlles anzeigen
Hi,
DomainRep is a new feature of Avast, so let me explain a bit. It blocks EXE files downloads if these conditions are *all* met:
1. The file is not prevalent enough, ie. not enough Avast users launched the file yet,
2. The domain is not prevalent enough, ie. not enough Avast users downloaded (any) EXE files from the domain yet,
3. The file is not signed or Avast does not trust the signature.Once
one of these conditions are not met anymore, Avast will stop flagging
the download. In other words, just wait until more people try to
download the file, or digitally sign your files :-).
HonzaLiegt schlichtweg an Avast. Mehr dazu kannst du hier nachlesen:
https://forum.avast.com/index.php?topic=163221.0Hab den Thread selbst nicht gelesen, evtl. findet man dort aber weitere Tipps / Lösungen zum Problem...
-
Verwende ein richedit anstatt einem input, dann kannst du soweit ich mich erinnere jedes einzelne Zeichen nach belieben formatieren.
-
Wenn man mit Autoit echte zeitgleiche Ausführung realisieren will führt in der Regel kein Weg an multiplen Prozessen vorbei. In deinem Fall könntest du z.B. einen Hauptprozess nutzen, welcher nichts anderes macht als die gedrückten Tasten auszuwerten und die Funktionen die wirklich etwas (zeitintensives) tun in extra Scripte auslagern. Das Hauptscript nutzt dann run(...) um die anderen Scripte auszuführen und sofern keine komplexere Kommunikation zwischen den Scripten realisiert wird processclose(...) um diese abzubrechen. Daten wie z.B. eine globale statische Zählervariable oder die Prozess IDs von paralell laufenden Prozessen könnte man per Parameter an die untergeordneten Prozesse weitergeben.
Wenn man das richtig machen will muss man sich aber auch mit den verschiedensten Möglichkeiten zur Inter Prozess Kommunikation beschäftigen.
-
Mit ConsoleWrite habe ich es nicht laufen bekommen.
Was meinst du damit? Warum sollte es damit nicht laufen?
Du weist schon was consolewrite(...) macht oder? Wenn nicht lies bitte in der Autoit Hilfe nach.Andy wollte dir mit seine Beispielcode in erster Linie verständlich machen, dass man Debugging betreiben sollte wenn etwas nicht wie gewünscht funktioniert. Bevorzugt macht man das schon vorher wenn man sich unsicher ist welche Konsequenzen die reale Code Ausführung haben könnte. Und genau dafür verwendet man sinnvollerweise meistens consolewrite() bevor man eine Zeichenkette an eine Funktion übergibt die evtl. richtig Scheiße bauen kann wenn die Zeichenkette fehlerhaft ist.
-
Funktioniert hier auch einwandfrei. Vermutlich wurde Flash via Firefox heruntergeladen / installiert? Für das COM Objekt benötigst du denke ich die ActiveX Version, welche nur beim Zugriff über den Internet Explorer von Adobe augeliefert wird.
Hier kannst du alle verfügbaren Varianten herunterladen: https://get.adobe.com/de/flashplayer/otherversions/Ansonsten bleibt noch der übliche Verdächtige... ein übervorsichtiger Virenscanner.
-
[autoit]
run ("c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe /t "$folder4&$t&"_test.pdf" "Printer","",)
[/autoit]Da fehlt nicht nur ein &, da fehlen evtl. auch Backslashe und definitiv ein Leerzeichen und auch Anführungszeichen die Pfade oder Parameter mit Leerzeichen umschließen, wenn du das ausführen willst sollte dich Scite erstmal mit Syntaxfehlern bombardieren.
So dürfte das eher korrekt sein:
[autoit]run('"c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"' & ' /t "' & $folder4 & $t & '_test.pdf"' & ' Printer')
[/autoit]Jenachdem ob dein Pfad mit Backslash endet oder nicht könnte auch das hier korrekt sein:
[autoit]run('"c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"' & ' /t "' & $folder4 & '\' & $t & '_test.pdf"' & ' Printer')
[/autoit]Und um das ganze übersichtlicher und leichter austauschbar zu machen würde ich cmdline Aufrufe eher komplett aus Variablen zusammensetzen:
[autoit]
[/autoit][autoit][/autoit][autoit]
$sProgramm = "c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"
$sFile = $folder4 & $t & "__test.pdf"
$sParameter = "Printer"run('"' & $sProgramm & '" "' & $sFile & '" ' & $sParameter)
[/autoit]
Beachten sollte man immer, dass Pfade und Dateinamen die dynmaisch verändert werden auch Leerzeichen enthalten könnten. Sofern das der Fall ist muss man Anführungszeichen verwenden. Deswegen ist es wesentlich sicherer wenn man diese grundsätzlich verwendet. -
Für Prozesse musst dus so nehmen wies im Taskmanager unter Prozessen steht. Also mit dem " *32".
(Kannst du auch leicht prüfen indem du ProcessList() aufrufst und dir das Array anzeigen lässt.Erzähl keinen Unsinn. Processclose erwartet entweder den Namen des Prozesses (der name der exe Datei) oder die Prozess ID. Das "*32" ist lediglich eine optische Anzeige im Taskmanager um 32bit von 64bit Prozessen unterscheiden zu können. Für processclose spielt das aber keine Rolle.
-
@ProgrammingDonkey Es geht hier um SQL, nicht um AutoIt

Natürlich gehts hier um Autoit!
[autoit]
Der Threadstarter möchte das rechnerisch korrekte SQL Ergebnis schlichtweg optisch anderst (mit 2 Dezimalstellen) in seiner Ausgabe darstellen. Dafür wurde die Funktion stringformat(...) erfunden.
[/autoit]
$test = StringReplace(StringFormat("%.2f", 20.5),".",",")
ConsoleWrite($test & @CRLF)
$test = StringReplace(StringFormat("%.2f", 20.55),".",",")
ConsoleWrite($test & @CRLF)
$test = StringReplace(StringFormat("%.2f", 20.555),".",",")
ConsoleWrite($test & @CRLF)
$test = StringReplace(StringFormat("%.2f", 20),".",",")
ConsoleWrite($test & @CRLF) -
Mit Schleife meinst du
[autoit]While if traygetmsg() = $idExit then exit WEnd
[/autoit]Wenn du den onEvent Mode verwendest natürlich nicht. Benutz dann eben das hier:
[autoit]TrayItemSetOnEvent(...)
[/autoit] -
Versteh dein Problem grad nicht...
Mit
[autoit]opt(TrayAutoPause,0)
[/autoit]
deaktiviert man, dass das Script pausiert wenn man auf das Trayicon klickt. Das hat erstmal rein garnix mit den verfügbaren Menüeinträgen zu tun.Mit
[autoit]opt(TrayMenuMode,0)
[/autoit]
macht man exakt garnichts, denn das ist das Standardverhalten, sprich du hast sowohl einen Eintrag für Pause, als auch einen für Exit.Mit
[autoit]opt(TrayMenuMode,1)
[/autoit]
entfernt man beide Standardeinträge, das Menü ist nun leer.Mit
[autoit]$idExit = TrayCreateItem("Mein eigenes Beenden")
[/autoit]
erstellt man einen eigenen Menüeintrag um das Script zu beenden.Mit
[autoit]if traygetmsg() = $idExit then exit
[/autoit]
in deiner GUI Schleife kannst du letzlich auf den Klick im Traymenü reagieren und dein Script beenden.Steht aber auch alles in der Hilfe zu
[autoit]autoitsetoption()
[/autoit]
bzw. in den Hilfeinträgen und Beispielen der anderen Trayfunktionen. -
Man muss da noch mehr beachten. Zum einen ist es möglich sowohl Java 7 als auch Java 8 paralell installiert zu haben, zum anderen kann man auch noch unterschiedliche Java Versionen für 32 und 64bit installiert haben. Anstatt sich die Mühe zu machen das alles zu prüfen ist es vielleicht einfacher regelmässig die neueste Version in 32 und 64bit auszurollen, unabhängig davon ob diese evtl. schon manuell installiert wurde. Der Setup erkennt denke ich selbsständig wenn Java bereits in der aktuellen Version installiert ist und bricht dann einfach ab. Müsstest du aber natürlich testen.
Damit dein Clientscript das nicht unnötig oft wiederholt könntest du lokal auf dem Client eine Logdatei anlegen in der das Clientscript nachschauen kann ob es bereits das letzte Update vom Rollout Server installiert hat.
Natürlich kannst du aber auch wie oben beschrieben vorgehen und sämtliche Registrykeys zerlegen und prüfen.
-
Dass im Protokoll als Gegenstelle "mail.autoitscript.com" auftaucht, ist evtl. auf einen Alias zurückzuführen (reine Vermutung).
Alias ist der falsche Begriff dafür. mail.autoitscript.com ist der Reverse DNS Eintrag für die Server IP auf der neben der Webseite autoitscript.com scheinbar auch noch ein Mail Server läuft. Da es für Mailserver wichtig ist einen korrekten Reverse DNS Eintrag zu haben wurde der wohl so gesetzt.
Codenslookup autoitscript.com Name: autoitscript.com Address: 87.106.181.57 nslookup 87.106.181.57 Name: mail.autoitscript.com Address: 87.106.181.57Sprich wenn das Analysetool die IP mit der da kommuniziert wurde zurückauflöst wird es mail.autoitscript.com anzeigen, auch wenn es sich hier wohl dann wie vermutet nur um den Download der sqlite.DLL vom Webserver handelt und nicht um Emailkommunikation.
-
Ich hab das nicht selbst nachgeprüft und mich auf die Vermutung von Bugfix gestützt. Ich verwende auch noch eine alte Autoit Version und kann sowieso nichts zu den aktuellen Versionen sagen. Allerdings könnte ich mir bei der Kommunikation mit mail.autoitscript.com auch vorstellen, dass das lediglich in Alpha oder Beta Versionen von Autoit passiert. Aber auch das wäre nur eine Vermutung.
-
wenn nicht wird eine Internetverbindung aufgebaut und diese Dll vom AutoIt-Server heruntergeladen.
Was ziemlich unklug ist... zum einen dürften diverse Virenscanner Alarm schlagen wenn eine Software einfach mal so zur Laufzeit eine DLL aus dem Internet nachlädt, zum anderen ist das geradezu eine Einladung Schadsoftware auf den Servern von autoit.com zu platzieren.
Ich stimme dem Rat von Bugfix also zu, dass es sinnvoller ist die DLL selbst beizulegen. Nur so kann man sicherstellen, dass es sich um eine originale und unveränderte DLL handelt. Davon ab hat man so auch eine Garantie die richtige zur UDF passende Version der DLL zu nutzen.
-
Naja das ist schon richtig so. Ein entfernbares Gerät (removable) ist nicht mehr aktiv im System wenn er entfernt wurde. Das CD-Rom oder DVD-Laufwerk verbleibt aber im System wenn man die CD/DVD auswrift und ist somit auch kein beliebig entfernbares Gerät. Das CD/DVD Laufwerk behält im übrigen auch seinen Laufwerksbuchstaben und bleibt ansprechbar (z.B. eject), völlig unabhängig davon ob ein Datenträger eingelegt ist oder nicht.
-
Die Antwort auf deine Frage lautet... ja kann man mit Autoit realisieren. Da es dir sowieso nicht um produktiven Einsatz geht brauchst du lediglich die TCP Funktionen von Autoit. Sinnvollerweise realisiert man sowas durch einen zentralen Server und mehrere Clients (deine Stationen) die eine Verbindung zum Server halten oder in Intervallen aufbauen um abzufragen ob es neue Aufgaben oder Statusänderungen gibt. Bei einer permanenten Verbindung kann der Server die verbundenen Clients sofort bei Änderungen informieren.
Wenn du in deiner Abschlussarbeit etwas glänzen willst solltest du aber auch die hier genannten Sicherheitsaspekte berücksichtigen und dir z.B. über verschlüsselte Datenübertragung Gedanken machen und ggf. auch noch Wege suchen um Pager oder Telefonanlagen mit in den Kommunikationsweg eintzubinden. Letzteres solltest du zumindestens im theoretischen Teil der Arbeit nicht unberücksichtigt lassen, da in der Praxis ja anscheinend eher auf telefonischen Kontakt gesetzt wird.
-
Davon mal abgesehen gibt es für mich keinen sinnvollen Grund Pixel auf dem Desktop auszulesen. Was soll damit erreicht werden? Ich würde wetten es gibt zig bessere und schnellere Möglichkeiten das Ziel zu erreichen.
-
Dann schau doch einfach in die string.au3 und nutze eine modifizierte _stringbetween() Funktion die dir das zurückgibt was du willst.
[autoit]
[/autoit][autoit][/autoit][autoit]
Func _MyStringBetween($s_String, $s_Start, $s_End, $v_Case = -1); Set case type
[/autoit][autoit][/autoit][autoit]
Local $s_case = ""
If $v_Case = Default Or $v_Case = -1 Then $s_case = "(?i)"; Escape characters
[/autoit][autoit][/autoit][autoit]
Local $s_pattern_escape = "(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)"
$s_Start = StringRegExpReplace($s_Start, $s_pattern_escape, "\\$1")
$s_End = StringRegExpReplace($s_End, $s_pattern_escape, "\\$1"); If you want data from beginning then replace blank start with beginning of string
[/autoit][autoit][/autoit][autoit]
If $s_Start = "" Then $s_Start = "\A"; If you want data from a start to an end then replace blank with end of string
[/autoit][autoit][/autoit][autoit]
If $s_End = "" Then $s_End = "\z"Local $a_ret = StringRegExp($s_String, "(?s)" & $s_case & $s_Start & "(.*?)" & $s_End, 3)
[/autoit][autoit][/autoit][autoit]If @error Then Return SetError(1, 0, 0)
[/autoit]
Return $a_ret[0] ; <----------- gibt kein array mehr zurück, sondern den ersten Treffer im Array
EndFunc ;==>_StringBetween