Example #1
0
        /// <summary>
        /// Remove previously added listener
        /// </summary>
        /// <param name="window">The RenderWindow you registered with</param>
        /// <param name="listener">The listener registered</param>
        public void UnregisterListener(RenderWindow window, IWindowEventListener listener)
        {
            Contract.RequiresNotNull(window, "window");
            Contract.RequiresNotNull(listener, "listener");

            if (this._listeners.ContainsKey(window))
            {
                this._listeners[window].Remove(listener);
            }
        }
Example #2
0
        /// <summary>
        /// Add a listener to listen to renderwindow events (multiple listener's per renderwindow is fine)
        /// The same listener can listen to multiple windows, as the Window Pointer is sent along with
        /// any messages.
        /// </summary>
        /// <param name="window">The RenderWindow you are interested in monitoring</param>
        /// <param name="listener">Your callback listener</param>
        public void RegisterListener(RenderWindow window, IWindowEventListener listener)
        {
            Contract.RequiresNotNull(window, "window");
            Contract.RequiresNotNull(listener, "listener");

            if (!this._listeners.ContainsKey(window))
            {
                this._listeners.Add(window, new List <IWindowEventListener>());
            }
            this._listeners[window].Add(listener);
        }
Example #3
0
        public WindowHook(IntPtr hwndTarget, IWindowEventListener manejadorEventos) : base(HookType.WH_CALLWNDPROC)
        {
            this.manejadorEventos = manejadorEventos;
            base.childProcedure   = new hookHandler(hookCallback);

            Trace.WriteLine("_--------------------------------_");
            try
            {
                //this.hwndTarget = LoadLibrary("user32.dll");
                this.hwndTarget = hwndTarget;
                GetWindowThreadProcessId(this.hwndTarget, out this.pID); //PAsamos por referencia para que pID salga con el valor del proceso
                using (Process targetProc = Process.GetProcessById((int)this.pID))
                    using (ProcessModule curModule = targetProc.MainModule)
                    {
                        Trace.WriteLine("HANDLER NAME = " + curModule.ModuleName + " , HANDLER FULL FILE PATH = " + curModule.FileName);
                        IntPtr Auxhandler = LoadLibrary(curModule.FileName); //Parece ser que sino se carga antes, GetModuleHandler fallara con codigo erro 126
                        IntPtr handler    = GetModuleHandle(curModule.ModuleName);
                        if (handler == IntPtr.Zero)
                        {
                            //handler = Auxhandler;
                            int err = Marshal.GetLastWin32Error();
                            if (err != 0)
                            {
                                MessageBox.Show("No se ha podido encontrar el handler . Codigo error = " + err);
                            }
                        }
                        Trace.WriteLine("FOUNDED HANDLER ADRESS = " + handler.ToString());
                        base.init(handler, 0);
                        // base.init(IntPtr.Zero, 0);
                    }
            }
            catch (Win32Exception e)
            {
                Trace.WriteLine("Codigo error = " + e.NativeErrorCode + " Descripción = " + e.Message);
                Trace.WriteLine(e.ToString());
            }
        }
Example #4
0
        public void init()
        {
            if (working)
            {
                throw new Exception("La clase ya ha sido inicializada");
            }
            working = true;
            lapiz   = new Pen(Color.Red);

            IWindowEventListener escuchadorTeclado = WindowEventListener.getInstance(this);

            hookWindow = new WindowHook(this.handlerTarget, escuchadorTeclado); //Bug, simplemente no tengo permiso para instalar un hook en un proceso especifico.


            /*
             * new Thread //Este hilo en segundo plano se encarga de ir consultando el tamaño de la ventana objetivo y en caso de existir modificación, notificarnoslo
             *  (
             *      () =>
             *      {
             *          RECT rect;
             *          Thread.CurrentThread.IsBackground = true;
             *          Thread.CurrentThread.Name = "movedWindowListener";
             *          while (this.working)
             *          {
             *              GetWindowRect(this.handlerTarget, out rect);
             *              if (this.ctrlTargetRect != rect)
             *              {
             *                  this.ctrlTargetRect = rect;
             *                  this.adjust();
             *              }
             *              Thread.Sleep(500);
             *          }
             *      }
             *  ).Start();
             */
        }
		/// <summary>
		/// Remove previously added listener
		/// </summary>
		/// <param name="window">The RenderWindow you registered with</param>
		/// <param name="listener">The listener registered</param>
		public void UnregisterListener( RenderWindow window, IWindowEventListener listener )
		{
			Contract.RequiresNotNull( window, "window" );
			Contract.RequiresNotNull( listener, "listener" );

			if ( this._listeners.ContainsKey( window ) )
			{
				this._listeners[ window ].Remove( listener );
			}
		}
		/// <summary>
		/// Add a listener to listen to renderwindow events (multiple listener's per renderwindow is fine)
		/// The same listener can listen to multiple windows, as the Window Pointer is sent along with
		/// any messages.
		/// </summary>
		/// <param name="window">The RenderWindow you are interested in monitoring</param>
		/// <param name="listener">Your callback listener</param>
		public void RegisterListener( RenderWindow window, IWindowEventListener listener )
		{
			Contract.RequiresNotNull( window, "window" );
			Contract.RequiresNotNull( listener, "listener" );

			if ( !this._listeners.ContainsKey( window ) )
			{
				this._listeners.Add( window, new List<IWindowEventListener>() );
			}
			this._listeners[ window ].Add( listener );
		}