
这个程序应该满足你的要求吧。
#include <stdioh>
#include <conioh>
int main(void)
{
while (1)
{
if (!kbhit())
printf("1");
else
{
char c = getch();
if (c == 'a')
{
putchar('2');
getch();
}
}
}
return 0;
}
unity3d获取按键ascii结果有:Backspace退格键、DeleteDelete键、TabTabTab键、Keypad0小键盘0、UpArrow方向键上、DownArrow方向键下、RightArrow方向键右、LeftArrow方向键左。unity3d是由UnityTechnologies公司开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具。
搞定directx后台键盘按键可以DirectInputAPI,步骤如下:
1、通过调用DirectInputCreate函数来初始化DirectInput,并获取IDirectInput8接口指针。
2、创建一个IDirectInputDevice8对象,设置键盘设备的GUID、数据格式和协作级别等参数,然后调用Acquire函数将设备关联到当前进程中。
3、通过轮询方式或者事件方式来读取键盘输入数据。如果使用轮询方式,可以在主循环中定期调用GetDeviceState函数来获取键盘状态。
4、在收到键盘输入消息时,可以使用TranslateMessage和DispatchMessage函数进行消息转换和派发,或者直接在WndProc回调函数中处理WM_KEYDOWN和WM_KEYUP消息。
实现方案有以下几种:
1、用SetWindowsHookEx(WH_KEYBOARD_LL / WH_KEYBOARD);
2、反复检查GetKeyboardState的值,自己确定键是否被按下;
3、其他的方法都不行的话,用DirectInput;
参考如下:
重载PreTranslate函数,在里面加判断:
if (WM_KEYDOWN == pMsg->message)
{
if ((VK_F10 == pMsg->wParam))
{
dosomething;
}
}
#if defined(TRACE) || defined(NCURSES_TEST)
extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable; / enable optimizations /
#ifdef _XOPEN_SOURCE_EXTENDED
extern NCURSES_EXPORT(const char ) _nc_viswbuf(const wchar_t );
#endif
extern NCURSES_EXPORT(const char ) _nc_visbuf (const char );
#define OPTIMIZE_MVCUR 0x01 / cursor movement optimization /
#define OPTIMIZE_HASHMAP 0x02 / diff hashing to detect scrolls /
#define OPTIMIZE_SCROLL 0x04 / scroll optimization /
#define OPTIMIZE_ALL 0xff / enable all optimizations (dflt) /
#define TRACE_MOVE 0x0008 / trace cursor moves and scrolls /
#define TRACE_CHARPUT 0x0010 / trace all character outputs /
#define TRACE_ORDINARY 0x001F / trace all update actions /
#define TRACE_CALLS 0x0020 / trace all curses calls /
#define TRACE_VIRTPUT 0x0040 / trace virtual character puts /
#define TRACE_IEVENT 0x0080 / trace low-level input processing /
#define TRACE_BITS 0x0100 / trace state of TTY control bits /
#define TRACE_ICALLS 0x0200 / trace internal/nested calls /
#define TRACE_CCALLS 0x0400 / trace per-character calls /
#define TRACE_DATABASE 0x0800 / trace read/write of terminfo/termcap data /
#define TRACE_ATTRS 0x1000 / trace attribute updates /
#define TRACE_SHIFT 13 / number of bits in the trace masks /
#define TRACE_MAXIMUM ((1 << TRACE_SHIFT) - 1) / maximum trace level /
#if defined(TRACE) || defined(NCURSES_TEST)
extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable; / enable optimizations /
#ifdef _XOPEN_SOURCE_EXTENDED
extern NCURSES_EXPORT(const char ) _nc_viswbuf(const wchar_t );
#endif
extern NCURSES_EXPORT(const char ) _nc_visbuf (const char );
#define OPTIMIZE_MVCUR 0x01 / cursor movement optimization /
#define OPTIMIZE_HASHMAP 0x02 / diff hashing to detect scrolls /
#define OPTIMIZE_SCROLL 0x04 / scroll optimization /
#define OPTIMIZE_ALL 0xff / enable all optimizations (dflt) /
#endif
#ifdef __cplusplus
/ these names conflict with STL /
#undef box
#undef clear
#undef erase
#undef move
#undef refresh
}
#endif
#endif / __NCURSES_H /
看完了ncursesh头文件里面的函数应该知道这个文件里面的函数能满足大家很多要求了,比如写一个界面,画个图什么的,甚至于写一个编辑器!用curses库有个特点,就是要初始化一个窗口用函数initscr();后面要用函数endwin来说明窗口结束!
那么下面就看一看学习的笔记!
我们现在知道了:在程序中调用initscr()函数,会让屏幕初始化并进入CURSES模式。还有一些其它的函数可以根据我们自己的方案初始化 CURSES。不同的初始化函数可以让屏幕进入不同的显示模式。比如:终端模式(terminal mode)、彩色模式(color mode)、鼠标模式(mouse mode)等等……
通常情况下,用户输入的字符将被终端程序送入终端的缓冲区。但当用户输入换行符时,终端程序将会中断,同时输出当前的缓冲区内容并启用新行的输出缓冲。但是大多数程序需要当用户输入单个字符时,却希望这些字符能够立即显示在屏幕上。这两个函数就是用来禁用行缓冲(line buffering)。这两个函数所初始化的的模式同样可以用来给程序传送控制字符,比如:挂起(CTRL-Z)、中断或退出(CTRL-C)。区别在于,在raw()函数模式下,这些字符将传送给程序去处理而不作为终端程序处理的信号。在cbreak()模式下,这些控制字符将被认为是终端驱动程序中的控制字符,因而将这些字符传送给终端程序。我比较喜欢使用raw(),那样可以进行更多的控制 *** 作。
这两个函数控制用户输入的键盘回显。就是在运行程序的时候是否将输入的字符出现在屏幕上。比如你的程序在运行时你需要使用控制字符,但是你不想让控制字符出现在屏幕上,就可以使用这两个函数。也就是说当用户调用getch()函数向程序输入数据时,你不想让他输入的字符出现在屏幕上。noecho()函数就可以不让控制字符(比如CTRL-C)出现在屏幕上。大多数的交互式程序要进入控制模式的时候,一般都使用echo()、noecho()函数初始化、关闭键盘回显。这样给了程序员更大的灵活性。
Xamarin可以构建用C#编写的跨平台应用,目前支持的平台包括Windows、Linux、Android和IOS平台。 开发Mac和Ios程序需要对应的设备 。Android、IOS和UWP平台由微软提供支持,GTK#(Linux,Win7)支持由社区提供。详细参阅 XamarinForms 平台支持 。
注意:观看此文需要你对Xamarin开发有一定基础。
Xamarin的目标是实现跨平台应用开发,最主要的是iOS和Android平台开发,所以对触摸或指针事件是比较完善的,但有的时候我们需要在Windows等桌面平台开发,需要能获取键盘按键事件。因此我写这篇文章介绍如何在XamarinForms控件上获取键盘事件。
获取键盘事件需要在有键盘的平台上实现,因此我们要为不同的平台编写专用的控件。理解这篇文章的内容需要提前理解 自定义呈现器 。
我们在net standard项目里新建一个自定义控件MySlider继承Slider:
以及枚举类Key:
然后我们到UWP项目中,创建CustomRenderer:
重写OnElementChanged函数,此函数在把Xamarin控件对应到本机控件时候调用,要注意释放旧的和初始化新的步骤。
Control 是本机控件的引用, Element 是Xamarin控件的引用。
在本机控件的键盘事件上加上我们的事件Control_KeyDown,在这个事件里调用我们自定义Xamarin控件的函数,以实现调用UI事件。
然后我们返回Net standard项目,在Xaml里写:
很简单只是为了学习测试。
cs文件内容是
我们通过函数OnKey,实现按下F键让Slider取最大值,按下E键让Slider取最小值。
测试一下结果,按F键Slider取最大值,按E键取最小值。
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Function 获取键盘按键状态(键盘码)
Dim 按键状态
按键状态 = GetKeyState(键盘码)
If 按键状态 < 0 Then
获取键盘按键状态 = 1
Else
获取键盘按键状态 = 0
End If
End Function
///////////上面是函数/////////
状态 = 0
Do
If 获取键盘按键状态(81) and 状态 = 0 Then
状态 = 1
TracePrint "1"
KeyDown "W", 1
KeyDown "A", 1
ElseIf 获取键盘按键状态(81)=False and 状态 = 1 Then
状态 = 0
TracePrint "0"
KeyUp "W", 1
KeyUp "A", 1
End If
Delay 5
Loop
//////////按住Q等于按住W+A ,松开也一样。
以上就是关于C语言获取按键信息函数全部的内容,包括:C语言获取按键信息函数、unity3d获取按键ascii、如何搞定directx后台键盘按键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)