Laden...

Dimmer für zweiten Monitor mit "Entdimmer" bei ICQ Nachricht

Erstellt von C#Tom vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.659 Views
C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren
Dimmer für zweiten Monitor mit "Entdimmer" bei ICQ Nachricht

Hallo Zusammen!

Man stelle sich folgende Situation vor:

Ein Schreibtisch, zwei Monitore und auf einem möchte man einen Film schauen. Der Andere ist eingeschaltet und Leuchtet viel zu Hell. Gelegentlich wird der Monitor aber für's ICQ benötigt. Was tun?

Folgende Lösung:

Der Monitor wird per Software abgedimmt - kein Problem und zwar so:
[Die Form ist schwarz mit einer 80% transparenz]

 //Auf zweiten Monitor verschieben und Vollbild machen
            int upperBound;

            Screen[] screens = Screen.AllScreens;
            upperBound = screens.GetUpperBound(0);
           // MessageBox.Show(Convert.ToString(upperBound));

            this.Location = new Point(screens[1].WorkingArea.X, screens[1].WorkingArea.Y);

            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = FormBorderStyle.None;
            this.TopMost = true;

Beim mausklick auf den "Dimmer" wird die Anwendung minimiert:

 private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
          this.WindowState = FormWindowState.Minimized;

        }

Alles soweit kein Problem. ..

Aaaber jetzt kommts. Ich möchte, dass sobald eine neue ICQ Nachricht eintrudelt, die Anwendung automatisch minimiert wird. Damit ich gleich sehe, dass es was zu lesen gibt.

Was meint Ihr? Gibt es da eine nicht all zu aufwendige Möglichkeit? Ich habe mich bereits mit der ICQ Api die eigentlich ja nicht mehr erhältlich ist auseinandergesetzt, das ist aber denke ich nicht der richtige Ansatz.

Ein besserer wäre es wohl, das "blinken" von ICQ in der Taskleiste abzufangen. Damit wäre es bestimmt möglich. Nur wie kann ich sowas denn machen?

Mit den besten Grüßen
Thomas

M
125 Beiträge seit 2008
vor 14 Jahren

Du könntest das Aufpoppen des ICQ Fensters mittels AutoIT registrieren und anschließend deine Anwendung minimieren.

Irgendwo hier im Forum gabs sogar eine AutoIT Dll, die man einfach in sein Projekt einbinden konnte.

//Edit
http://www.lancelarsen.com/Blog/tabid/72/EntryId/48/AutoIt-C-Helper-Library.aspx

K
593 Beiträge seit 2007
vor 14 Jahren

Hallo C#Tom,

das mit dem blinken wird denke ich nicht zuverlässig funktionieren gerade wenn das Video als Vollbild läuft. Das absolut zuverlässigst wäre wenn du den "Verkehr" auf dem ICQ sniffst und schaust wann ein neue Nachicht kommt 😃 Da brauchst du nix mit aufpoppen etc und hast eine zuverlässige Lösung die auch nicht besonders aufwendig sein sollte.

Viele Grüße

Kaji

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Vielen Dank schonmal für die Antworten.

@Kaji: Das mitsniffen des ICQ Verkehrs wäre natürlich die zuverlässigere Lösung, doch sehe ich da im Moment zumnindest die Grenze bei meinen Programmierkünsten. Ansonsten natürlich eine Top Lösung. Falls Du dazu schon einen Quelltext hast würde ich mich sehr freuen.

@mrdjoker: Soweit habe ich mir das mal angeschaut. Das Aufpopen eines ICQ Fensters stellt damit kein Problem mehr dar, doch einen Event für ein minimiertes ICQ Fenster, welches eine neue Nachricht bekommt und minimiert bleibt (also nur blinkt) habe ich noch nicht gefunden.

Gar nicht so trivial, aber ich bin mir sicher ein solches "2 Monitore, Film und ICQ" Problem haben viele.

B
142 Beiträge seit 2007
vor 14 Jahren

Schalt den Monitor aus, und wenns "OOOOH OOOOH" macht, machst das Ding einfach an 😉
Spart Strom, schont die Umwelt und dein Problem ist gelöst!l

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Hi Björn,

ja klar 😁 daran habe ich auch schon gedacht. Aber stellen wir uns vor, Du musst mal zwischendurch auf den Topf oder Bier holen gehen und Du verpasst das wichtige "Oooo ohh". Was dann?

EDIT: Zum Umweltschutz
Es wäre ja im gegebenen Fall auch möglich ein Relais über USB anzusteuern, die den Bildschirm wieder einschaltet sobald eine Nachricht da ist. Das wäre doch was und relativ einfach umzusetzen) Dass größere Problem ist wie gesagt das Ereigniss "Neue Nachricht ich bin da"

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Ich hab in der Zwischenzeit mal noch folgendes gelöst:

