Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能在XNA中打开NumLock吗?_C#_.net_Xna_Num Lock - Fatal编程技术网

C# 你能在XNA中打开NumLock吗?

C# 你能在XNA中打开NumLock吗?,c#,.net,xna,num-lock,C#,.net,Xna,Num Lock,你能在XNA中打开NumLock吗 (我正在寻找解决方案。)我不知道这是否是您正在寻找的,但我找到了这个 为了知道是否Caps Lock、Num Lock或Scroll Lock 键打开时,我们需要通过调用 非托管函数 由于我们将调用非托管函数,下面使用 声明如下: 使用System.Runtime.InteropServices; 下面是我们将要讨论的非托管函数的定义 使用,GetKeyState(): //检索每个键的状态的非托管函数 [DllImport(“user32.dll”,Cha

你能在XNA中打开NumLock吗


(我正在寻找解决方案。)

我不知道这是否是您正在寻找的,但我找到了这个

为了知道是否Caps Lock、Num Lock或Scroll Lock 键打开时,我们需要通过调用 非托管函数

由于我们将调用非托管函数,下面使用 声明如下:

使用System.Runtime.InteropServices;
下面是我们将要讨论的非托管函数的定义 使用,GetKeyState():

//检索每个键的状态的非托管函数
[DllImport(“user32.dll”,CharSet=CharSet.Auto,ExactSpelling=true,CallingConvention=CallingConvention.Winapi)]
公共静态外部短GetKeyState(int keyCode);
//获取密钥状态并将其存储为bool
bool NumLock=((ushort)GetKeyState(0x90))&0xffff)!=0;
您必须p/Invoke。这在某种程度上涉及:

void ToggleNumLock(){
var-inputSequence=新输入[2];//一个向下键,一个向上键=一个按键
inputSequence[0]。类型=1;//键入键盘
inputSequence[1]。类型=1;
inputSequence[0].U.wVk=0x90;//NumLock的键码
inputSequence[1].U.wVk=0x90;
inputSequence[1].U.dwFlags |=KEYEVENTF.KEYUP;
var rv=SendInput(2,inputSequence,INPUT.Size);
如果(rv!=2)
{
抛出新的InvalidOperationException(“调用SendInput失败”);
}
}
无效保证锁定(){
bool numLock=((ushort)GetKeyState(0x90))&0xffff)!=0;
如果(!numLock){
ToggleNumLock();
}
}
以下是相关定义:

使用System.Runtime.InteropServices;
[DllImport(“user32.dll”)]
静态外部uint发送输入(UInt32输入,
输入[]pinput,
int cbSize);
[DllImport(“user32.dll”)]
静态外部短GetKeyState(int keyCode);
[StructLayout(LayoutKind.Sequential)]
公共结构输入
{
内部单元式;
内部按键输入U;
内部静态整数大小
{
获取{return Marshal.SizeOf(typeof(INPUT));}
}
}
[StructLayout(LayoutKind.Sequential)]
内部结构KEYBDINPUT
{
内部短wVk;
内部短路;
内部KEYEVENTF dwFlags;
内部整数时间;
内部UIntPtr dwExtraInfo;
uint未使用1;
uint未使用2;
}
[旗帜]
内部枚举KEYEVENTF:uint
{
EXTENDEDKEY=0x0001,
KEYUP=0x0002,
扫描代码=0x0008,
UNICODE=0x0004
}

但是,如果X-Box是您的目标之一,请确保不要在X-Box上运行此代码。