AIX / XP诅咒得到一个跨平台的方式键/组合键
-
18-09-2019 - |
题
我工作的一个简单的控制台应用程序,让我的脚湿与诅咒一次。我有一个位移植我的应用程序从XP到AIX的问题。这里是一个代码样品块。
int main(void)
{
WINDOW *_window = initscr();
int _rows;
int _cols;
cbreak();
/* Accept all keys */
keypad(_window, true);
/* Don't echo things that are typed */
noecho();
/* Get the screen dimensions */
getmaxyx(_window, _rows, _cols);
/* Don't display cursor */
curs_set(0);
for (;;)
{
printw("Press a Key ");
refresh();
int key = wgetch(_window);
printw("%d \n", key);
}
endwin();
return 0;
}
当运行此XP下,我得到从DownArrow中文后跟一个CTRL-DownArrow中文以下输出。
Press a Key 258
Press a Key 481
Press a Key
暗示258为向下的箭头为CTRL-向下箭头的代码,和481。
AIX下执行此相同的测试。
Press a Key 1858
Press a Key 27
Press a Key 79
Press a Key 66
Press a Key
在1858年是向下箭头,和27/29/66对于CTRL-向下箭头的响应。 我认识到27/29/66大概是标准的转义序列之一。 我希望诅咒将其映射到一个值。 XP的侧面具有在curses.h文件中定义的CTL_DOWN。在AIX侧没有。
所以在这里,我的问题是
是其中一些咒语我错过了这里,将那些三字神奇地映射到一个不错的唯一的整数?或者我必须写一个类的某种,处理隐藏特定于平台的击键到的东西我真正的应用程序可以使用?
我的眼睛是从搜索AIX网上的东西血液出手。 任何有助于指向我在正确的方向,将不胜感激。
其他随机信息
我运行XP专业版,具有最新的服务包 MSVC 6,具有服务包6.诅咒库是pdcurses
在其它编译器是IBM XL C / C ++企业版V8.0 编译用途
XLC ++ -g app.cpp -lcurses
我使用在PC pdcurses33 和在AIX天然诅咒。
解决方案 2
回复:[PDCurses] ALT + SHIFT + n(例如)在Windows
LM 星期五,2002年7月12日8点13分53秒-0700
目前2002年7月7日下午六时10分00秒,杰里米史密斯写道:
我已经运行到比特的问题。我用的是诅咒getch()函数中 我的程序,对键,如“n”或ALT +“N”,但如何检测这些 组合:
CTRL + N Alt + Shift + N 按Ctrl + Alt + N Ctrl + Alt + Shift键+ N
我想象必须有某种标志返回Shift + Alt键+ 2作为 实际的键码(它是从SHIFT,ALT不同或2),但我不 知识。 : - (
我检查文件curses.h页眉和它们出现列出所有的 标准的扫描码,你可以从键盘回来,包括一些ALT 的组合和控制组合的几
然后我检查了Windows实现了得到一个角色。在 pdckbd.c win32_kbhit调用ReadConsoleInput的程序。移位,ALT, 控制等状态键从这个函数返回 dwControlKeyState。该报告PDC_get_bios_key什么键按下使用 两个kptab表(kptab和ext_kptab),因此,如果该组合是不 在表格中,你可能看不到它。您可以添加一些 定义的表,如果缺少了什么。还有一些代码 在设置状态(BUTTON_SHIFT,BUTTON_CONTROL同一套路, BUTTON_ALT),但这似乎是鼠标输入。所以,你可以检查 这些键在MOUSE_STATUS结构。这仅适用于 Windows实现。每个平台都有搞清楚的独特方式 哪些键被按下。
在16位的DOS,我用来改变偏移的状态,大写锁定和Num Lock 通过在十六进制417个地址更改设置。这仅适用于实 模式程序。许多新的Windows编译器甚至不允许你 访问BIOS或直接存储器与功能的任何更多。 16位 在十六进制417和六角418位置表明,右移一直 通过设定最高位的417个地址,左移,通过压 设置第二最高位的字节,通过设置ctrl键 下一个最高和后下一个最高Alt键。 418 地址持有与否的左或右ALT和状态 控制键被压。
看来好像你可能要进行一些修改您的 诅咒的特别版本,以获得你想要什么。诅咒是 非常便携式用户接口,从而经常支持最低的共同 对一些平台的功能的分母。
顺便说一句,我记得读,有一个新的工作是正在进行中 诅咒标准,其中包括国际字符支持。有没有人 这方面的努力听到任何进一步的?
最佳的愿望。
劳拉迈克尔 http://www.distasis.com
它看起来像我需要做我自己的键盘解码。
其他提示
您可以尝试使用开源“ncurses的”库,而不是它被重重面向IBM特定的硬件和软件库中的AIX提供的库。
我不记得确切如果有一个方xIC compatable版本在那里,所以你可能需要从源代码库,或切换到“海湾合作委员会”。 Thier也是ncurses的一个版本的Windows,所以你可能能够反向移植你的代码修改的原始版本。
我有ncurse支持像UP_ARROW等逻辑名,而不是用于控制按键号码vauge存储器。问题depenfing在平台上,终端仿真,NLS设置等简单的向上箭头可以回来为“UP_ARROW”,“Esc_UP”,“Cntrl_K”。
我记得测绘几个关键招像“MEANT_UP”我最后一次不得不端口诅咒应用到另一个平台(这是一个relativly容易AIX与Solaris端口)一个逻辑“意图”。