Wenn die Maus auf den zweiten Monitor geschoben wird, wird die Form ausgedimmt, wird Sie aus dem zweiten in den ersten Monitor geschoben wird die Form eingedimmt.


        [DllImport("user32.dll")]
        static extern bool GetCursorPos(ref Point lpPoint);

        Point MousePoint = new Point();

        private void timer1_Tick(object sender, EventArgs e)
        {
            GetCursorPos(ref MousePoint);
            string MauskoordinateX = ("X = " + MousePoint.X.ToString());
            string MauskoordinateY = ("Y = " + MousePoint.Y.ToString());

            if (MousePoint.X >= 1)
            {

                this.WindowState = FormWindowState.Maximized;

                while (this.Opacity < 0.55)
                {
                    this.Opacity = this.Opacity + 0.1;
                    Thread.Sleep(50);
                }


            }
            else if (MousePoint.X <= -1)
            {


                while (this.Opacity > 0.00)
                {
                    this.Opacity = this.Opacity - 0.1;
                    Thread.Sleep(50);
                }
                this.WindowState = FormWindowState.Minimized;
            }

        }

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Ist es möglich eine neue Nachricht auf diese Weise zu registrieren, wie ich es neulich schon einmal hier im Forum als Tipp für ein WakeOnLan Signal bekommen habe?
Die Richtung scheint zu passen.


        //--------------------
        private void UeberwachungStarten()
        {
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Tcp);
            sock.Bind(new IPEndPoint(IPAddress.Any, 5190));
            byte[] data = new byte[1];
            sock.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(OnReceive), sock);
        }

        //Auswertung bei eingetroffenem Ereigniss
        private void OnReceive(IAsyncResult ar)
        {
            neueNachrichtErkannt = true; //Flag vergeben für neue Nachricht vorhanden
            MessageBox.Show("Neue ICQ MESSAGE");
            Socket sock = (Socket)ar.AsyncState;
            byte[] data = new byte[1];
            sock.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(OnReceive), sock);
        }

        //--------------------

Hat jemand eine Idee, wie ich den ICQ Verkehr so mitsniffen kann dass ich über neue Nachrichten benachrichtigt werde?

Danke schonmal

Gruß
Thomas

151 Beiträge seit 2003
vor 14 Jahren

So einfach wirds nicht gehen, wenn du den Socket erzeugst blockierst du den Port für ICQ...

Auch ist der Port 5190 der Port am ICQ Server und somit nicht der richtige auf dem du lauschen müssetst.

Der Port welcher von deinem ICQ genutzt wird und auf welchem du sniffen musst wird dynamisch generiert:


qip.exe:1612	TCP	moson.lan:2626	64.12.30.88:5190	ESTABLISHED	

Hier sieht man z.B. das der Verkehr über den Port 2626 läuft, der kann aber bei nächsten Start von ICQ wieder ganz anders sein.

moson.lan:2626 <-> 64.12.30.88:5190

Gruß,
moson

M
120 Beiträge seit 2009
vor 14 Jahren

Du könntest natürlich immer gucken dass alle ICQ-Fenster zu sind; und wenn dann minimiert ein neues da ist, bemerkst du das durch periodisches Abfragen. Ansonsten kann man ja in ICQ auch Socket4/5 Proxies einstellen; dazu sollte ja generell was findbar sein. Ist dann nur die Frage, ob am Proxy etwas erkennbares ankommt oder ab der wechselnde Pseudoverschlüsselung stattfindet.

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Lassen wir einmal das "Datenschnüffeln" außen vor. Ist es möglich das "blinken" einzufangen? Denn beim ICQ wird eine neue Nachricht generell bei bereits geöffnetem Chattfenster mit einem "blinken" hinterlegt.

Wie nennt sich das blinken denn eigentlich, es ist ja eine standartisierte Windowsfunktion so wie es scheint?!

Grüßle
Thomas

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Hi Zusammen,

also die Sache wäre geschafft. Ich habs jetzt mit dem AutoItHelper gemacht und es funktioniert recht gut. Sobald ich jetzt noch die Möglichkeit eingebunden habe, die ICQBenutzer auszuwählen, bei denen der Monitor sich aktivieren soll stelle ich es mal Online.

Danke für Eure Hilfe!

Grüßle
Thomas

M
125 Beiträge seit 2008
vor 14 Jahren

Ich melde schonmal mein Interesse für dein Programm/Sourcecode an.

Deine Lösung kann ich nämlich sehr gut gebrauchen.

Gruß
mrdjoker

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Hi Ihr,

hab hier http://www.TransistorNET.de/2teMonitorDimmer.zip einmal das komplette Projekt hochgeladen. Es funktioniert soweit ganz gut.

Grobe Funktion:
Maus auf zweiten Monitor -> zweiter Monitor wird entdimmt
Maus auf ersten Monitor -> zweiter Monitor wird abgedunkelt.
Fernsehen auf dem ersten Monitor und ICQ Nachricht kommt -> erster Monitor wird entdimmt, damit ICQ sichtbar wird.

Wichtig ist, dass im ICQ "das Nachrichtenfenster geöffnet aber nich angewählt ist..." angehakt ist, da auf die kleinen popups im Systray geprüft wird ob eine neue Nachricht vorhanden ist. Aktuell lässt sich auch nur ein Benutzernamen eintragen für den der "Entdimm-Trigger" aktiv wird. Das Programm lässt sich über das Systraysymbol einstellen.

Wer möchte schaut sich das Ganze mal und und berichtet mir hier, ob es funktioniert und was man jetzt noch verbessern kann (vom Programmaufbau und Funktionen) - Ich würde mich über feedback freuen!

Viele Grüße
Thomas

C
C#Tom Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

Hat es schon jemand getestet? (push)