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. veronesi

Beiträge von veronesi

  • Konzeptfrage / StdoutRead

    • veronesi
    • 11. März 2011 um 15:29

    Hmm, meinst Du, das bringt mir etwas an Geschwindigkeit?

    Eigentlich wollte ich ja, dass ich nicht zwingend alle Bilder laden muss. Sagen wir nur diejenigen, für welche die Installation bzw. Überprüfung auf diesem Rechner länger als 200ms dauert. Welche Installationen das sind, ist von Rechner zu Rechner unterschiedlich!

    Wie lange dauert es, bis 5MB Bilder so geladen und vorbereitet sind?

    Edit: also alle Bilder zusammen sind 5MB!

  • Konzeptfrage / StdoutRead

    • veronesi
    • 11. März 2011 um 15:15

    Hallo Chip!
    Das ist ein interessanter Ansatz!

    Ich weiss jetzt aber noch nicht recht, ob ich das machen möchte, denn bei 152 Bildern à 800x515 pixel ergibt das eine stattliche Grösse.
    Zudem kommen wöchentlich Tools dazu und manchmal verschwindet auch eines.

    Trotzdem danke! Einen Gedanken ist es wert!

  • Konzeptfrage / StdoutRead

    • veronesi
    • 11. März 2011 um 14:57

    Und schon wieder eine Frage:
    Falls ich AdlibRegister verwenden würde: Wird der Befehl RunWait dann überhaupt unterbrochen?

    Ich starte mit diesem Befehl die Installationen und warte auf die Rückkehr (weil ich den ExitCode benötige)

  • Konzeptfrage / StdoutRead

    • veronesi
    • 11. März 2011 um 14:27

    Ich habe mal nun einen Test gemacht. Das Hauptprogramm schreibt in eine temporäre Datei den Bildnamen rein. Die GUI-Exe liest so schnell sie kann, die Datei aus und stellt bei Änderungen das Bild dar.

    Es funktioniert. Gewisse Bilder werden dabei "übersprungen", weil die Bilddarstellung manchmal langsamer ist, als die eigentliche Installation.
    Soweit so gut, doch ich bin nicht ganz glücklich damit, dass im Millisekundenbereich eine temporäre Datei geschrieben werden muss...

    Anderst gefragt: Gibt es eine Möglichkeit, eine Funktion erst auszuführen, wenn eine andere Funktion länger als z.B. 200ms dauert?
    Klar, ich kann mit

    [autoit]

    AdlibRegister("CheckTime", 100)

    [/autoit]

    arbeiten und bei jeder Installation einen Timer starten. Die AdlibRegister funktion prüft dann alle 100ms den Timer. Steht er bei 200ms, dann das Bild darstellen.

    Aber so elegant ist das nicht! Ich befürchte, dass ich mein Programm mehr belaste mit all den Timern!

  • Konzeptfrage / StdoutRead

    • veronesi
    • 11. März 2011 um 12:32

    Ja, genau das.
    Wobei "alle" eben relativ ist. Wenn die Bilder so schnell vorbeiflitzen, dass es der Benutzer gar nicht merkt, ist es mir egal, wenn anstatt 152 "nur" 70 angezeigt werden.
    Das kriegt der Benutzer in dieser kurzen Zeit gar nicht mit!

    Aber wenn in dieser Zeit nur 3 angezeigt würden, merkt er das schon! Und dann hat er das Gefühl, es sei etwas schief gelaufen und man habe ihm nur 3 Tools installiert.
    Einfach die Bildanzeige soll die eigentliche Installation (welche ja viel wichtiger ist) nicht ausbremsen!

    Ich weiss, etwas kompliziert, aber hoffentlich ist es nun klarer.

  • Konzeptfrage / StdoutRead

    • veronesi
    • 11. März 2011 um 11:46

    Hallo Chip,

    leider wollen das die "Chefs" nicht. Sie wollen sehen, wie die Bilder durchflitzen.
    Es ist schwierig zu erklären, doch wenn mal zwischendurch ein Bild bei der Anzeige fehlt (aus Zeitgründen) so ist das weniger tragisch (auch weil die Augen gar nicht so schnell sind), als wenn sie dann z.B. nur 1 oder 2 Bilder sehen.

    Ich hoffe, ich konnte es genügend klar erklären.

  • In schon existierende Fenster Text ausgeben

    • veronesi
    • 11. März 2011 um 10:36

    Auch wenn das Thema etwas älter ist.
    Man kann ein transparentes GUI erstellen, durch das man hindurchklicken kann:

    Link

  • Konzeptfrage / StdoutRead

    • veronesi
    • 11. März 2011 um 09:39

    Hallo zusammen, zuerst mal Entschuldigung für die lange Frage!

    Ich muss mit AutoIt (interne) Software automatisch installieren und zeige dabei gleichzeitig das Bild des Produktes an, solange die Installation dauert.
    Das alles funktioniert einwandfrei!

    Doch ich möchte es etwas verbessern! Bisheriges Vorgehen ist das folgende (Pseudocode):
    While 1
    - Bilder in GUI mittels GUICtrlSetImage updaten
    - Prüfen ob Programm schon vorhanden und korrekt installiert ist
    - Wenn nicht, Silent Installation starten
    WEnd

    Das Problem ist nun, dass das Updaten des Bilder "zu lange" dauert. Nämlich dann, wenn das Programm schon vorhanden ist, könnte ich viel schneller weitergehen.
    Mein Programm wird momentan weltweit eingesetzt und wird alle 30 Minuten ausgeführt. Es werden 152 Programme installiert / überprüft.
    Die 30 Minuten kommen nicht von mir, sondern das sind Konzernvorgaben! Auch ist Vorgabe, dass sie "irgendwelche Bilder" während des Installation / Prüfung sehen wollen.

    Ich habe mal die Bildanzeige ausgeschaltet und das Programm war in 4.8 Sekunden fertig! (Wenn nichts installiert werden musste.)
    Mit den 152 (lokal gespeicherten) Bildern geht es ca. 32 Sekunden.

    Leider kann ich nicht im Hintergrund (ohne GUI) überprüfen, ob ein Programm installiert werden muss, und erst dann die GUI anzeigen.
    Begründung: Es könnte ja sein, dass die erste und die letzte Installation fehlt. Dann würde das GUI kurz aufgehen, installieren, verschwinden und kurz darauf wieder erscheinen.
    Das verwirrt die Benutzer. Sie wollen sehen, dass die Bilder kurz "durchfliegen".

    Ich habe mir gedacht, dass ich die GUI in eine seperate EXE Datei auslagere und irgendwie per StdoutRead kommuniziere, welches Bild (und Text) angezeigt werden soll.
    Aber wie kann ich in der GUI-Exe den StdoutRead benutzen, wenn das Installationsprogramm selber die GUI-Exe aufruft?

    Der Vorteil wäre, dass wenn es länger dauert, bis das Bild gesetzt ist, dass dann gewisse Bilder einfach übersprungen und nicht angezeigt werden. Im GUI-Exe würde ich einfach immer wenn Zeit vorhanden, den StdoutRead Stream lesen. Und wenn er dann gewisse Bilder "übersieht" wäre mir das recht!

    Für Vorschläge und Inputs wäre ich dankbar!
    Veronesi

  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 19:50

    Hallo!
    Der Vollständigkeit halber hier ein Nachtrag:
    Ich habe eine verblüffend einfache Lösung für das Problem mit dem Progressbar gefunden.

    Folgendes sind die Vorteile:
    - Kein Flackern
    - Farbverläufe im Hintergrund möglich, weil der "Progressbar" quasi transparent ist
    - Farbe frei definierbar
    - Der Progressbar ist gleich groß, wie der "Hintergrund" - also keine störenden Flächen!

    Man muss bloß einfach ein Label ohne Text erstellen. Die Breite soll z.B. 1 Pixel sein.
    Danach kann man mit ControlMove das Label nicht verschieben, sondern VERBREITERN!

    [autoit]


    $ProgressLabel = GUICtrlCreateLabel("", 225, 115, 1, 5)
    GUICtrlSetBkColor(-1, 0x0000FF)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ControlMove($hGUI, "", $ProgressLabel, 225, 115, 5 * 7.11)

    [/autoit]
  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 14:02

    Hallo an alle.

    Vielen Dank für Eure Mitarbeit. Es klappt nun alles wie gewünscht.
    Damit ihr seht, wie das Ergebnis wirkt, hier mein Code und die aktuellsten Bilder.

    Leider ist das Hintergrund-GUI maskiert und ohne Logo etc. Ich darf das nicht zeigen.
    Mit unserem farbigen Logo und den restlichen ausgeblendeten Dingen sieht das Ganze wirklich super aus!

    Natürlich ist das nur das Prinzip! In der Mitte welchseln dann dauernd die Bilder und oben die Texte (je nachdem, was gerade installiert wird)!

    Vielen Dank nochmals!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    FileInstall("GUI.gif", @TempDir & "\GUI.gif", 1)
    FileInstall("24852.gif", @TempDir & "\24852.gif", 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Create dimmed fullscreen background
    $hBackground = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
    GUISetBkColor(0x000000)
    WinSetTrans($hBackground, "", 180)
    GUISetState(@SW_SHOW, $hBackground)

    [/autoit] [autoit][/autoit] [autoit]

    ;Create centered GUI
    $hGUI = GUICreate("", 989, 768, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUICtrlCreatePic(@TempDir & "\GUI.gif", 0, 0, 989, 768)
    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    ;Create Progressbar
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
    $hProgress = GUICtrlCreateProgress(225, 115, 715, 6)
    GUICtrlSetBkColor(-1, 0x009640)
    GUICtrlSetColor(-1, 0xFFFF00)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7)

    [/autoit] [autoit][/autoit] [autoit]

    ;Create Text
    $TextLabel = GUICtrlCreateLabel("Install XYZabc XYZabc - V3.9", 225, 125, 715, 50, $SS_CENTER)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 28, 800, 0, "Arial")
    GUICtrlSetColor(-1, 0x0000FF)

    [/autoit] [autoit][/autoit] [autoit]

    ;Create picture
    $hGUI_Picture = GUICreate("", 800, 515, @DesktopWidth / 2 - 345, @DesktopHeight / 2 - 170, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_LAYERED, $hGUI) ;Layered GUI
    $Picture = GUICtrlCreatePic(@TempDir & "\24852.gif", 0, 0, 800, 515, -1, $WS_EX_TRANSPARENT)
    GUISetState(@SW_SHOW, $hGUI_Picture)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 100
    GUICtrlSetData($hProgress, $i)
    Sleep(100)
    Next
    Sleep(1000)

    [/autoit]

    Gruss Veronesi

    Dateien

    24852.gif 105,7 kB – 0 Downloads GUI.gif 152,65 kB – 0 Downloads
  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 13:46

    Was meinst Du genau mit "der einfarbigen" Progressbar?
    Also, genau die, die Du mir gemacht hast?? (Jeweils Vordergrund und Hintergrund einfarbig...)

    Ja, auf das läuft es vermutlich hinaus.
    Siehe auch mein Edit im letzten Post.

  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 13:37

    Hallo Oscar

    vielen Dank. Diesen DLL Call habe ich auch schon mal angeschaut.
    Ich hoffe nur, dass in zukünftigen Windows Versionen (Windows 8) diese Befehle nicht mehr laufen....
    Deshalb wäre mir der "normale" Progress-Bar lieber.

    Lieber wäre mir auch, wenn die Hintergrundfarbe Transparent wäre. Hier funktioniert es ja noch, weil der Rand einfarbig und ohne Farbverlauf ist.....
    Gibt es Alternativen?

    Trotzdem: Vielen herzlichen Dank!!!!!!!! Ich kann das sehr gut gebrauchen!
    Veronesi

    Edit:
    Das etwas störende ist auch, dass der Hintergrund immer ca. 2 Pixel grösser ist, als der Progressbar selber...
    Gibt's da auch einen DLLCall dafür, um den Style noch etwas zu ändern :)

  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 13:18

    So, nun konnte ich das auch noch auf einem XP-Rechner anschauen.

    UEZ:
    Du hast recht! Alles funktioniert, ausser dem "Progress-Bar". Dieser hat unter XP "unschöne" Abstände dazwischen. Sind also quasi einzelne Blöcke. Und es flackert wie die S..!
    Aber unter Windows 7 sieht es gut aus, nur ein leichtes flackern ist bei mir sichtbar.

    Wie könnte man einen schönen, ansprechenden Fortschrittsbalken gestalten, der nicht flimmert und bei welchem man die Farbe definieren kann?
    Natürlich müsste er auch transparent sein! Das war der Hauptgrund, weshalb ich überhaupt das Label verwendet habe!

    Danke für Eure Inputs!
    Veronesi

  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 12:09

    Hallo UEZ,

    vielen Dank! Genau das wollte ich!
    Es funktioniert super!

    Aber was meintest Du mit dem Balken?
    Ich habe Win7, es sieht in etwa wie ein progress bar aus. Klar, er flimmert etwas, warum weiss ich allerdings nicht!

    Gruss + Danke!
    Veronesi

  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 11:29

    Ein kleines Stückchen bin ich nun weiter.
    Das Bild hatte eine zu schlechte Qualität und beim nachträglichen bearbeiten konnte damit die Transparenz nicht genügend genau gesetzt werden.

    Hier ein besseres Bild.
    Nun ist aber das Problem, dass alles, was transparent sein soll, schwarz ist!

    Hat jemand eine zündende Idee?

  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 11:15

    Ergänzend muss ich vielleicht noch sagen, dass die weisse Fläche des Bildes (24852.gif) transparent sein soll. Und zwar so, dass der orange/weisser Farbverlauf sichtbar ist (nicht der schwarze Hintergrund!)
    Hat jemand eine Idee?
    Bei dem Bild sieht man, dass auf der rechten Seite (grau/weisser Stecker) dort ein bisschen transparenz vorhanden ist! Es leuchtet nämlich ein bisschen orange hervor!

    Das Bild ist natürlich nur ein Beispiel!

  • Transparenz bei mehreren Bildern

    • veronesi
    • 9. März 2011 um 08:09

    Hallo zusammen,

    ich habe die Forumssuche benutzt und auch etliche hilfreiche Threads gefunden. Jedoch keinen, der mir bei meinem Problem zur Lösung geholfen hätte.
    Im Anhang habe ich drei Bilder, und einen Beispiel Quellcode.
    Es geht im Moment bloss ums Prinzip!

    Das eine Bild musste ich aus Lizenzgründen etwas "übermalen", damit man nicht alles sieht.

    Folgendes möchte ich:
    Das Bild (24852.gif) soll auf der anderen GUI dargestellt werden. Und zwar transparent!
    Aber das kriege ich nicht hin. Ich weiss, dass vom letzten Bild das oberste linke Pixel die transparente Farbe angibt.
    Deshalb extra die GUI2.gif, welche vollflächig aus "Transparenz" besteht, damit diese "Farbe" unsichtbar ist.

    Am besten ihr führt das Script einfach mal aus, dann seht ihr, was ich meine.
    Wie kriege ich die Transparenz hin?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ;~ FileInstall("GUI.gif", "GUI.gif", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ;Create fullscreen background
    GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
    GUISetBkColor(0x000000)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Create Layered GUI
    GUICreate("",989,768,-1,-1,$WS_POPUP,$WS_EX_LAYERED) ;Layered GUI
    GUICtrlCreatePic("GUI.gif",0,0,989,768)
    ;~ GUICtrlSetState(-1,$GUI_DISABLE) ;Disable GUI when you want to have the possibility to drag it by the "WS_EX_PARENTDRAG" used in a Label or picture!

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Create "Progress bar". Use Label with special character to show a pleasing progress bar
    $Label = GUICtrlCreateLabel(ChrW(9608),225,112,715,8)
    GUICtrlSetBkColor($Label,$GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont($Label, 1, 400, 0, "Fixedsys")
    GUICtrlSetColor($Label, 0xFF0000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Create picture
    GUICtrlCreatePic("24852.gif", 150, 230, 800, 515, -1, $WS_EX_TRANSPARENT)
    GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Create empty picture for setting the transparent color. Because the last picture defines the transparent pixel (top-left pixel = transparent color)
    GUICtrlCreatePic("GUI2.gif", 0, 0, 989, 768)
    GUISetState (@SW_SHOW) ; will display an empty dialog box

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $Progress = GUICtrlRead($Label)
    GUICtrlSetData($Label, $Progress & ChrW(9608))
    If StringLen($Progress) > 87 Then
    Sleep(2000)
    ExitLoop
    EndIf
    Sleep(100)
    WEnd

    [/autoit]

    Grüsse
    Veronesi

    Dateien

    24852.gif 136,58 kB – 0 Downloads GUI.gif 98,29 kB – 0 Downloads GUI2.gif 1,49 kB – 0 Downloads
  • Programm mit AdminRechten automatisch starten

    • veronesi
    • 3. März 2011 um 18:16

    Das mit schtasks funktioniert grundsätzlich schon, aber nur wenn der Benutzer lokaler Admin ist. (UAC darf eingeschaltet sein)

    Dann musst Du das Häkchen "mit höchsten Privilegien" setzen. Dann musst Du kein Passwort etc. speichern. Aber das #RequireAdmin braucht es natürlich um den Task erfolgreich zu erstellen! (Sonst kann das Häkchen nicht gesetzt werden!)


    Gruß Veronesi

  • Remotedesktop oder nicht...

    • veronesi
    • 1. März 2011 um 09:31

    Hallo Mahagon,

    vielen Dank für Deine Unterstützung.
    Leider gibt @error keinen Fehler zurück.

    Ich habe es mal so geschrieben:

    [autoit]

    $PID = Run('"' & @ComSpec & '" /c quser',@SystemDir, @SW_HIDE, 0x2)
    ConsoleWrite(@error & @CRLF)

    [/autoit]

    Damit wird immer @error in die Konsole geschrieben. Der Wert ist aber immer 0.
    Egal welche "RUN-Version" ich nehme!

    Trotzdem danke!

  • Remotedesktop oder nicht...

    • veronesi
    • 1. März 2011 um 06:53

    Hallo zusammen,

    über die WMI funktioniert es (wie erwartet)!
    Deshalb setze ich den Thread mal auf gelöst, obwohl ich schon gerne wüsste, warum das Andere bei mir nicht lief!

    Vielen Dank!
    Gruss Veronesi

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™