我工作的一个简单的控制台应用程序,让我的脚湿与诅咒一次。我有一个位移植我的应用程序从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端口)一个逻辑“意图”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top