[C#] Problema override WndProc

Iniciado por .:UND3R:., 19 Noviembre 2015, 03:25 AM

0 Miembros y 1 Visitante están viendo este tema.

.:UND3R:.

Hola a todos, estoy teniendo problemas al intentar hacer un override en WndProc, el problema consiste en que no se generan los mensajes de Windows que quiero capturar. Cabe mencionar que la aplicación es "Console Application" y para ocultar la consola, modifiqué la opción del proyecto de output: "Windows Application". Adicionar que www.asd.com lo uso como ejemplo, pues de acorde a cada evento, se realiza una notificación distinta a una Web, si me pudieran ayudar quedaría completamente agradecido, saludos y gracias por su tiempo, aquí el código:

Código (csharp) [Seleccionar]
using System;
using System.Net;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace iWatch
{
    class Program : System.Windows.Forms.Form
    {
        private const int WM_QUERYENDSESSION = 0x0011;
        private const int WM_POWERBROADCAST = 0x0218;
        private const int PBT_APMSUSPEND = 0x04;
        private const int PBT_APMRESUMESUSPEND = 0x07;
        WebRequest request;

        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.InheritanceDemand, Name = "FullTrust")]
        protected override void WndProc(ref Message m)
        {
            // Listen for operating system messages.
            switch (m.Msg)
            {
                // The WM_ACTIVATEAPP message occurs when the application
                // becomes the active application or becomes inactive.
                case WM_QUERYENDSESSION:

                    request = WebRequest.Create("http://www.asd.com");
                    request.GetResponse();
                    break;

                case WM_POWERBROADCAST:

                    if((int)m.WParam == PBT_APMSUSPEND)
                    {
                        request = WebRequest.Create("http://www.asd.com");
                        request.GetResponse();

                    }else if((int)m.WParam == PBT_APMRESUMESUSPEND)
                    {
                        request = WebRequest.Create("http://www.asd.com");
                        request.GetResponse();

                    }
                    break;
            }
            base.WndProc(ref m);
        }

        static void Main(string[] args)
        {
            Thread.Sleep(20000);

            WebRequest request = WebRequest.Create("http://www.asd.com");
            request.GetResponse();

            while (true)
            {
                String[] phraselist = new String[] { "hola", "adios" };

                // get handle
                IntPtr handle = GetForegroundWindow();

                // get title
                const int count = 512;
                var text = new StringBuilder(count);

                if (GetWindowText(handle, text, count) > 0)
                {
                    foreach(String phrase in phraselist){
                        if(text.ToString().ToUpper().IndexOf(phrase.ToUpper()) != -1)
                        {
                            System.Console.WriteLine(text.ToString());
                            request = WebRequest.Create("http://www.asd.com");
                            request.GetResponse();
                            Thread.Sleep(1200000);
                        }
                    }
                }
            }
        }
    }
}

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

.:UND3R:.

Solucionado:
Copié este código completamente y luego lo adapté a mis necesidades:

Código (csharp) [Seleccionar]
using System;
using System.Drawing;
using System.Windows.Forms;

namespace csTempWindowsApplication1
{
    public class Form1 : System.Windows.Forms.Form
    {
        // Constant value was found in the "windows.h" header file.
        private const int WM_ACTIVATEAPP = 0x001C;
        private bool appActive = true;

        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        public Form1()
        {
            this.Size = new System.Drawing.Size(300,300);
            this.Text = "Form1";
            this.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            // Paint a string in different styles depending on whether the
            // application is active.
            if (appActive)
            {
                e.Graphics.FillRectangle(SystemBrushes.ActiveCaption,20,20,260,50);
                e.Graphics.DrawString("Application is active", this.Font, SystemBrushes.ActiveCaptionText, 20,20);
            }
            else
            {
                e.Graphics.FillRectangle(SystemBrushes.InactiveCaption,20,20,260,50);
                e.Graphics.DrawString("Application is Inactive", this.Font, SystemBrushes.ActiveCaptionText, 20,20);
            }
        }

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
        protected override void WndProc(ref Message m)
        {
            // Listen for operating system messages.
            switch (m.Msg)
            {
                // The WM_ACTIVATEAPP message occurs when the application
                // becomes the active application or becomes inactive.
                case WM_ACTIVATEAPP:

                    // The WParam value identifies what is occurring.
                    appActive = (((int)m.WParam != 0));

                    // Invalidate to get new text painted.
                    this.Invalidate();

                    break;               
            }
            base.WndProc(ref m);
        }
    }
}


Supongo que se debe a la forma en que se crea el Form, saludos.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)