Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Device Lost Managed Directx

Iniciado por zupervaca, 08 de Julio de 2005, 12:44:22 PM

« anterior - próximo »

zupervaca

 hola estoy implementando en c-sharp y managed directx el que cuando se pierda el device se reconstruya todo, pero no se que ocurre que no funciona y sigo los mismos pasos que hago en el motor de c++ que hice, ¿alguien sabe donde puedo encontrar un tutorial o ejemplos? o mejor aun, ¿alguien sabe implementar desde c-sharp la funcionalidad de que se anulen las teclas malditas de windows con hooks?

saludos

Haddd

 Qué bien que alguien más utilice el tandem C#-MDX. Para lo que quieras ya sabes.... :P

En este tema concreto de las teclas, no puedo ayudarte. Pero si lo descubres.... :lol:  

chechocossa

 Zupervaca, acá hay un tutorial sobre C# y MDX, con un capítulo sobre recovery.

Tutorial sobre device recovery

No me puse a verlo, así que no sé hasta qué punto pueda servirte.

Saludos!

Sergio Cossa
Argentina
ergio Cossa

http://www.fatherjoe.com.ar - Father Joe Mobile
http://www.fantasticzone.blogspot.com - Fantastic Zone Blog
http://www.fantasticzone.com.ar - Fantastic Zone Page
Argentina

zupervaca

 gracias por el link, he visto ya mas o menos el fallo que tenia, una excepcion que no sabia ni que existia  :lol:

no obstante he hecho un componente que controla el teclado mediante un hook

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace dibDXCtrls
{
   // Componenete
   public partial class dibKeyHookCtrl : Component
   {
       #region Estructuras

       // Estructura del keyhook
       public struct KBDLLHOOKSTRUCT
       {
           public int vkCode;
           public int scanCode;
           public int flags;
           public int time;
           public int dwExtraInfo;
       }

       #endregion

       #region Eventos

       // Evento que sucede cuando se captura una tecla
       [DefaultValue(null), Description("Se ha un cambio de estado de una tecla")]
       public event EventHandler<EventKeyHook> CaptureKey
       {
           add
           {
               _CaptureKey += value;
           }
           remove
           {
               _CaptureKey -= value;
           }
       }

       #endregion

       #region Metodos

       // Constructor
       public dibKeyHookCtrl()
       {
           _Ctrls.Add(this);
       }

       // Inicializar el control
       public void Initialize()
       {
           // Crear el hook
           _Hook = SetWindowsHookExA(
               WH_KEYBOARD_LL,
               new LowLevelKeyboardProc(WindowKeyHook).Method.MethodHandle.GetFunctionPointer(),
               System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]).ToInt32(),
               0);
       }

       #endregion

       #region Metodos privados

       // Funcones externas de la dll
       [DllImport("user32.dll")]
       private static extern int SetWindowsHookExA(int Hook, IntPtr FN, int Mod, int Thread);
       [DllImport("user32.dll")]
       private static extern int UnhookWindowsHookEx(int Hook);
       [DllImport("user32.dll")]
       private static extern int CallNextHookEx(int Hook, int Code, int Param, KBDLLHOOKSTRUCT keyHook);
       [DllImport("user32.dll")]
       public static extern int GetAsyncKeyState(int key);
       [DllImport("user32.dll")]
       public static extern int GetKeyState(int key);
       [DllImport("user32.dll")]
       public static extern int GetKeyboardState(byte[] buffer);

       // Hook de la clase
       private const int WH_KEYBOARD_LL = 13;
       private int _Hook;
       private delegate int LowLevelKeyboardProc(int Code, int Param, KBDLLHOOKSTRUCT keyHook);
       private EventHandler<EventKeyHook> _CaptureKey;

       // Lista de componentes, el ultimo de la lista es el que se procesa
       private static List<dibKeyHookCtrl> _Ctrls = new List<dibKeyHookCtrl>();
       private static EventKeyHook _EventKeyHook = new EventKeyHook();

       // Recoger las teclas que queramos
       private int WindowKeyHook(int Code, int Param, KBDLLHOOKSTRUCT keyHook)
       {
           if (Code > 0)
           {
               dibKeyHookCtrl ctrl = _Ctrls[_Ctrls.Count - 1];
               _EventKeyHook.KeyBlock = false;
               _EventKeyHook.KeyHook = keyHook;
               _EventKeyHook.Code = Code;
               _EventKeyHook.TypeHook = Param;
               ctrl._CaptureKey(ctrl, _EventKeyHook);
               if (_EventKeyHook.KeyBlock)
               {
                   // Bloquear tecla
                   return 1;
               }
           }
           // Siguiente
           return CallNextHookEx(_Hook, Code, Param, keyHook);
       }

       // Liberar el hook de la clase
       protected override void Dispose(bool disposing)
       {
           UnhookWindowsHookEx(_Hook);
           _Ctrls.Remove(this);
       }

       #endregion
   }

   // Clase de evento
   public class EventKeyHook : EventArgs
   {
       public int TypeHook;
       public bool KeyBlock;
       public dibKeyHookCtrl.KBDLLHOOKSTRUCT KeyHook;
       public int Code;
       public int Param;
   }
}


no obstante despues de leer y volver a leer y requete leer no es recomendable ya que se tienen que tener permisos de administrador en el ordenador que vaya a funcionar y aparte hay antivirus que comprueban si hay o no hooks de teclado instalados por los keyloggers malditos, mal rollete que digan que tu juego tiene virus y en realidad lo unico que no quieres es que no puedan usar las malditas teclas de windows :lol:

saludos