1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Mistil

Beiträge von Mistil

  • auf Event aus anderem Skript reagieren

    • Mistil
    • 29. Juli 2016 um 20:03

    Das habe ich, aber um da durch zu steigen, muss ich mich wohl erst noch etwas mehr mit autoit beschäftigen. Ich verstehe von dem geschriebenen nämlich nicht wirklich viel ^^

    @Christoph: das ist doch fast das, was ich mit dem unsichtbaren Edit gemeint habe, nur dass ich es ohne einen Zusätzlichen Button versuche.

  • auf Event aus anderem Skript reagieren

    • Mistil
    • 25. Juli 2016 um 08:41

    So, hat leider etwas gedauert, weil ich viel anderes zu tun hatte.

    Lottich: Das Programm soll für die Aktualisierung nach dem Erfassen neuer Daten unterbrochen werden, aber solange die Erfassung durchgeführt wird (sprich die GUI zur Eingabe neuer Daten angezeigt wird) noch normal weiterlaufen, so dass man auch zwischendurch noch was bei z.B. anderen Fahrzeugen nachschauen kann.

    Um ein Event zu starten habe ich mir gedacht, ich erstelle eine unsichtbare GUI mit einem Edit im guiOnEvent-Mode und übergebe das Handle per Parameter an das neu gestartete Skript, das seine Rückmeldungen in das Edit schreibt (sofern sich das Event davon auslösen lässt).

    Ansonsten kann ich eine einfache Existenzabfrage ja über die ID aus ShellExecute realisieren. Als letzte Möglichkeit scheint mir die Exchange Variables UDF von Eukalyptus recht praktisch zu sein.

    Ich denke mal, damit lässt sich das Problem recht gut lösen, auch wenn die letzten beiden Wege ja lein Event auslosen, sondern in einer Schleife geprüft werden müssen.

    Leider konnte ich noch keine Tests machen, aber ich bin recht zuversichtlich und setze das Thema deswegen auch auf gelöst.

    Danke für eure Hilfe.

  • auf Event aus anderem Skript reagieren

    • Mistil
    • 8. Juli 2016 um 08:08

    Hmm. die Daten werden ja so oder so in eine ini geschrieben, nur ist bei Programmstart ja der Name noch nicht bekannt. Ein Aktualisierungsbutton wäre eine Lösung, aber automatisch wäre mir lieber.
    Du meinst quasi, ich soll eine temporäre Datei anlegen lassen, die dem 1. Programm signalisiert, dass das 2. fertig ist. Bremst das nicht aus, wenn das Programm in einer Schleife immer wieder auf die Platte zugreifen muss um auf die Existenz der Datei zu prüfen?
    Ich hatte mir auch schon überlegt, die Prozess-IDs der gestarteten Programme in einem Array zu speichern und in einer Schleife immer wieder zu prüfen ob diese noch existieren. Bei beidem müsste aber eben in einer Schleife geprüft werden. Ich hatte gehofft etwas zu finden, das wie GUIRegisterMsg das Programm unterbricht und die Aktualisierungsfunktion startet.

  • auf Event aus anderem Skript reagieren

    • Mistil
    • 7. Juli 2016 um 22:53

    Hi autoBert,

    die Daten liegen in einer Ini vor, deren Name der FIN entspricht. in der 1. Sektion stehen die Fahrzeugdaten, in der 2. Informationen zu den Wartungsintervallen und ab der 3. werden Informationen zu den durchgeführten Wartungen erfasst.
    Das Programm soll vorerst nur auf einem PC laufen. Falls ich mal mit meinem Werkstatt-PC weiter komme, könnte es sein, dass dieser auf dieselben Daten zugreifen soll, was im Moment aber noch in weiter Zukunft liegt.

    Den bisherigen Code möchte ich nur ungern posten, sollte hierfür aber auch nicht essentiell sein. Mich interessiert, ob und wie es allgemein machbar wäre, einen Interrupt in einem anderen laufenden Skript auszulösen.

    @all:
    Bitte nicht falsch verstehen. Ich bin sehr dankbar für alle produktiven Antworten und finde es auch super, dass man hier mit ziemlich allen Fragen immer ein offenes Ohr findet. Bei meiner Frage suche ich diesmal aber wirklich nach einer Lösung, die dem oben beschriebenen Problem mit 2 Skripten entspricht und keine Möglichkeit, diese Situation irgendwie zu umgehen.

  • auf Event aus anderem Skript reagieren

    • Mistil
    • 7. Juli 2016 um 20:49

    Irgendwie war mir klar, dass der Hinweis kommt, das alles in einem Script ab zu handeln :D Hatte noch überlegt, dazu was rein zu schreiben.

    Das Script ist jetzt schon total unübersichtlich, dass die gui mit variabler Größe auch macht, was sie soll. Das 1. Skript soll ja nicht primär nur auf Eingaben warten. Es geht darum, wenn beim Eingeben neuer Sachen etwas nachgeschaut werden muss, oder mehrere Fahrzeuge parallel behandelt werden sollen. Das will ich nicht alles in einem Skript abhandeln.
    Es müssen ja keine Daten übertragen werden. Es reicht dann eigentlich schon, wenn ich dem 1. Skript signalisieren kann, dass es die Daten für die Fahrzeuge neu laden soll, dass diese direkt nach Bestätigung der Eingabe zur Verfügung stehen.

  • auf Event aus anderem Skript reagieren

    • Mistil
    • 7. Juli 2016 um 19:29

    Also, folgendes Problem.

    Ich habe ein Hauptprogramm, mit dem ich die Daten und Wartungen unserer Autos und Motorräder verwalten kann.
    Jetzt möchte ich das Erfassen neuer Fahrzeuge über ein 2. Skript machen, das aus dem ersten nach betätigen eines Controls über run gestartet wird.
    Während die GUI des 2. Skriptes geöffnet ist, das Fahrzeug also eingegeben wird, soll in der 1. GUI, also dem Hauptprogramm ganz normal weiter gearbeitet werden können. Erst wenn die Daten des neuen Fahrzeugs gespeichert wurden, soll das Hauptprogramm die im Speicher befindlichen Daten aktualisieren. Ich suche also eine Möglichkeit, aus dem 2. Skript ein Event aus zu lösen, auf das das 1. Skript aus dem laufen heraus ähnlich dem GUIonEvent-Mode reagiert.
    Im weiteren Programmablauf sollen auf ähnliche Weise auch durchgeführte Reparaturen, Wartungen oder passende Ersatzteile erfasst werden.
    runwait geht ja nicht, weil das 1. Skript dann so lange nicht mehr arbeitet.

    Ich hoffe mal, ihr könnt mich helfen und ich habe nicht wieder was total offensichtliches übersehen.

  • GUI wie Programmfenster ausführen

    • Mistil
    • 24. Juni 2016 um 10:47

    Mist. Hatte Dockwidth vergessen. Geht also.

    So passt es:

    AutoIt
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    
    
    Local $ix=800
    Local $iy=500
    Local $ixFeldLinks=250
    Local $hMain=GUICreate("Test", $ix,$iy, -1, -1, $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX)
    
    
    GUICtrlCreateGraphic( $ixFeldLinks, 0,2,$iy,$SS_BLACKRECT)
    
    
    GUICtrlSetResizing(-1,$GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH)
    GUISetState(@SW_SHOW, $hMain)
    
    
    While 1
    	Switch GUIGetMsg($hMain)
    	Case $GUI_EVENT_CLOSE
    		Exit
    	EndSwitch
    WEnd
    
    
    Exit
    Alles anzeigen
  • GUI wie Programmfenster ausführen

    • Mistil
    • 23. Juni 2016 um 13:20

    Super, danke dir.

  • GUI wie Programmfenster ausführen

    • Mistil
    • 23. Juni 2016 um 12:26

    It works, It works :part:

    Dankeschön. Das ist ein Tipp, der sich in der Hilfe bei den GDI+ Funktionen auch gut machen würde :D Es steht zwar im Beispielcode dabei, aber auf den ersten Blick ist ja nicht zu sehen, dass es unbedingt nötig ist.

    Was mich jetzt noch interessieren würde ist, wozu dient das Initialisieren?

    Übrigens, ist es möglich, den von einer Variable (oder besser noch von einem Array) belegten Speicher während der Laufzeit an zu zeigen?

  • GUI wie Programmfenster ausführen

    • Mistil
    • 23. Juni 2016 um 09:57

    Vielen Dank an alle, es hat super funktioniert. Ist zwar etwas umständlich, immer wieder alle Controls neu an zu passen (muss ich ja für alles ein Handle vergeben) aber das passt schon. GuiSetResizing geht leider nicht, weil sonst Linien in der gui nicht nur Verlängert, sondern auch in die breite gezogen werden.

    Allerdings bin ich auf noch ein weiteres Problem gestoßen. da es bestimmt ähnlich leicht gelöst werden kann und zu dem gleichen Projekt gehört, schreibe ich das hier mit rein.

    Ich muss von einem Bild (noch nicht in eine GUI eingebunden) die Breite und Höhe bestimmen. Das habe ich mit gdiPlus versucht, aber leider schaffe ich es nicht das Bild mittels _GDIPlus_ImageLoadFromFile zu laden. Ich bekomme immer 0 zurück.

    AutoIt
    #include <GDIPlus.au3>
    #include <array.au3>
    
    
    Global $img=@ScriptDir & "\HMB.bmp"
    _ArrayDisplay(_GDIPlus_ImageGetDimension(_GDIPlus_ImageLoadFromFile($img)))
    MsgBox(0, "", _GDIPlus_ImageLoadFromFile($img))
    Exit

    Ich habe echt keine Ahnung, wo der Fehler liegt. Gibt es evtl. auch eine andere Möglichkeit?

  • GUI wie Programmfenster ausführen

    • Mistil
    • 17. Juni 2016 um 15:10

    Also das ging jetzt mal echt schnell und es ist mir echt peinlich, dass ich das nicht gesehen habe.

    Du meinst $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX, richtig? Ich hatte irgendwie etwas "komplizierteres" gesucht 8|

    Vielen Dank, dass du mich da nochmal mit nachdruck drauf gestoßen hast.

  • GUI wie Programmfenster ausführen

    • Mistil
    • 17. Juni 2016 um 14:30

    Hi, ich habe letztes Jahrt ein Programm geschrieben, das mich bei meinen Fahrzeugen an nötige Wartungen erinnert, und in dem ich alle Reparaturen für ein späteres Wartungsprotokoll erfassen kann. Jetzt möchte ich da ein paar Funktionen ergänzen und die ganze optik etwas überarbeiten.

    Gibt es eine Möglichkeit, eine GUI wie ein Programmfenster auszuführen, also Bildschirmfüllend über den Maximieren-Button? Die GUI´s, die ich bis jetzt immer erstellt habe, sind nur Fenster in bestimmten Größen und der Button zum maximieren (der mittlere) ist immer Ausgegraut.

    Ich hoffe, ihr versteht was ich meine und könnt mit weiter helfen :D

  • Progressbar beim kopieren einer großen Datei

    • Mistil
    • 20. Dezember 2015 um 19:55

    Nein, das passt so schon ganz gut. Ich war nur überrascht, dass deine Funktion trotz berechnen und aktualisieren des Fortschritt-Balkens so schnell ist im Gegensatz zu den anderen Möglichkeiten (ohne belastung des Prozessors durch einen Fortschrittsbalken) und wollte euch an der Messung teilhaben lassen :D

  • Progressbar beim kopieren einer großen Datei

    • Mistil
    • 20. Dezember 2015 um 16:50

    Also.

    Gleich Vorweg: Alle Probleme gelöst :D . Vielen Dank an die Helfenden.

    Ich habe zu Hause die Version aktualisiert und die Funktion ließ sich ausführen. Dabei habe ich entdeckt, dass es auch eine entpackbare Version von AutoIT und sogar von Scite gibt. So konnte ich auch ohne entsprechende Rechte die installierte Version auf meinem Firmenrechner aktualisieren und habe jetzt sogar Scite auf dem Rechner (endlich muss ich mich nicht mehr mit dem unterschiedlichen Syntax-Highliting herumschlagen) :party:

    Ich habe nach euren Postings erst mal einen Speedtest mit der standard-Funktion FileCopy als Referenz, xcopy, FileCopyEx und Robocopy durchgeführt. Interessant war dabei, dass FileCopyEx trotz der Mehrarbeit durch das Füllen eines Fortschrittbalkens gut mithalten konnte und bei größeren Dateien sogar um eineiges schneller war (beim Kopieren auf einer Festplatte). Beim kopieren von einer Platte auf die andere (physikalisch, keine Partition) war der Effekt dann leider nicht mehr zu sehen (ich habe die Messergebnisse mal angehängt, falls es jemanden interessiert. Ist eine xlsx, die ich gepackt habe, weil das Forum dieses Format wohl nicht wolte). Kopiert wurden je 20 txt-Dateien, die mit Zahlen von 0-9 gefüllt waren, bis die Dateigröße erreicht war (die Präfixe sind dezimal-basiert, 100kB stehen hier also für 100.000Byte). Der letzte Wert ist ein Mittelwert der gemessenen Zeitenm in s. Den 1. Messwert habe ich dabei ausgelassen.

    Ich habe mich dann auch für die von Oscar erstellte Funktion FileCopyEx entschieden und diese für meine Bedürfnisse etwas umgewandelt. So wird jetzt kein neues Fenster mit Progress-Balken erstellt, sondern ich übergebe der Funktion ein Handle des Balkens, der gefüllt werden soll.

    Das Prgramm ist jetzt soweit fertig und war auch schon im Einsatz :D

    Nochmal Danke für eure Hilfe :thumbup:

    Dateien

    Ergebnisse des Geschwindigkeitsvergleich von Kopierfunktionen.zip 23,53 kB – 385 Downloads
  • Progressbar beim kopieren einer großen Datei

    • Mistil
    • 16. Dezember 2015 um 12:04

    Ok, danke.
    Dann kann ich hier erst zu Hause weiter machen.

    Ich melde mich dann wieder, wie es gelaufen ist :D

  • Progressbar beim kopieren einer großen Datei

    • Mistil
    • 16. Dezember 2015 um 11:33

    Also Danke schonmal für die Antworten.

    Oscar : schöne Skriptsammlung auf deiner Website übrigens. Ich denke, die beiden Skripte für Widerstände werde ich mir mal zu Gemüte führen ;-). Mir schwebt da schon länger ein Skript im Kopf rum, das für Spannungsteiler die beste Kombination aus erhältlichen Widerstandswerten und den entstandenen Fehler ermittelt (habe bei meinen Elektronikprojekten öfter den Fall, dass ich z.B. 4 verschiedene Referenzspannungen benötige, die ich aus Platzgründen über 1 gemeinsamen Spannungsteiler realisiere).

    Ich habe mit deiner Funktion jetzt mal einen test gemacht, den ich aber leider nicht starten kann. Nachdem ich mir endlich alle Headerdateien zusammengesucht habe, gibt der Compiler einen Fehler aus.

    Headerdatei WinAPIInternals.au3, Zeile 629
    Er hat wohl Probleme diesen Befehl zu verarbeiten

    AutoIt
    Return $bTest ? $vTrue : $vFalse

    genauer gesagt stört er sich an dem ?
    Da ich keine Ahnung habe, was der Autor damit bezwecken wollte, hoffe ich, dass Ihr mir weiter helfen könnt. Liegt es evtl. daran, dass ich nur mit der Lite-Version von Scite arbeite (bin am Arbeitsplatz und konnte damals nur AutoIT mit der Lite-Version installieren).

    Ich werde parallel auch mal versuchen, die Idee von Racer anzupassen und einen Test zu machen.

  • Progressbar beim kopieren einer großen Datei

    • Mistil
    • 16. Dezember 2015 um 08:20

    Hallo,

    ich bräuchte mal wieder einen Denkanstoß. Ich schreibe gerade ein Script, das für mich automatisch die Filme auf meiner Save-Platte mit den Filmen auf meiner ext. Platte am TV abgleicht, neue auf die TV-Platte kopiert und alte Daten löscht oder ersetzt.
    Jetzt ist so ein Film ja in der Regel recht groß.

    Ich bräuchte eine Möglichkeit, für das Kopieren von 1 großen Datei einen Fortschrittsbalken in meiner GUI zu füllen. Ich habe Google schon befragt, aber nur Lösungen zum Kopieren von mehreren Dateien gefunden, bei denen dann die Ordnergröße verglichen wird. Da ich aber nur eine Datei betrachte, geht das nicht, weil hier der Speicherplatz während dem Kopieren nicht ansteigt, sondern erst am Ende von 0 auf den vollen Wert springt (zumindest bei der Funktion mit xcopy, die ich mir geschrieben habe).

    AutoIt
    Func _FileCopyWithProgress($sSource, $sDest, $hProgress)
       GUICtrlSetState($hProgress, 0)
       Local $iFsize=FileGetSize($sSource)
       ;Local $DestSize0=DirGetSize($sDest, 2)
       Local $sFile=StringRight($sSource, StringLen($sSource)-StringInStr($sSource, "\", 0, -1))
       If StringRight($sDest, 1) <> "\" Then $sDest = $sDest & "\"
       If FileExists($sDest & "\" & $sFile) Then FileDelete($sDest & "\" & $sFile)
       Run('XCOPY "'& $sSource & '" "' & $sDest & '" /Q /C /R', "", @SW_HIDE )
       While FileGetSize($sDest & "\" & $sFile)<$iFsize
    	  GUICtrlSetState($hProgress, (FileGetSize($sDest & "\" & $sFile)/$iFsize*100)
    	  Sleep(50)
       WEnd
       GUICtrlSetState($hProgress, 100)
       Return 1
    EndFunc
    Alles anzeigen

    Wie kann ich während dem Kopieren abschätzen, wieviel Prozent der Datei schon kopiert sind und wie viele noch fehlen?

  • Bilder verschwinden hinter Radio-Control, wenn der Mauszeiger drüber fährt

    • Mistil
    • 29. März 2015 um 15:12

    Ist nicht verschlüsselt. Ich weiß nicht, ob das mit einem Passwort noch funktioniert, weil das Archiv selbstentpackend ist und silent gestartet wird. Oder kennt einer einen Startparameter, mit dem ich das Passwort übermitteln könnte?
    Das Archiv ist übrigens ein rar und nicht zip

    Edit: Habs durch ausprobieren geschafft das PW per Prarameter zu übermitteln. Das Problem wurde dadurch leider nicht gelöst.

  • Bilder verschwinden hinter Radio-Control, wenn der Mauszeiger drüber fährt

    • Mistil
    • 29. März 2015 um 13:55

    Leider hat das abschalten von UPX beim kompilieren nicht zum erfolg geführt (es war schon abgeschaltet).
    Das Problem liegt wohl an dem selbst entpackenden Archiv, das ich per FileInstall eingebunden habe. Wenn ich die Code-Zeile entferne, wird das Skript nicht als Virus erkannt. Das ein zu bindende Archiv selbst auch nicht. Erst das komplette Skript wird als Virus erkannt (trojan.win32.generic).
    UPX ist beim kompilieren wie gesagt abgeschaltet.

    Soll ich dafür ein neuer Thema erstellen, oder lässt sich das hier einfach mit lösen?

  • Bilder verschwinden hinter Radio-Control, wenn der Mauszeiger drüber fährt

    • Mistil
    • 25. März 2015 um 11:55

    Mache ich jetzt, ich wollte nur noch die Antwort wegen dem Virusalarm abwarten.
    Danke nochmal für die super Hilfe.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™