/// <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); }
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()); } }
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 ); }