Logo

¡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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.
Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.