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
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:
Zupervaca, acá hay un tutorial sobre C# y MDX, con un capítulo sobre recovery.
Tutorial sobre device recoveryNo me puse a verlo, así que no sé hasta qué punto pueda servirte.
Saludos!
Sergio Cossa
Argentina
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