Anwendung bei Refresh im Hintergrund halten

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Anwendung bei Refresh im Hintergrund halten

    Hallo zusammen,

    ich habe von Visual Basic so gut wie keine Ahnung.
    Ich programmiere hobbymäßig eigentlich ausschließlich Websites mit php und html.

    Ich habe für ein sog. Funkspiel einen "Piepser" auf php/html-Basis zusammengeschustert.
    Dieser aktualisiert sich alle 10 Sekunden und gibt einen Ton von sich,
    wenn in der MySQL-Datenbank ein Eintrag dazukommt.

    Anhand eines Video-Tutorials habe ich eine Windows-Forms-Anwendung erstellt,
    die in einem Webbrowser-Fenster meine Seite (den Piepser) aufruft und sich in ein TrayIcon schließen lässt,
    sodass sie im Hintergrund mitläuft und bei Bedarf sichtbar gemacht werden kann.

    So nun mein Problem:
    Wenn sich die Seite aktualisiert, bleibt das WindowsForms-Fenster zwar unsichtbar,
    zieht jedoch die Steuerung auf sich.
    d.h. wenn ich beispielsweise hier schreibe und die Anwendung offen hätte,
    müsste ich alle 10 Sekunden wieder in das Fenster hier klicken,
    um weiterschreiben zu können.

    Ich hätte nun gerne gewusst ob und wie es möglich ist,
    dass das Fenster, auch wenn es sich aktualisiert,
    komplett im Hintergrund bleibt und die Steuerung nicht beeinflusst.

    Vielen Dank!

    Mit freundlichen Grüßen
    4nDr3

    P.S.:
    Ich hoffe, dass ich im richtigen Bereich gepostet habe.
    Hallo,
    die Ursache wird wohl sein, dass sich der Webbrowser per Javascript aktualisiert und damit Dein Fenster automatisch den Focus bekommt, in diesem Fall nicht sehr wünschenswert .

    Vielleicht könntest Du mal das Prinzip Deiner Kommunikation mit Deiner Piepser-Seite erklären, insbesondere
    - was ändert sich an Deiner Seite bei einem Update
    - woran erkennt Deine Anwendung wann sie 'piepsen' muss
    - wozu brauchst Du den Webbrowser / das Webbrowser Control überhaupt überhaupt.
    Hallo nochmal,

    1. An der Seite ändert sich zunächst nur die Uhrzeit, was aber nicht wichtig ist.
    Es geht darum, dass diese Seite alle 10 Sekunden prüfen soll,
    ob neue Daten in der MySQL-Datenbank vorliegen, um ggf. eine Aktion auszuführen.

    2. In der Datenbank gibt es die Spalte "Status".
    Wenn der Alarm neu ist, steht "NEU" in der Spalte.
    Die Seite prüft den Inhalt der Spalte und spielt dann einen <embed>-Sound ab.

    3. Ich habe den Webbrowser eingebaut, weil ich, wie bereits erwähnt,
    eine Ahnung von VB habe und mein gesamtes System des Spiels websitebasiert ist.
    Ich dachte, dass der Aufruf der schon existierenden Website die einfachste Lösung ist.

    Wenn das an dem Java-Script liegt, müsste es doch mit der Timer-Funktion von VB funktionieren?!
    Das habe ich noch nicht getestet, werde ich aber gleich mal tun.

    MfG 4nDr3
    Jetzt bin ich leider immer noch genauso schlau wie zuvor: da alles anscheinend Serverseitig abläuft, wozu ist dann Deine Client-Anwendung mit dem Webbrowser überhaupt da ?

    Ich hatte bisher angenommen dass Deine Client Form irgendwelche Funktionen ausführen soll wenn ein DB-Update vorliegt. Oder dient sie nur als Container für Deine Piepser-Seite damit Du den <embed> Ton hörst ?
    Hallo nochmal,

    es geht um Folgendes:

    Bei diesem Spiel sollen Mitglieder von Hilfsorganisationen spielerisch den Umgang mit dem Sprechfunk erlernen bzw. trainieren.
    Um einen Einsatz nachzuspielen, müssen die User natürlich zu diesem alarmiert werden.
    Darum gibt es eine Leitstelle, wo die Disponenten die Einsatzdaten in die Datenbank eintragen.

    Der Piepser rufen den Inhalt dieser Datenbank ab und wenn es sich um einen neuen Einsatz handelt,
    sollen sie ein akustisches Alarmsignal wiedergeben und die Einsatzdaten anzeigen.

    Und das ganze System funktioniert schon und ist mit php und html geschrieben.

    Da ich den Piepser aber in einem TrayIcon haben wollte,
    habe ich die WindowsForms-Anwendung mit der Webbrowser-Oberfläche benutzt.

    Ich hoffe, dass das zum besseren Verständnis ausreichend ist.

    MfG 4nDr3

    4nDr3 schrieb:

    da ich den Piepser aber in einem TrayIcon haben wollte,
    habe ich die WindowsForms-Anwendung mit der Webbrowser-Oberfläche benutzt.

    Also gehe ich davon aus , dass Deine Form-Anwendung im Wesentlichen nur Container für die Webseite spielt. Wenn dem so ist, hast Du mehrere Möglichkeiten:

    a) lass Deine Client-Anwendung selber piepsen indem Du regelmässig (z.B. Timer + WebClient) den Sourcecode Deiner Seite auf "Neu" oder anderes abfrägst.
    Deine Anwendung braucht vermutlich auch keinen Webbrowser: Du kannst bei Bedarf Deinen Standard Browser per NotifyIcon Click starten
    Weiterer Komfort wäre die Anzahl der Updates im Tooltip des Icons anzuzeigen

    b) wie oben, nur definierst Du eine bestimmte POST-Message, bei der dein Server eine Antwort schickt ob Neuigkeiten vorliegen

    c) evtl müste es auch gehen die bisherige Lösung zu lassen und ddas Webbrowser Control nur in die Form-Controls zu packen wenn dein Fenster maximiert wird

    Hoffe das hilft erst einmal ...
    OFF TOPIC:
    Ich habe so eine Software programmiert ohne viel mit internet zu spielen.
    Ich hab das ganze bei mir über MySQL laufen.
    Das Aktualisieren macht bei mir ein Timer.

    Also schlicht gehalten hab ich es alle male es ist aber auch relativ simpel gemacht also man findet sich gut zurecht.

    BTT:
    Nun zum eigendlichen Thema:
    Er hat ein Programm wo Texte eingelesen werden.
    Nun will er den Text Aktualisieren und werend dem Aktualisierungsvorgang will er die Form Anwendung verstecken.

    Her eine erklärung für die, die nicht wissen was ein Funkspiel ist.
    Was ist ein Funkspiel ??

    Was genau ist ein Funkspiel im Internet?

    Als Funkspiel im Internet bezeichnet man eine Gemeinschaft von Personen, die unter Nutzung der Möglichkeiten des Internets, virtuelle Einsätze (Feuerwehr- oder Rettungsdiensteinsätze) nachspielen.
    Auch wenn der Name Funkspiel es anders vermuten lässt, handelt es sich in der Regel bei Funkspielen nicht um eine Spielerei sondern um Funkübungen.

    Ohne eine geregelte Kommunikation über Funk ist die effektive Durchführung von "echten" Einsätzen nicht denkbar.
    Funkspiele haben den Anspruch, das Funken für den "echten" Einsatz zu üben.

    Bei "echten" Einsätzen wird im nichtöffentlichen mobilen Landfunk (nömL) der Behörden und Organisationen mit Sicherheitsaufgaben, kurz "BOS-Funk" gefunkt.
    Dort gibt es für die Durchführung des Sprechfunkverkehrs Dienstvorschriften die einzuhalten sind.

    U.A. wird dort geregelt wie sich ein Funkteilnehmer am Sprechfunkverkehrskreis anmeldet, wie er mit der Leitstelle oder anderen Einheiten kommuniziert "Leitstelle von 11-81-1 kommen", wie Sofort-Nachrichten oder Blitz-Nachrichten usw. verfasst werden.

    Gefunkt wird bei Funkspielen nicht über echte Funkgeräte sondern über VoIP-Programme wie z.B. Teamspeak oder Mumble.


    Professionelle Funkspiele führen Schulungen durch und vermitteln somit theoretisches und praktisches Wissen. Einsätze werden im Vorfeld geplant und es werden Nachbesprechungen durchgeführt.

    Ein Grossteil der Mitspieler von Funkspielen ist selbst haupt-, nebenberuflich oder ehrenamtlich in Feuerwehren, Rettungsdiensten, THW... tätig.
    Die Kosten für Software, Servermiete usw. werden in der Regel von den Betreibern der Funkspiele bzw. von Sponsoren übernommen.
    Ein Mitgliedschaft in einem Funkspiel ist dann nicht mit Kosten verbunden.


    Der Piepser hat in seinem fall (in meinem auch) die Aufgabe den Text aus der Datenbank auszulesen und zu schreiben so das man dem entesprechen Alamieren kann und es die User dann lesen und dementsprechen reagieren.

    Hoffe ich habe denen die es nicht wissen was er vor hat bzw meint eine verständliche erklärung geboten :D

    MFG
    Patrick

    Hallo nochmal,

    ja, die Anwendung ist nur ein Container.

    Welche der Lösungen ist für Laien die einfachste?

    Wichtig ist halt, dass die Aktualisierung bzw.
    Prüfung auf neue Daten auch im minimierten Zustand stattfindet.
    Ansonsten wäre das ganze ziemlich unsinnig.

    Ich danke Dir auf jeden Fall, dass Du so viel Geduld mit mir hast. ;)

    MfG 4nDr3
    @Patrick danke für Deine Erklärung, war überhaupt nicht offtopic. Insofern wärst Du prädestiniert unserem R2D2 4nDr3 zu helfen, vielleicht sollte ich mich hier raushalten

    @4nDr3
    (a) wird funktionieren und ist einfach: 1 Webclient Abruf (ohne Login allerdings) des Sourcecodes + 1 string.contains Abfrage, ca 3-4 Zeilen .
    (c) ist ebenfalls einfach : man muss nur den Webbrowser Control aus den Form Controls rausschmeissen, bzw wieder reinschmeissen. kA ob der da noch piepst.

    b) ist am elegantesten, da Du unabhänig von Seiteninhalten bist. Serverseitig musst Du halt 1 Post-Message abfangen und 1 Zahl wieder zurückliefern. Client-seitig ist das ein httpRequest
    @kangaroo:
    Da es meiner ansicht nach aufgrund der "Erklärung" wie ich es gemacht habe off topic ist hab ichs off topic gemacht aber wenn dies nich der fall ist machts auch nichts xD

    Hallo nochmal,

    wieso nennen mich immer alle R2D2? :D
    Kleiner Tipp: 4nDr3 = Andre

    Ich glaube ich muss mich noch lange mit VB befassen,
    um das hinzubekommen... :D

    Danke für Eure Hilfe...

    Aber ich glaube zum jetzigen Zeitpunkt ist mir das einfach zu hoch... :P

    MfG Andre
    Wie dir in einer PN geschrieben habe.
    Nimm dir einen Timer und tu damit alle nase lang den Webbrowser Refreshen
    Und dann haust du werend du Refreshen tust:

    VB.NET-Quellcode

    1. Do While Webbrowser1.Refresh
    2. Me.Hide 'Deine Form wird unsichtbar
    3. Loop
    4. Me.Show 'Form wird wieder sichtbar

    Damit sollte es gehen bin mir aber nicht zu 100% sicher da ichs nicht ausprobiert habe

    Lass Dir doch vom Patrick helfen, Ihr versteht einander ja wenigstens :rolleyes:

    Lösung a) sind vermutlich insgesamt nur 12 Zeilen Code: Webclient + Timer für Source-Abfrage, 1 string.Contains-Abfrage, 1 Prozess.Start für das Starten des Standardbrowsers oder Verwenden des WebBrowser-Controls falls da doch ein Login irgendwo sein muss.

    Thats it ...

    @Patrick Deine Lösung funktioniert vermutlich nicht, da der Webbrowser ja von selber per Javascript refreshed und irgendwo den Focus stielt
    Im endefekt wüsste er dich einfach nur anstatt Webbrowser1 seinen Browser dahin packen.
    So habe ich es im sinne (kann auch sein das ich mich verdenke (bringt das alter mit sich :) ))

    Frage: benötigst Du einen Login, wenn Du auf Deine Sete gehst oder geht das ohne ? Falls ja geht das per GET oder per POST Befehl ?

    ... und da Du jetzt per Webbrowser.Refresh Deine Daten holst: stielt Dein Client immer noch den Focus ?
    In den Timer also ins Timer_Tick Event muss der Code rein den du zum Auslesen nutzt.
    Dann wenn du z.b. einen button zum auslesen hast packst du da einfach

    VB.NET-Quellcode

    1. Timer1.Start
    rein damit der Timer gestartet wird.
    Im Timer musst du die Eigenschaft "Enabled" auf True setzen

    Hallo nochmal,

    @Kangaroo:
    Die Identifizierung läuft ohne Login über eine Nummer, die durch GET übergeben wird.
    Und ja, auch über den Timer zieht die Anwendung den Fokus auf sich.

    @Patrick:
    Ich möchte ja keine Aktualisierung mit Button haben.
    Der soll sich nach dem Aufruf einfach regelmäßig aktualisieren.
    Müsste ich das Timer1.Start dann bei "Load" reinsetzen?

    Übrigens:

    Patrick1993 schrieb:


    Do While Webbrowser1.Refresh
    Me.Hide 'Deine Form wird unsichtbar
    Loop
    Me.Show 'Form wird wieder sichtbar


    Bei dem Webbrowser1.Refresh motzt das Programm:
    "Der Ausdruck ergibt keinen Wert."

    Danke!

    MfG Andre