热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#–你可以在XNA中打开NumLock吗?

你能在XNA上打开NumLock吗?(我正在寻找XNANumberlockaffectsinput的解决方案.)解决方法:你必须PInvokeSendInput.这有点涉及:voi

你能在XNA上打开NumLock吗?

(我正在寻找XNA Number lock affects input的解决方案.)

解决方法:

你必须P / Invoke SendInput.这有点涉及:

void ToggleNumLock() {
var inputSequence = new INPUT[2]; // one keydown, one keyup = one keypress
inputSequence[0].type = 1; // type Keyboard
inputSequence[1].type = 1;
inputSequence[0].U.wVk = 0x90; // keycode for NumLock
inputSequence[1].U.wVk = 0x90;
inputSequence[1].U.dwFlags |= KEYEVENTF.KEYUP;
var rv = SendInput(2, inputSequence, INPUT.Size);
if (rv != 2)
{
throw new InvalidOperationException("Call to SendInput failed");
}
}
void EnsureNumLockIsOn() {
bool numLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
if (!numLock) {
ToggleNumLock();
}
}

以下是相关定义:

using System.Runtime.InteropServices;
[DllImport("user32.dll")]
static extern uint SendInput(UInt32 nInputs,
INPUT[] pInputs,
int cbSize);
[DllImport("user32.dll")]
static extern short GetKeyState(int keyCode);
[StructLayout(LayoutKind.Sequential)]
public struct INPUT
{
internal uint type;
internal KEYBDINPUT U;
internal static int Size
{
get { return Marshal.SizeOf(typeof(INPUT)); }
}
}
[StructLayout(LayoutKind.Sequential)]
internal struct KEYBDINPUT
{
internal short wVk;
internal short wScan;
internal KEYEVENTF dwFlags;
internal int time;
internal UIntPtr dwExtraInfo;
uint unused1;
uint unused2;
}
[Flags]
internal enum KEYEVENTF : uint
{
EXTENDEDKEY = 0x0001,
KEYUP = 0x0002,
SCANCODE = 0x0008,
UNICODE = 0x0004
}


推荐阅读
author-avatar
dafeige
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有